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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

如何单独编译Linux源代码中的驱动模块,比如NVMe驱动?

發(fā)布時(shí)間:2023/12/20 linux 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何单独编译Linux源代码中的驱动模块,比如NVMe驱动? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

的確,在下載了Linux的源代碼之后,Linux的Makefile提供個(gè)很完善靈活的編譯方法,比如:make menuconfig 可以讓我們非常方便的編譯一個(gè)完整的內(nèi)核。
但是,對(duì)于模塊開(kāi)發(fā)來(lái)說(shuō)我們不需要編譯一個(gè)完整的內(nèi)核,而只更改對(duì)應(yīng)模塊中的部分代碼。那么本文就一步一步的告訴你該怎么編譯一個(gè)驅(qū)動(dòng)模塊,比如NVMe驅(qū)動(dòng)(默認(rèn)你已經(jīng)下載了完整的Linux源代碼)。

  • 確定將要運(yùn)行你新編譯的模塊的平臺(tái)的Linux版本信息
  • uname -r

    筆者的平臺(tái)信息是:5.13.0-41-generic
    如果你不確認(rèn)主機(jī)平臺(tái)的信息,而隨意使用其它版本的Linux源碼編譯的話,那你在插入模塊的時(shí)候會(huì)遇到以下錯(cuò)誤:

    insmod: ERROR: could not insert module nvme.ko: Invalid module format
  • 根據(jù)運(yùn)行平臺(tái)的版本信息,將Linux源代碼的版本切換到相應(yīng)的版本
  • git reset --hard v5.13-rc7
  • 進(jìn)入到目標(biāo)模塊目錄中,更改Makefile
  • cd drivers/nvme # 在Makefile的最后添加以下命令 # 如果你是在運(yùn)行平臺(tái)上編譯的,你可以直接用下面這一行,來(lái)動(dòng)態(tài)的找到平臺(tái)的Linux版本編譯模塊所需的目錄 # KERNEL_DIR = /lib/modules/`uname -r`/build KERNEL_DIR = /lib/modules/5.13.0-40-generic/build MODULEDIR := $(shell pwd)modules:make -C $(KERNEL_DIR) M=$(MODULEDIR) modules
  • 更改驅(qū)動(dòng)模塊源代碼
  • # 在模塊進(jìn)入函數(shù):nvme_init 中隨便加入一句打印 diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c index a29b170701fc..a09ea1e5aa7e 100644 --- a/drivers/nvme/host/pci.c +++ b/drivers/nvme/host/pci.c @@ -3317,6 +3317,7 @@ static int __init nvme_init(void)BUILD_BUG_ON(sizeof(struct nvme_create_sq) != 64);BUILD_BUG_ON(sizeof(struct nvme_delete_queue) != 64);BUILD_BUG_ON(IRQ_AFFINITY_MAX_SETS < 2); + printk("This is new test driver");return pci_register_driver(&nvme_driver);}
  • 編譯,等待完成
  • make
  • 安裝
  • insmod host/nvme-core.ko insmod host/nvme.ko

    如果你在插入模塊的時(shí)候遇到了這個(gè)問(wèn)題:

    ERROR: could not insert module host/nvme.ko: Unknown symbol in module

    說(shuō)明是依賴模塊沒(méi)有插入,你可以使用以下命令來(lái)獲取依賴模塊的名稱,然后先把對(duì)應(yīng)模塊插入。

    modinfo xxx.ko | grep depends
  • 查看
  • dmesg

    總結(jié)

    以上是生活随笔為你收集整理的如何单独编译Linux源代码中的驱动模块,比如NVMe驱动?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。