關於 linux 內核 2.6 的模塊編 譯問題

關於 linux 內核 2.6 的模塊編 譯問題
(以 unbutu7.04 爲例)
    在參考 http://www.xiyoulinux.cn 關於 linux 內核時,由於在內核模塊編譯時需要編寫 Makefile 文
件,其基本格式如下:
obj-m := hello.o
KERNELDIR := /usr/src/kernels/linux-2.6.24/
modules:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
        rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
其中,KERNELDIR 的作用是指出 linux 源代碼所在,並從中找出起頂層的 Makefile 文件,但是在
unbutu 中,/usr/src/kernels/目錄是不存在的,如何尋找到在內核模塊中必須用到的 modules 目錄,
通過 shell 命令 whereis modules
ghost@ghost-desktop:~/Desktop/testzone/linux$ whereis modules
modules: /etc/modules /lib/modules /usr/share/man/man5/modules.5.gz
        通過上述查找結果可以看出,/etc 下一般都是系統的配置文件,/usr 下一般含所有的命令、庫
文件、manual pages 以及正常操作時所需的其他一些非改變文件,所有的文件都應該是通用的而非特定
地用於某臺給定的機器。 所以/lib 一般是系統的鏈接庫文件,此時 modules。
 進入此/modules 目錄:
ghost@ghost-desktop:/lib/modules$ ls
2.6.20-15-generic   2.6.20.3-ubuntu1
2.6.20-15-generic 一般含有 kernel 涉及到的 Makefile 文件。
ghost@ghost-desktop:/lib/modules/2.6.20-15-generic$ ls
build     modules.alias          modules.inputmap     modules.seriomap
initrd    modules.ccwmap          modules.isapnpmap   modules.symbols
kernel     modules.dep            modules.ofmap        modules.usbmap
madwifi    modules.ieee1394map   modules.pcimap       volatile
此時,可以定義 Makefile 文件的內容
obj-m := hello.o
KERNELDIR := /lib/modules/2.6.20-15-generic/build
modules:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
       rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
就可以進行內核模塊的編譯和加載了。
使用到的命令:(以下命令必須在 root 權限下來執行)
make 編譯
insmod hello.ko 插入模塊
lsmod 查看載入模塊
rmmod hello 刪除模塊
dmesg 查看日誌
       其實即便是系統沒有自動安裝源碼,也可以通過下載一個源碼包,通過編譯內核來實現。
基本編譯步驟:
make oldconfig    #對內核進行一個基本配置,可對內核進行裁剪,但建議第一次編譯內核的,直接
                          #  通過該步驟
make
make bzImage
make modules /* 編譯 模塊 */
make modules_install /* 安裝 模塊 */
具體方法是:
開始執行 make.一般有一個小時吧,建議將該過程拋至後臺執行,同時要保證空間足夠(,由於完整編譯
需要比較大的空間)
如下編譯方式:
ghost@ghost:/usr/src/linux-source-2.6.20$ make &
ghost@ghost:/usr/src/linux-source-2.6.20$ make bzImage &
當然,第一個 make 也可以不執行,直接 make bzImage。執行結束後,可以看到在當前目錄下生成了一
個新的文件: vmlinux, 其屬性爲-rwxr-xr-x。
然後 :
root@ghost:/usr/src/linux-source-2.6.20#make modules /* 編譯模塊 */
root@ghost:/usr/src/linux-source-2.6.20#make modules_install /* 安裝模塊 */
       執行結束之後,會在/lib/modules 下生成新的目錄/lib/modules/2.6.20-15-generic/
 在隨後的編譯模塊文件時,要用到這個路徑下的 build 目錄(同上:/lib/modules/2.6.20-15-
generic/build ). 
至此,內核編譯完成,內核樹就建立.可以重啓一下系統。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章