培訓課件-linux內(nèi)核模塊開發(fā)_第1頁
培訓課件-linux內(nèi)核模塊開發(fā)_第2頁
培訓課件-linux內(nèi)核模塊開發(fā)_第3頁
培訓課件-linux內(nèi)核模塊開發(fā)_第4頁
培訓課件-linux內(nèi)核模塊開發(fā)_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

:本課件及其印刷物、的

國嵌

所有,并保留所力:任何單,不得使用該課件及其印刷物、

從事商業(yè)、教學活國嵌的,應在范圍內(nèi)使用,并注明“來源:國嵌”。

上述

者,

其位或個人動。已經(jīng)取得。LINUX內(nèi)核模塊開發(fā)(V2014)課程索引Linux技術(shù)咨詢Linux學習號1.

內(nèi)核模塊Linux內(nèi)核的整體結(jié)構(gòu)非常龐大,其包含的組件也非常多,如何使用這些組件呢,

方法1:把所有的組件都編譯進內(nèi)核文件,即:zImage或bzImage,但這樣會導致一個問題:內(nèi)核文件過大

占用內(nèi)存過多有沒有一種機制能讓內(nèi)核文件本身并不包含某組件,而是在該組件需要被使用的時候,動態(tài)地添加到正在運行的內(nèi)核中呢?Linux技術(shù)咨詢Linux學習號1.

內(nèi)核模塊內(nèi)核模塊具有如下特點模塊本身并不被編譯進內(nèi)核文件(zImage或者bzImage)可以根據(jù)需求,在內(nèi)核運行期間動態(tài)的安裝或卸載。Linux技術(shù)咨詢Linux學習號2.內(nèi)核模塊設(shè)計Linux技術(shù)咨詢Linux學習號2.學習方法范例分析思維導圖設(shè)計自己動手編寫程序Linux技術(shù)咨詢Linux學習號2.1范例-oworld

#include

<linux/init.h>#include

<linux/module.h>static

int

o_init(void){printk(KERN_WARNING"return

0;o,

world

!\n");}static

void

o_exit(void){}printk(KERN_INFO

"Goodbye,world\n");module_init(module_exit(o_init);o_exit);Linux技術(shù)咨詢Linux學習號2.1手把手帶你來操作

分析內(nèi)核模塊設(shè)計思維導圖Linux技術(shù)咨詢Linux學習號2.1手把你寫代碼

利用思維導圖編寫內(nèi)核模塊Linux技術(shù)咨詢Linux學習號2.2手把手帶你來操作

使用makefile編譯內(nèi)核模塊Linux技術(shù)咨詢Linux學習號2.3

安裝與卸載安裝

insmodo.ko例:insmod卸載

rmmod例:rmmod

o查看

lsmodLinux技術(shù)咨詢Linux學習號2.4

模塊可選信息

Linux技術(shù)咨詢Linux學習號2.4.1

模塊申明1、MODULE_LICENSE(”遵守的協(xié)議”)申明該模塊遵守的

證協(xié)議,如:“GPL“、”GPL

v2“等2、MODULE_AUTHOR(“作者”)申明模塊的作者3、MODULE_DESCRIPTION(“模塊的功能描述")申明模塊的功能4、MODULE_VERSION("V1.0")申明模塊的版本Linux技術(shù)咨詢Linux學習號2.4.1

手把你寫代碼

添加內(nèi)核模塊申明Linux技術(shù)咨詢Linux學習號2.4.2

模塊參數(shù)

在應用程序中int

main(int

argc,

char**

argv)argc表示命令行輸入的參數(shù)個數(shù),argv中保存輸入的參數(shù)那么內(nèi)核模塊中可以通過命令行輸入?yún)?shù)么?答案:可以參數(shù)怎么傳入,傳入后保存在哪里?Linux技術(shù)咨詢Linux學習號2.4.2

模塊參數(shù)

通過宏module_param指定保存模塊參數(shù)的變量。模塊參數(shù)用于在加載模塊時傳遞參數(shù)給模塊。module_param(name,type,perm)name:變量的名稱type

變量類型

boo

布爾型

int

整型

charp

字符串型perm是例:int

a

=

3;char

*st;權(quán)限。S_IRUGO:讀權(quán)限S_IWUSR:寫權(quán)限module_param(a,int,

S_IRUGO);modu

am(st,charp,

S_

UG

;Linux技術(shù)咨詢Linux學習號2.4.2

手把你寫代碼

使用模塊參數(shù)Linux技術(shù)咨詢Linux學習號內(nèi)核符號?為什么要導出模塊中的內(nèi)核符號?2.4.2

符號導出

Linux技術(shù)咨詢Linux學習號內(nèi)核符號的導出使用宏EXPORT_SYMBOL(符號名)EXPORT_SYMBOL_GPL(符號名)2.4.2

符號導出

說明:其中EXPORT_SYMBOL_GPL只能用于包含GPL證的模塊。Linux技術(shù)咨詢Linux學習號2.4.3

手把你寫代碼

導出內(nèi)核符號Linux技術(shù)咨詢Linux學習號總結(jié)--對比應用對比應用程序,內(nèi)核模塊具有以下不同:應用程序是從頭(main)到尾執(zhí)行任務,執(zhí)行結(jié)束后從內(nèi)存中內(nèi)核模塊的初始化函數(shù)結(jié)束時,模塊仍然存在于內(nèi)核中,直到卸載函數(shù)被調(diào)用,模塊才從內(nèi)核中。Linux技術(shù)咨詢Linux學習號3.內(nèi)核打印printk是內(nèi)核中出現(xiàn)最頻繁的函數(shù)之一,通過將printk與printf對比,將有助于理解。相同點:打印信息不同點:printk在內(nèi)核中使用,printf在應用程序中使用printk允許根據(jù)嚴重程度,通過附加不同的“優(yōu)先級”來對消息分類。Linux技術(shù)咨詢Linux學習號在<linux/kernel.h>中定義了8種記錄級別。按照優(yōu)先級遞減的順序分別是:KERN_EMERG用于緊急消息,常常是那些KERN_ALERT需要立刻行動的消息。KERN_CRIT嚴重情況。KERN_ERR錯誤情況?!?lt;0>”前的消息。“<1>”3.內(nèi)核打印“<2>”“<3>”Linux技術(shù)咨詢Linux學習號KERN_WARNING

“<4>”有問題的警告KERN_NOTICE正常情況,但是仍然值得注意KERN_INFO信息型消息KERN_DEBUG用作調(diào)試消息“<5>”“<6>”“<7>”3.內(nèi)核打印Linux技術(shù)咨詢Linux學習號沒有指定優(yōu)先級的printk默認使用DEFAULT_MESSAGE_LOGLEVEL優(yōu)先級,它是一個在kernel/printk

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論