核心模組編譯練習 初認識編譯過程(1)

2021-06-18 22:51:56 字數 2012 閱讀 9890

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 編譯系統,簡化了這些問題.編譯之...