當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]Linux內(nèi)核是整體性結(jié)構(gòu),各個(gè)子系統(tǒng)緊密聯(lián)系,上接用戶控件,下接硬件,作為一個(gè)大程序在內(nèi)核控件運(yùn)行。

如果將所有的設(shè)備驅(qū)動(dòng)和內(nèi)核功能都集成在內(nèi)核中,則內(nèi)核會(huì)不斷的龐大,對(duì)我們的內(nèi)核裁剪也會(huì)帶來更大的挑戰(zhàn),為了解決這個(gè)問題,Linux內(nèi)核引入內(nèi)核模塊機(jī)制,通過動(dòng)態(tài)加載內(nèi)核模塊,從而實(shí)現(xiàn)在運(yùn)行過程中擴(kuò)展內(nèi)核的功能。

內(nèi)核模塊是什么?

1 內(nèi)核模塊是一種沒有經(jīng)過鏈接,不能獨(dú)立運(yùn)行的目標(biāo)文件,是在內(nèi)核空間中運(yùn)行的程序。經(jīng)過鏈接裝載到內(nèi)核里面成為內(nèi)核的一部分,可以訪問內(nèi)核的公用符號(hào)(函數(shù)和變量)。

2 內(nèi)核模塊可以讓操作系統(tǒng)內(nèi)核在需要時(shí)載入和執(zhí)行,在不需要時(shí)由操作系統(tǒng)卸載。它們擴(kuò)展了操作系統(tǒng)內(nèi)核的功能卻不需要重新啟動(dòng)系統(tǒng)。

3 如果沒有內(nèi)核模塊,我們不得不一次又一次重新編譯生成單內(nèi)核操作系統(tǒng)的內(nèi)核鏡像來加入新的功能。這還意味著一個(gè)臃腫的內(nèi)核。

模塊機(jī)制的優(yōu)點(diǎn):

1 減小內(nèi)核映像尺寸,增加系統(tǒng)靈活性;

2 節(jié)省開發(fā)時(shí)間;修改內(nèi)核,不必重新編譯整個(gè)內(nèi)核。

3 模塊的目標(biāo)代碼一旦被鏈入內(nèi)核,作用和靜態(tài)鏈接的內(nèi)核目標(biāo)代碼完全等價(jià)。

模塊機(jī)制的缺點(diǎn):

1 對(duì)系統(tǒng)性能有一定損失;

2 使用不當(dāng)時(shí)會(huì)導(dǎo)致系統(tǒng)崩潰;

接下來通過介紹一下內(nèi)核模塊的實(shí)現(xiàn):

首先先附上模塊的代碼(hello_world.c)

1 #include

2 #include

3 #include

4

5 static int hello_init(void)

6 {

7 printk("hello world module! ");

8 return 0;

9 }

10

11 static void hello_exit(void)

12 {

13 printk("good bye module! ");

14 }

15

16 module_init(hello_init);

17 module_exit(hello_exit);

18

19 MODULE_LICENSE("GPL");

內(nèi)核模塊至少包含兩個(gè)函數(shù):

入口函數(shù)->初始化函數(shù)(xxx_init()):模塊加載時(shí),被調(diào)用

出口函數(shù)->卸載函數(shù)(xxx_exit()):模塊卸載時(shí),被調(diào)用

模塊的入口函數(shù)名和出口函數(shù)名可以任意命名,通過宏module_init()申明入口函數(shù),通過宏module_exit()申明出口函數(shù)。模塊需要包含頭文件:#include

內(nèi)核模塊證書:2.4內(nèi)核后,引入識(shí)別代碼是否在GPL許可下發(fā)布的機(jī)制 。在使用非公開的源代碼產(chǎn)品時(shí)會(huì)得到警告。通過宏MODULE_LICENSE(“GPL”),設(shè)置模塊遵守GPL證書,取消警告信息。

內(nèi)核模塊的構(gòu)建:

管理模塊源碼方法: ① 模塊源碼加入到內(nèi)核源碼樹中。② 模塊源碼飯仔內(nèi)核源碼樹之外。

注:本文介紹的是放在內(nèi)核源碼樹外編譯。

接下來是Makefile的實(shí)現(xiàn):

首先附上Makefile的源碼

1 KERNEL_DIR = /home/FAN/linux-kernel

2

3 all:

4 make -C $(KERNEL_DIR) M=`pwd` modules

5 clean:

6 make -C $(KERNEL_DIR) M=`pwd` modules clean

7 rm -rf modules.order Module.symvers

8

9 obj-m += hello_world.o

其中:

1、KERNEL_DIR:參數(shù),賦值內(nèi)核的位置,例如我的內(nèi)核源碼的路徑:/home/fan/linux-kernrl

2、當(dāng)終端執(zhí)行make時(shí),會(huì)運(yùn)行make -C $(KERNEL_DIR) M=`pwd` modules,其中M=`pwd`指向是模塊所在的路徑。

3、當(dāng)終端執(zhí)行make clean時(shí),會(huì)運(yùn)行下面兩條命令,將編譯生成的文件刪除

make -C $(KERNEL_DIR) M=`pwd` modules clean

rm -rf modules.order Module.symvers

4、obj-m += hello_world.o:其中 –m 表示將hello_world.c編譯成模塊

–y 表示將hello_world.c編譯進(jìn)內(nèi)核鏡像中

編譯生成文件:

在終端運(yùn)行make,則會(huì)生成hello_world.ko文件.

 

 

將hello_world.ko發(fā)送到板子上,然后在板子上運(yùn)行insmod hello_world.ko, 會(huì)調(diào)用hello_init()函數(shù)運(yùn)行rmmod hello_world.ko,會(huì)調(diào)用hello_exit()函數(shù)

下圖為運(yùn)行結(jié)果:

 

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