iT邦幫忙

DAY 4
0

Linux kernel模組的開發系列 第 4

編譯 Linux kernel module

前篇介紹的 hello-1.c 需要進行編譯成 kernel module 之後,才能夠載入執行,而編譯 kernel module 跟編譯一般程式有很大的不同。首先我們需要建立一個 Makefile,內容指示編譯器如何去進行 compile 的動作:

obj-m += hello-1.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

在完成以上內容的 Makefile 之後,只須執行 make 命令,就可以建立出名為 hello-1.ko 的 kernel module。其中 obj-m 表示要編譯成模組的檔案名稱集合。依慣例 all 為預設的 make 動作,clean 為清除的動作。

一開始在我的目錄裡只有 hello-1.c 與 Makefile 兩個檔案,再進行 make 之後會產生一些中間黨與 kernel module:

[root@Pomelo-14-61 LKMP]# ls
hello-1.c  Makefile

[root@Pomelo-14-61 LKMP]# make
make -C /lib/modules/2.6.32-279.22.1.el6.x86_64/build M=/root/pomelo/LKMP modules
make[1]: Entering directory `/usr/src/kernels/2.6.32-279.22.1.el6.x86_64'
  CC [M]  /root/pomelo/LKMP/hello-1.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /root/pomelo/LKMP/hello-1.mod.o
  LD [M]  /root/pomelo/LKMP/hello-1.ko.unsigned
  NO SIGN [M] /root/pomelo/LKMP/hello-1.ko
make[1]: Leaving directory `/usr/src/kernels/2.6.32-279.22.1.el6.x86_64'

[root@Pomelo-14-61 LKMP]# ls
hello-1.c   hello-1.ko.unsigned  hello-1.mod.o  Makefile       Module.symvers
hello-1.ko  hello-1.mod.c        hello-1.o      modules.order

上一篇
Hello World - Linux kernel module.
下一篇
執行 kernel module
系列文
Linux kernel模組的開發30

尚未有邦友留言

立即登入留言