電子信息工程模塊加卸載管理課件_第1頁(yè)
電子信息工程模塊加卸載管理課件_第2頁(yè)
電子信息工程模塊加卸載管理課件_第3頁(yè)
電子信息工程模塊加卸載管理課件_第4頁(yè)
電子信息工程模塊加卸載管理課件_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

模塊靜態(tài)及動(dòng)態(tài)加載方式電子信息工程專業(yè)主要內(nèi)容模塊靜態(tài)加載

靜態(tài)加載的定義

靜態(tài)加載的實(shí)例模塊動(dòng)態(tài)加載

動(dòng)態(tài)加載的定義

動(dòng)態(tài)加載的優(yōu)點(diǎn)

動(dòng)態(tài)加載的實(shí)例模塊靜態(tài)加載驅(qū)動(dòng)的靜態(tài)加載指的是直接把驅(qū)動(dòng)程序編譯進(jìn)內(nèi)核,在系統(tǒng)啟動(dòng)后可直接調(diào)用,不需要任何加載卸載命令。修改內(nèi)核目錄下的configure文件添加LED選項(xiàng)修改$linux-/drivers/char目錄下的Kconfig文件,在圖中黑底位置加入如下內(nèi)容修改并保存:修改內(nèi)核目錄下的makefile文件添加編譯LED目標(biāo)文件

修改$linux-/drivers/char目錄下的Makefile文檔,在文件的適當(dāng)位置按照如下內(nèi)容修改并保存:進(jìn)行內(nèi)核配置加入LED模塊的支持單擊菜單應(yīng)用程序->附件->終端打開終端,在終端命令行輸入以下命令配置裁剪內(nèi)核。$cd$linux-$makemenuconfig.完成配置文件的選擇后,菜單將進(jìn)入到初始界面,接下來(lái)將根據(jù)下面的步驟來(lái)完成對(duì)LED驅(qū)動(dòng)的支持,通過(guò)計(jì)算機(jī)鍵盤上下鍵選擇DeviceDrivers并按回車,將出現(xiàn)以下菜單:內(nèi)核配置添加對(duì)字符類設(shè)備的支持編譯內(nèi)核執(zhí)行以下命令編譯內(nèi)核:$makezImage編譯完成之后將在路徑$linux-/arch/arm/boot下生成zImage

鏡象,

下載到開發(fā)板編譯測(cè)試程序Arm-linux-gcc–oled-testled-test.c

生成執(zhí)行程序準(zhǔn)備開發(fā)板準(zhǔn)備好EmbedSky2440平臺(tái),注意板上的跳線為閉合狀態(tài),

且確保EmbedSky2440板載Linux

映像為實(shí)驗(yàn)映像(請(qǐng)參照下冊(cè)開篇:實(shí)驗(yàn)環(huán)境構(gòu)建),連接好交叉串口線于板載COM2和PC端串口,

連接好交叉網(wǎng)線與板載主板網(wǎng)卡接口和PC

端網(wǎng)口。運(yùn)行測(cè)試程序11.啟動(dòng)完成后,在minicom下執(zhí)行以下命令將led_test

下載到tmp目錄下12.給led_test

添加可執(zhí)行權(quán)限。#chmod777led_test13.運(yùn)行l(wèi)ed_test。#./led_test字符類驅(qū)動(dòng)程序的框架Structcdev的定義Struct可能包含以下函數(shù)定義設(shè)備的打開與釋放:open(),release()設(shè)備的讀寫操作:read(),write()設(shè)備的控制操作:ioctl()*設(shè)備的中斷和輪詢處理示例:static

structdemo_fops={ owner:

THIS_MODULE, write:

demo_write, read:

demo_read, ioctl: demo_ioctl, open: demo_open, release: demo_release,…};設(shè)備的打開與釋放-open(),release()經(jīng)常為print語(yǔ)句static

int

demo_open(structinode

*inode,structfile*file) { MOD_INC_USE_COUNT; sprintf(drv_buf,"deviceopensucess!\n"); printk("deviceopensucess!\n");

return0;}設(shè)備的讀寫操作:read(),write()主要是調(diào)用copy_to_user()和copy_from_user()完成;示例:staticssize_tdemo_read(structfile*filp,char*buffer,size_tcount,loff_t*ppos){

if(count>MAX_BUF_LEN) count=MAX_BUF_LEN;

//yourcodehere,readdataintodrv_buffromdevice, copy_to_user(buffer,drv_buf,count); printk("userreaddatafromdriver\n");

returncount;}設(shè)備的控制操作:ioctl()利用switch語(yǔ)句實(shí)現(xiàn)對(duì)設(shè)備的控制staticintleds_ioctl(structinode*inode,structfile*file,unsignedintcmd,

unsignedlongarg)

