1.首先編寫hello.c檔案
#include #include #include module_license("gpl");//模組許可宣告
static int hello_init(void)//模組載入函式
static void hello_exit(void)//模組解除安裝函式
module_init(hello_init);//模組註冊
module_exit(hello_exit);
module_author("a student has a try");//相關資訊
module_description("this is a ****** example!\n");
module_alias("a ******st example");
2.編寫makefile檔案
obj-m += hello.o
current_path:=$(shell pwd)#generate the path
linux_kernel:=$(shell uname -r)#current kernel version
linux_kernel_path:=/lib/modules/$(linux_kernel)/build #absolute path
all:
make -c $(linux_kernel_path) m=$(current_path) modules #compile object
clean:
make -c $(linux_kernel_path) m=$(current+path) clean #clean
第一句話指定要被編譯的檔案
3.make
完成上述兩個檔案後,在當前目錄下執行make命令,就會生成hello.ko檔案,即模組目標檔案
root@loongson-desktop:/home/loongson/lijy-backup/lijy-test/kernel/linux-3.8/lijy# ls
hello.c hello.mod.c hello.o modules.order
hello.ko hello.mod.o makefile module.symvers
4.insmod,rmmod和dmesg
insmod命令可以使我們寫的這個模組加入到核心中,但是一般我們要加上sudo。rmmod當然就是解除安裝這個模組了。我們在載入或解除安裝模組時都有一些提示語,即我們printk中顯示的語句,這時候可以用dmesg命令來檢視
執行結果如下:
root@loongson-desktop:/home/loongson/lijy-backup/lijy-test/kernel/linux-3.8/lijy# dmesg
root@loongson-desktop:/home/loongson/lijy-backup/lijy-test/kernel/linux-3.8/lijy# insmod hello.ko
root@loongson-desktop:/home/loongson/lijy-backup/lijy-test/kernel/linux-3.8/lijy# dmesg
[801809.377967] hello,i am a student
root@loongson-desktop:/home/loongson/lijy-backup/lijy-test/kernel/linux-3.8/lijy# rmmod hello.ko
root@loongson-desktop:/home/loongson/lijy-backup/lijy-test/kernel/linux-3.8/lijy# dmesg
[801809.377967] hello,i am a student
[801825.225934] goodbye kernel
算是對核心的程式設計有了乙個比較直觀的了解了,c 檔案如何去編寫,後期應該還有很多任務作要做。 核心編譯 模組編譯
目前是嵌入式 linux 的初學者感覺有所體會 1.從demo 學起 tiny 6410 上的開發,我的任務不斷是新增小模組。交叉編譯器,以及其它一系列 tool chains 可直使用產商提供的工具。避免過多細節的好處在於,你可以從整體處著手你從書本學到的理論知識。2.kernel 編譯其它很簡單...
核心模組編譯
第一步,編寫模組 include include module license gpl 許可許可權證明,gpl開源的協議 module author embedsky 作者 module description hello world module 描述 static int hello init ...
核心模組的編譯
編譯核心模組的方法與編譯一般應用程式的方法略有不同.我們會發現在核心原始碼樹的層層目錄中,都存在有makefile.即這些makefile是分層次組織的.以往的核心版本中,編譯模組比較麻煩,需要我們對這些makefile做出許多更改.2.6的核心採用了 kbuild 編譯系統,簡化了這些問題.編譯之...