日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

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

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