最近在學(xué)習(xí)linux的驅(qū)動,之前做嵌入式實驗的時候加載驅(qū)動模塊都是.o文件,但是現(xiàn)在發(fā)現(xiàn)很多驅(qū)動模塊都是.ko文件,于是上網(wǎng)查了一下兩者的區(qū)別,現(xiàn)在貼出來,和大家一起分享。 .o文件也就是object文件,.ko文件是kernel object文件,與.o的區(qū)別在于其多了一些sections,比如.modinfo。.modinfo section是由kernel source里的modpost工具生成的,包括MODULE_AUTHOR, MODULE_DESCRIPTION, MODULE_LICENSE, device ID table以及模塊依賴關(guān)系等等。depmod工具根據(jù).modinfo section生成modules.dep, modules.*map等文件,以便modprobe更方便的加載模塊。 在2.6內(nèi)核下編譯driver, 首先要確認(rèn)你的linux系統(tǒng)里有沒有kernel tree,檢查的方法是看看文件夾/lib/modules/$(uname -r)/build是否指向source code,并進去看看,是否有Makefile, include, scripts等文件夾,在scripts/mod下可以找到前面提到的modpost,這個是生成.ko的關(guān)鍵。如果沒有kernel tree,需要重新build一份kernel來建立這個kernel tree。 在2.4內(nèi)核中,生成的就是.o文件。2.6的kernel對內(nèi)核模塊的管理做了一些擴展,生成的就是.ko文件。 |
|