linux内核 块驱动程序,linux – 为什么内核使用默认的块驱动程序而不是我的驱动程序代码?...
我寫了一個塊驅動程序,它創建了一個虛擬塊設備(sbd0).我為該塊設備注冊了所有設備操作:(請參閱2.6.32內核源代碼中的include /
linux / blkdev.h)
static struct block_device_operations sbd_ops = {
.owner = THIS_MODULE,.open = sbd_open,.release = sbd_close,.ioctl = sbd_ioctl,.getgeo = sbd_getgeo,.locked_ioctl = sbd_locked_ioctl,.compat_ioctl = sbd_compat_ioctl,.direct_access = sbd_direct_access,.media_changed = sbd_media_changed,.revalidate_disk = sbd_revalidate_disk
};
我編譯了驅動程序.我插入了模塊并創建了/ dev / sbd0.現在我想測試我的驅動程序代碼.所以我寫了一個如下的應用程序.
fd = open("/dev/sbd0",O_RDONLY);
retval = ioctl(fd,BLKBSZGET,&blksz); //trying to get logical block size
輸出為:4096
我想知道:我沒有為BLKBSZGET實現ioctl.它沒有調用我的sbd_ioctl,而是使用了默認驅動程序并給了我結果.對于open,close調用,它執行了sbd_open和sbd_close(我實現了).然后我嘗試了:
retval = ioctl(fd,Hdio_GETGEO,&geoinfo);
它調用了sbd_getgeo,但我認為它會調用sbd_ioctl.
這是我的問題:
>我實現了一個驅動程序并創建了一個設備.如果我在該設備上執行任何操作,則必須調用我的驅動程序應用程序.但它如何使用我的一些驅動程序功能和幾個默認的驅動程序功能?
> ioctl(fd,..)沒有調用.ioctl調用,但它調用了.getgeo.這怎么可能?
總結
以上是生活随笔為你收集整理的linux内核 块驱动程序,linux – 为什么内核使用默认的块驱动程序而不是我的驱动程序代码?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 判断当前时间是否为零点
- 下一篇: 筒灯智能驱动芯片作用_如然之光,魅族 L