我的第一個核心模組——Hello,kernel

來源:互聯網
上載者:User

  這個學期,開始接觸linux核心,覺得其linux核心的實現機制確實挺有趣的,我個人比較喜歡模組這種設計方式,感覺其極大的擴充了核心,感覺就像是window程式中的動態連結程式庫一樣,只有當需要的時候,才會載入進來。

   就和人與人之間第一次接觸一樣,和核心開始打交道,首先還是相互問好(當然,核心跟我們問好,就回饋在它能乖乖的聽我的話,把資訊正確地輸出)。程式很簡單,就是在進入核心的時候,列印一個Hello Kernel,離開的時候,再說聲See you, Kernel。這個程式基本上是按照陳莉君老師的核心之旅網站上的教程依樣畫葫蘆,非常感謝陳老師的引導以及作者寫的這麼好的教程。

 

 1 #include<linux/module.h>
 2 #include<linux/kernel.h>
 3 #include<linux/init.h>
 4 
 5 static int __init hello_init(void)
 6 {
 7         printk("<1>Hello Kernel!\n"); /*立即輸出資訊*/
 8         return 0;
 9 }
10 
11 static void __exit hello_cleanup(void)
12 {
13         printk("<1>See you,Kernel!\n");
14 }
15 
16 module_init(hello_init);        /*進入核心的時候,調用hello_init        */
17 module_exit(hello_cleanup);     /*離開核心的時候,調用hello_cleanup     */
18 MODULE_LICENSE("GPL");          /*協議*/
19 

再接著看看Makefile檔案的編寫,這個是至關重要的,我第一次沒寫對,所以編譯的時候出問題拉,我一開始還以為是我自己有上面必須的組建沒裝,後來在同學的指導下並參考核心之旅網站上的內容,才弄好拉這個Makefile,還請您多多指點。

 

 1 obj-m += hello.o                         #由此目標檔案產生模組 
 2 CURRENT_PATH := $(shell pwd)             #當前所在的路徑
 3 LINUX_KERNEL := $(shell uname -r)        #核心的版本號碼
 4 
 5 #核心代碼所在的路徑    
 6 LINUX_KERNEL_PATH := /usr/src/linux-headers-$(LINUX_KERNEL)
 7 
 8 #編譯
 9 all:
10         make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules   
11 
12 #清除編譯產生的檔案
13 clean:
14         make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean 

然後,編譯檔案:

make

再接著,插入模組到核心(insert module):

sudo insmod  hello.ko

然後看看核心編譯輸出的資訊:

dmesg

我的機子上顯示的是:
[ 6848.544940] Hello Kernel!

然後卸載模組(remove module):

sudo rmmod hello.ko

再一次查看核心輸出資訊:

dmesg

我的機子輸出是:

[ 7076.558033] See you,Kernel!

 

這樣,我的第一次模組編程就完成了。希望您能多多提出寶貴的意見,比如說怎麼樣學習核心編程比較好,先謝謝拉。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.