




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
模塊靜態(tài)及動(dòng)態(tài)加載方式電子信息工程專(zhuān)業(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)用程序->附件->終端打開(kāi)終端,在終端命令行輸入以下命令配置裁剪內(nèi)核。$cd$linux-$makemenuconfig.完成配置文件的選擇后,菜單將進(jìn)入到初始界面,接下來(lái)將根據(jù)下面的步驟來(lái)完成對(duì)LED驅(qū)動(dòng)的支持,通過(guò)計(jì)算機(jī)鍵盤(pán)上下鍵選擇DeviceDrivers并按回車(chē),將出現(xiàn)以下菜單:內(nèi)核配置添加對(duì)字符類(lèi)設(shè)備的支持編譯內(nèi)核執(zhí)行以下命令編譯內(nèi)核:$makezImage編譯完成之后將在路徑$linux-/arch/arm/boot下生成zImage
鏡象,
下載到開(kāi)發(fā)板編譯測(cè)試程序Arm-linux-gcc–oled-testled-test.c
生成執(zhí)行程序準(zhǔn)備開(kāi)發(fā)板準(zhǔn)備好EmbedSky2440平臺(tái),注意板上的跳線為閉合狀態(tài),
且確保EmbedSky2440板載Linux
映像為實(shí)驗(yàn)映像(請(qǐng)參照下冊(cè)開(kāi)篇:實(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字符類(lèi)驅(qū)動(dòng)程序的框架Structcdev的定義Struct可能包含以下函數(shù)定義設(shè)備的打開(kāi)與釋放:open(),release()設(shè)備的讀寫(xiě)操作:read(),write()設(shè)備的控制操作:ioctl()*設(shè)備的中斷和輪詢(xún)處理示例:static
structdemo_fops={ owner:
THIS_MODULE, write:
demo_write, read:
demo_read, ioctl: demo_ioctl, open: demo_open, release: demo_release,…};設(shè)備的打開(kāi)與釋放-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è)備的讀寫(xiě)操作: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ù)注銷(xiāo)設(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)
核代碼。用戶(hù)可以根據(jù)自己
系統(tǒng)的需要構(gòu)筑自己的私有內(nèi)核。Linux源碼的公開(kāi)更是為改造其內(nèi)核、
重建有特殊要求的操作系統(tǒng)提供了可能。動(dòng)態(tài)加載的命令I(lǐng)nsmod/modprobe加載模塊Rmmod
卸載模塊Lsmod
顯示模塊Depmod
建立依賴(lài)關(guān)系Insmod命令方式語(yǔ)法:insmod[-fkmpsvxX][-o<模塊名稱(chēng)>][模塊文件][符號(hào)名稱(chēng)=符號(hào)值]補(bǔ)充說(shuō)明:Linux有許多功能是通過(guò)模塊的方式,在需要時(shí)才載入kernel。如此可使kernel較為精簡(jiǎn),進(jìn)而提高效率,以及保有較大的彈性。
這類(lèi)可載入的模塊,通常是設(shè)備驅(qū)動(dòng)程序。示例:Insmod
led.o模塊動(dòng)態(tài)卸載方式和模塊的加載類(lè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)核的其他部分依賴(là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)開(kāi)發(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í)加載該模塊所依賴(lài)的其他模塊。模塊動(dòng)態(tài)加載實(shí)例
查看模塊加載情況,獲取主設(shè)備號(hào)例如:可通過(guò)lsmod命令獲得系統(tǒng)中加載了的所有模塊以及模塊間的依賴(lài)關(guān)系。通過(guò)cat
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 動(dòng)漫介紹課件圖片素材
- 2025年中國(guó)濟(jì)南市智慧燈桿市場(chǎng)全面調(diào)研及行業(yè)投資潛力預(yù)測(cè)報(bào)告
- 2025年中國(guó)生物轉(zhuǎn)盤(pán)行業(yè)市場(chǎng)發(fā)展監(jiān)測(cè)及投資戰(zhàn)略咨詢(xún)報(bào)告
- 2025年服務(wù)機(jī)器人項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告
- 2022-2027年中國(guó)木材行業(yè)市場(chǎng)供需現(xiàn)狀及投資戰(zhàn)略研究報(bào)告
- 市管企業(yè)安全生產(chǎn)監(jiān)督管理暫行辦法
- 網(wǎng)絡(luò)安全等級(jí)保護(hù)工作會(huì)議
- 智能科技項(xiàng)目合作協(xié)議大數(shù)據(jù)處理服務(wù)協(xié)議
- 某年度橡膠、橡塑制品戰(zhàn)略市場(chǎng)規(guī)劃報(bào)告
- 人工智能輔助企業(yè)戰(zhàn)略規(guī)劃協(xié)議
- 爆破三員培訓(xùn)
- 浙江首考2025年1月普通高等學(xué)校招生全國(guó)統(tǒng)一考試 歷史 含答案
- 2025重慶電費(fèi)收費(fèi)標(biāo)準(zhǔn)
- 露天采石場(chǎng)應(yīng)急預(yù)案
- 2025-2030中國(guó)水溶性肥料行業(yè)市場(chǎng)發(fā)展分析及前景趨勢(shì)與投資研究報(bào)告
- 復(fù)雜特征點(diǎn)云的高精度快速配準(zhǔn)技術(shù)
- 2024年1月國(guó)家開(kāi)放大學(xué)漢語(yǔ)言文學(xué)本科《古代詩(shī)歌散文專(zhuān)題》期末紙質(zhì)考試試題及答案
- DBJ50T-098-2019 城市綠化養(yǎng)護(hù)質(zhì)量標(biāo)準(zhǔn)
- 消防接警調(diào)度(一級(jí))理論考試題庫(kù)(含答案)
- 教材教法基礎(chǔ)培訓(xùn)
- DB3301T 0410-2023 城市河道生態(tài)清淤管理規(guī)范
評(píng)論
0/150
提交評(píng)論