{

switch(cmd)

{

case0:

case1:

if(arg>4)

{

return-EINVAL;

}

write_gpio_bit(led_table[arg],!cmd);

default:

return-EINVAL;

}

模塊加載函數(shù)init()函數(shù)獲取設(shè)備號(hào)注冊(cè)設(shè)備register

函數(shù)分配內(nèi)存空間alloc

函數(shù)示例:staticint__init

dev_init(void){intret;inti;for(i=0;i<4;i++){s3c2410_gpio_cfgpin(gpio_table[i],gpio_cfg_table[i]);s3c2410_gpio_setpin(gpio_table[i],0);}ret=misc_register(&misc);printk(DEVICE_NAME"initialized\n");returnret;}模塊卸載函數(shù)exit()函數(shù)注銷設(shè)備示例staticvoid__exitdev_exit(void){misc_deregister(&misc);}動(dòng)態(tài)加載優(yōu)點(diǎn)

可以讓內(nèi)核保持很小的尺寸并非常靈活。模塊機(jī)制可以無(wú)需

重構(gòu)內(nèi)核并頻繁重新啟動(dòng)來(lái)嘗試運(yùn)行新內(nèi)

核代碼。用戶可以根據(jù)自己

系統(tǒng)的需要構(gòu)筑自己的私有內(nèi)核。Linux源碼的公開更是為改造其內(nèi)核、

重建有特殊要求的操作系統(tǒng)提供了可能。動(dòng)態(tài)加載的命令I(lǐng)nsmod/modprobe加載模塊Rmmod

卸載模塊Lsmod

顯示模塊Depmod

建立依賴關(guān)系Insmod命令方式語(yǔ)法:insmod[-fkmpsvxX][-o<模塊名稱>][模塊文件][符號(hào)名稱=符號(hào)值]補(bǔ)充說(shuō)明:Linux有許多功能是通過(guò)模塊的方式,在需要時(shí)才載入kernel。如此可使kernel較為精簡(jiǎn),進(jìn)而提高效率,以及保有較大的彈性。

這類可載入的模塊,通常是設(shè)備驅(qū)動(dòng)程序。示例:Insmod

led.o模塊動(dòng)態(tài)卸載方式和模塊的加載類似,可利用

rmmod

命令手工卸載模塊,當(dāng)對(duì)需求加載的模塊則由

kerneld

在不再需要時(shí)自動(dòng)卸載。每次

kerneld

的空閑定時(shí)器到期時(shí),它會(huì)利用系統(tǒng)調(diào)用將當(dāng)前不再使用的需求加載模塊從內(nèi)核中移走。啟動(dòng)

kerneld

時(shí)指定該定時(shí)器的時(shí)間,通常的時(shí)間為180秒。如果內(nèi)核的其他部分依賴于裝入的模塊時(shí),該模塊不能卸載。例如,如果掛裝了FAT文件系統(tǒng),則不能卸載已裝入的FAT文件系統(tǒng)模塊。lsmod命令的輸出會(huì)顯示已安裝模塊的使用計(jì)數(shù),例如:Module: #pages: Usedby:

msdos 5 1

vfat

4 1(autoclean)

fat

6 2(autoclean)模塊動(dòng)態(tài)加載的步驟編譯生成模塊文件(*.ko)利用命令

加載進(jìn)內(nèi)核查看加載

情況及獲取主設(shè)備號(hào)節(jié)點(diǎn)掛

載運(yùn)行測(cè)

試程序模塊動(dòng)態(tài)加載實(shí)例說(shuō)明:myled.c、myled.h、Make文件放在/home/cj/myled文件夾下;內(nèi)核代碼在/home/cj/linux-文件夾下;系統(tǒng)通過(guò)tftp進(jìn)行啟動(dòng),系統(tǒng)的文件系統(tǒng)在/opt/下面通過(guò)nfs進(jìn)行掛載。模塊動(dòng)態(tài)加載實(shí)例利用交叉編譯器將設(shè)備驅(qū)動(dòng)源碼編譯生成模塊文件例如:在/home/cj/myled文件夾下進(jìn)行make得myled.

ko文件模塊動(dòng)態(tài)加載實(shí)例

將模塊加載進(jìn)開發(fā)板內(nèi)核中例如:在myled文件夾下,通過(guò)insmod./myled.ko命令加載內(nèi)核目標(biāo)文件不用時(shí)通過(guò)rmmod./meyled命令可以卸載它。此

外,也可以通過(guò)modprobe./myled命令加載,通過(guò)modprobe–r./myled進(jìn)行卸載。

其中modprobe命令比insmod命令要強(qiáng)大,

它在加載某模塊時(shí)會(huì)同時(shí)加載該模塊所依賴的其他模塊。模塊動(dòng)態(tài)加載實(shí)例

查看模塊加載情況,獲取主設(shè)備號(hào)例如:可通過(guò)lsmod命令獲得系統(tǒng)中加載了的所有模塊以及模塊間的依賴關(guān)系。通過(guò)cat

溫馨提示

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

評(píng)論

0/150

提交評(píng)論