日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

linux内核 块驱动程序,linux – 为什么内核使用默认的块驱动程序而不是我的驱动程序代码?...

發布時間:2025/3/15 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 – 为什么内核使用默认的块驱动程序而不是我的驱动程序代码?...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。