《基于Linux的驅(qū)動(dòng)開發(fā)》PDF課件_第1頁(yè)
《基于Linux的驅(qū)動(dòng)開發(fā)》PDF課件_第2頁(yè)
《基于Linux的驅(qū)動(dòng)開發(fā)》PDF課件_第3頁(yè)
《基于Linux的驅(qū)動(dòng)開發(fā)》PDF課件_第4頁(yè)
《基于Linux的驅(qū)動(dòng)開發(fā)》PDF課件_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

《基于Linux的驅(qū)動(dòng)開發(fā)》PDF課件遠(yuǎn)見品質(zhì)

Linux內(nèi)核與C代碼

vLinux內(nèi)核浩大,結(jié)構(gòu)簡(jiǎn)單

?對(duì)Linux2.4內(nèi)核的統(tǒng)計(jì):1萬(wàn)個(gè)文件,4百萬(wàn)行代碼?對(duì)Linux2.6內(nèi)核的統(tǒng)計(jì):1.5萬(wàn)個(gè)文件,6百萬(wàn)行代碼

vLinux內(nèi)核的主體使用GNUC,在ANSIC

上進(jìn)行了擴(kuò)充

?Linux內(nèi)核必需由gcc編譯編譯?gcc和Linux內(nèi)核版本并行進(jìn)展,對(duì)于版本的依靠性強(qiáng)?Linux2.6內(nèi)核建議使用gcc3.3以上版本,C99編程風(fēng)格

v內(nèi)核代碼中使用的一些編程技巧,在通常

的應(yīng)用程序中很少遇到

v學(xué)好Linux、首先要學(xué)好C語(yǔ)言

《基于Linux的驅(qū)動(dòng)開發(fā)》PDF課件

遠(yuǎn)見品質(zhì)

linux2.4的內(nèi)核名目結(jié)構(gòu)

/arch/arch/drivers/drivers/kernel/kernel/lib/lib/boot/boot

/arm/arm

/alpha/alpha

/m68k/m68k/kernel/kernel/lib/mm/lib/mm

/mach-s3c2410/mach-s3c2410

/Documentation/Documentation/ipc/ipc/fs/fsLinux2.4.xLinux2.4.x/include/include/mm/mm/init/init/net/net/scripts/scripts/asm-arm/asm-arm/arch-s3c2410/arch-s3c2410/linux/linux/proc-armv/proc-armv/net/net

《基于Linux的驅(qū)動(dòng)開發(fā)》PDF課件

遠(yuǎn)見品質(zhì)

Linux的驅(qū)動(dòng)程序

vLinux下對(duì)外設(shè)的訪問只能通過驅(qū)動(dòng)程序。uClinux下可以

在應(yīng)用層直接訪問外設(shè),操作寄存器口,但是無(wú)法處理中斷、DMA、搶占、原子操作等——不推舉使用統(tǒng)的驅(qū)動(dòng)程序:?Open、Release、read、write、ioctl…

vLinux對(duì)于驅(qū)動(dòng)程序有統(tǒng)一的接口,以文件的形式定義系

v驅(qū)動(dòng)程序是內(nèi)核的一部分,可以使用中斷、DMA等操作v驅(qū)動(dòng)程序需要在用戶態(tài)和內(nèi)核態(tài)之間傳遞數(shù)據(jù)v對(duì)于簡(jiǎn)單的應(yīng)用可以考慮是用mmap

《基于Linux的驅(qū)動(dòng)開發(fā)》PDF課件

遠(yuǎn)見品質(zhì)

什么是MMU(Memorymanagementunit)

遠(yuǎn)見品質(zhì)

Linux下設(shè)備和模塊的分類

根據(jù)上述系統(tǒng)內(nèi)核的功能,Linux中把系統(tǒng)的設(shè)備定義成如下三類:v字符設(shè)備v塊設(shè)備v網(wǎng)絡(luò)設(shè)備

遠(yuǎn)見品質(zhì)

Linux下的設(shè)備

vLinux的設(shè)備以文件的形式存在于/dev名目下v設(shè)備文件是特別文件,使用ls/dev-l命令可以看到:crw-------1rootroot10,7Aug312024amigamouse1crw-------1rootroot10,134Aug312024apm_biosbrw-rw----1rootdisk29,0Aug312024aztcd

遠(yuǎn)見品質(zhì)

主設(shè)備號(hào)和次設(shè)備號(hào)

v主設(shè)備號(hào)標(biāo)識(shí)設(shè)備對(duì)應(yīng)的驅(qū)動(dòng)程序v一個(gè)驅(qū)動(dòng)程序可以掌握若干個(gè)設(shè)備,次設(shè)備號(hào)供應(yīng)了一種區(qū)分

它們的方法v系統(tǒng)增加一個(gè)驅(qū)動(dòng)程序就要給予它一個(gè)主設(shè)備號(hào)。這一賦值過程在驅(qū)動(dòng)程序的初始化過程中

intregister_chrdev(unsignedintmajor,constchar*name,structfile_operations*fops);

遠(yuǎn)見品質(zhì)

使用devfs

v在Linux2.4的內(nèi)核里引入了devfs來(lái)

解決linux下設(shè)備文件管理的問題v在驅(qū)動(dòng)程序中通過devfs_register()函數(shù)創(chuàng)建設(shè)備文件系統(tǒng)的節(jié)點(diǎn)v系統(tǒng)啟動(dòng)的時(shí)候mount設(shè)備文件系統(tǒng)

v全部需要的設(shè)備節(jié)點(diǎn)都由內(nèi)核自動(dòng)

