Jollen 的 Linux 驅動程式課程是以 kernel 2.4 做為實習環境,但 kernel 2.6 與 kernel 2.4 的核心與模組編譯步驟不同;本文說明如何在 kernel 2.6 環境下編譯核心與模組,供同學參考。
作者/陳俊宏
www.jollen.org
Kernel 2.4 & 2.6 編譯
底下用一個表格來比較編譯 kernel 2.4 與 kernel 2.6 的步驟差異。
Kernel 2.4 | Kernel 2.6 |
1.編譯設定: # make menuconfig 2.編譯核心: # make dep # make bzImage 3.編譯模組並安裝: # make modules # make modules_install | 1.編譯設定: # make menuconfig 2.編譯核心與模組: # make 3.安裝: # make modules_install install |
Kernel 2.6 模組編譯
kernel 2.6 的模組「模組化」程度相當高,因此在 kernel 2.6 環境下編譯模組時,是以 sub-module 的觀念來實施,與 kernel 2.4 的獨立編譯觀念不同。首先,舉我們的 debug card 範例來說明編譯 kernel 2.6 模組的方式;接著再說明安裝 kernel 2.6 模組的方法。
1. 先撰寫編譯模組的 Makefile 如下: |
obj-m := card.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
2. 編譯:
# make
編譯後可以得到 card.ko,這才是真正的 kernel 2.6 模組;kernel 2.6 模組的副檔名為 "*.ko"。
3. 將 card.ko 複制到模組目錄下:
# cp card.ko /lib/modules/`uname -r`/kernel/drivers/
4. 重新產生模組的 "dependency descriptions":
# depmod -a
5. 安裝模組:
# insmod ./card.ko
或是:
# modprobe card
同樣是利用 insmod 或 modprobe 指令將 card.ko 安裝至系統即可。
Jollen's Blog 使用 Github issues 與讀者交流討論。請點擊上方的文章專屬 issue,或 open a new issue
您可透過電子郵件 jollen@jollen.org,或是 Linkedin 與我連絡。更歡迎使用微信,請搜尋 WeChat ID:jollentw