管理。/dev名目下只有掛載的設(shè)備

遠(yuǎn)見品質(zhì)

Linux2.6內(nèi)核與devfs

vLinux2.6內(nèi)核引入了sysfs文件系統(tǒng)為每個(gè)系統(tǒng)

的硬件樹進(jìn)行分級(jí)處理

vDevfs在Linux2.6中被標(biāo)記為舍棄的特性(在

Linux2.6.15及以后的版本則取消了對(duì)它的支持),而使用udev。

?維護(hù)動(dòng)態(tài)設(shè)備?從sysfs獲得的信息,可以供應(yīng)對(duì)特定設(shè)備的固定設(shè)備名。對(duì)于熱插拔的設(shè)備,這尤其重要?udev是在用戶空間的腳本文件,這很簡(jiǎn)單被編輯和修改?可以代替hotplug腳本

v為了保證舊應(yīng)用程序的兼容性,在嵌入式系統(tǒng)

中,是用devfs還是一個(gè)好方法。即使在Linux2.6.15內(nèi)核以后,也可以通過ndevfs(nanodevfs)補(bǔ)丁供應(yīng)對(duì)devfs特性的兼容。

遠(yuǎn)見品質(zhì)

在Linux2.6內(nèi)核中使用udev

v建議,在2.6.15以后的版本中使用udevv使用ramfs作為udev的載體

?mount–tramfsnone/dev

vudev使用的規(guī)章集位于/etc/udev/*vudev的官方地址:

http://./pub/linux/utils/kernel/hotplug/udev.html

v參考文章:Writingudevrules

遠(yuǎn)見品質(zhì)

設(shè)備驅(qū)動(dòng)程序的使用與測(cè)試方法

v應(yīng)用層使用open、close、read、

write系統(tǒng)調(diào)用——需要編寫應(yīng)用程序

v使用系統(tǒng)命令可以進(jìn)行最基本的測(cè)

試:

?cat/dev/urandom?echo/dev/urandom>/dev/fb0?ddif=/dev/touchscreenof=/var/tmp/testbs=16count=100

遠(yuǎn)見品質(zhì)

一個(gè)簡(jiǎn)潔的Linux驅(qū)動(dòng)程序原理

遠(yuǎn)見品質(zhì)

Linux驅(qū)動(dòng)程序加載方式

v驅(qū)動(dòng)程序直接編譯入內(nèi)核

?驅(qū)動(dòng)程序在內(nèi)核啟動(dòng)時(shí)就已經(jīng)在內(nèi)存中?可以保留專用存儲(chǔ)器空間

v驅(qū)動(dòng)程序以模塊形式存儲(chǔ)在文件系

統(tǒng)里,需要時(shí)動(dòng)態(tài)載入內(nèi)核

?驅(qū)動(dòng)程序按需加載,不用季節(jié)省內(nèi)存?驅(qū)動(dòng)程序相對(duì)獨(dú)立于內(nèi)核,升級(jí)敏捷

遠(yuǎn)見品質(zhì)

Linux驅(qū)動(dòng)程序模塊加載

遠(yuǎn)見品質(zhì)

嵌入式Linux下常見的文件系統(tǒng)

vRomFS:只讀文件系統(tǒng),可以放在ROM空間,也可以在系統(tǒng)的vvvvv

RAM中,嵌入式linux中常用來(lái)作根文件系統(tǒng)RamFS:利用VFS自身結(jié)構(gòu)而形成的內(nèi)存文件系統(tǒng),使用系統(tǒng)的RAM空間JFFS/JFFS2:為Flash設(shè)計(jì)的日志文件系統(tǒng)Yaffs:特地為NandFlash設(shè)計(jì)proc:為內(nèi)核和內(nèi)核模塊將信息發(fā)送給進(jìn)程供應(yīng)一種機(jī)制,可以查看系統(tǒng)模塊裝載的信息devFS:設(shè)備文件系統(tǒng)

遠(yuǎn)見品質(zhì)

v

Linux上的Ext2fs

支持4TB存儲(chǔ)、文件名稱最長(zhǎng)1012字符v可選擇規(guī)律塊v快速符號(hào)鏈接

vvv

vv

Ext2不適合flash設(shè)備是為象IDE設(shè)備那樣的塊設(shè)備設(shè)計(jì)的,規(guī)律塊大小必需是512byte、1KB、2KB等沒有供應(yīng)對(duì)基于扇區(qū)的擦除/寫操作的良好管理?假如在一個(gè)扇區(qū)中擦除單個(gè)字節(jié),必需將整個(gè)扇區(qū)復(fù)制到RAM,然后擦除,再重寫入在消失電源故障時(shí),Ext2fs是不能防止崩潰的文件系統(tǒng)不支持損耗平衡,縮短了flash的壽命

遠(yuǎn)見品質(zhì)

jffs/jffs2文件系統(tǒng)的優(yōu)缺點(diǎn)

v日志文件系統(tǒng)v供應(yīng)了更好的崩潰、掉電平安愛護(hù)vjffs2支持對(duì)flash的勻稱磨損v在扇區(qū)級(jí)別上執(zhí)行閃存擦除/寫/

讀操作要比Ext2文件系統(tǒng)好

v文件系統(tǒng)接近滿時(shí),JFFS2會(huì)大大

放慢運(yùn)行速度——垃圾收集

遠(yuǎn)見品質(zhì)

Nand上yaffs文件系統(tǒng)的優(yōu)勢(shì)

v特地為Nandf

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論