資源描述:
《嵌入式接口技術(shù)與linux驅(qū)動開發(fā)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、1.為什么要選擇LINUX:(1)面向服務(wù),網(wǎng)絡(luò)功能強大(2)源碼開放,可移植性強(3)有大公司的支持,Intel,IBM,ARM(4)一個全新的世界(5)學(xué)術(shù)研究必不可少的平臺(源碼、算法、對比實驗……)2.LINUX的驅(qū)動程序:(1)LINUX下對外設(shè)的訪問只能通過驅(qū)動程序,uClinux下可以在應(yīng)用層直接訪問外設(shè),操作寄存器,但是無法處理中斷,DMA,搶占,原子操作等(2)LIUNX對于驅(qū)動程序有統(tǒng)一的接口,以文件的形式定義系統(tǒng)的驅(qū)動程序Open,release,read,write,ioctl…(3)驅(qū)動程序是內(nèi)核的一部分,可以使用中斷,DMA等操作注:uC
2、linux是linux2.0核心的分支,是針對沒有MMU管理單元的微控制器,uClinux不是實時操作系統(tǒng)(4)驅(qū)動程序需要在用戶態(tài)和內(nèi)核態(tài)之間傳遞數(shù)據(jù)(5)對于復(fù)雜的應(yīng)用可以考慮是用mmap3.在驅(qū)動程序中通過devfs_register()函數(shù)創(chuàng)建設(shè)備文件系統(tǒng)的特點;系統(tǒng)啟動的時候mount設(shè)備文件系統(tǒng);所有需要的設(shè)備節(jié)點都由內(nèi)核自動管理,/dev目錄下只有掛載的設(shè)備。4.設(shè)備驅(qū)動程序的作用:(1)設(shè)備驅(qū)動程序?qū)?fù)雜的硬件抽象成一個結(jié)構(gòu)良好的設(shè)備,并通過提供統(tǒng)一的程序接口為其它部分提供使用設(shè)備的能力和方法。(2)設(shè)備驅(qū)動程序(應(yīng)該只是)為系統(tǒng)的其它部分提供各種使
3、用設(shè)備的能力,使用設(shè)備的方法應(yīng)該由應(yīng)用程序決定。5.設(shè)備驅(qū)動程序是內(nèi)核代碼的一部分;驅(qū)動程序的地址空間是內(nèi)核的地址空間,應(yīng)用程序通過操作系統(tǒng)的系統(tǒng)調(diào)用執(zhí)行相應(yīng)的驅(qū)動程序函數(shù),中斷則直接執(zhí)行相應(yīng)的中斷程序代碼。6.linux內(nèi)核加載過程:通常,linux內(nèi)核是經(jīng)過gzip壓縮之后的映像文件(1)bootloader復(fù)制壓縮內(nèi)核到內(nèi)存空間(2)內(nèi)核自解壓(3)運行文件7.編譯完成的linux內(nèi)核在哪里:(1)./vmlinux,elf格式未壓縮(2)arch/arm/boot/compressed/vmlinux,壓縮以后的elf內(nèi)核8.在ARM體系結(jié)構(gòu)下,用戶態(tài)對應(yīng)了
4、ARM的USR模式,內(nèi)核態(tài)對應(yīng)了SVC模式、多數(shù)操作系統(tǒng)都把內(nèi)核和運行在其上的應(yīng)用程序分為兩個層次管理:“內(nèi)核態(tài)”和“用戶態(tài)”9.GCC是linux下的編譯器:(1)可以編譯內(nèi)核,應(yīng)用程序,bootloader&其它OS(2)ASNIC,GUNC,C99最初linux是一種只可以運行在PC機上免費的UNIX操作系統(tǒng),如今linux已發(fā)展成為一種強大的操作系統(tǒng)10.我們可以使用crosstool,它是一個專門建立編譯工具鏈的腳本,可以在很大程序上簡化我們的工作。11.構(gòu)建toolchains必須的組件:Linux內(nèi)核源碼;gcc;glibc;glibc_linuxth
5、readsPOSIX線程序庫;binutils。Binutils中的常用工具:Addr2line把程序地址轉(zhuǎn)換為文件名和行號;As主要用來編譯gcc輸出的匯編文件,產(chǎn)生的目標文件由連接器ld連接;Ld連接器,它把一些目標和歸檔文件結(jié)合在一起,重定位數(shù)據(jù),并鏈接符號引用;Objcopy把一種目標文件中的內(nèi)容復(fù)制到另一種類型的目標文件中;Objdump顯示一個或者更多目標文件的信息;Readelf顯示elf格式可執(zhí)行文件的信息;Strip丟棄目標文件中的全部或者特定符號。12.linux內(nèi)核被設(shè)計為必須使用GNU的C編譯器gcc來編譯,而不是任何一種C編譯器都可以使用。
6、13.linux內(nèi)核主體使用GUNC。linux內(nèi)核源碼龐大,結(jié)構(gòu)復(fù)雜:(1)對linux2.4內(nèi)核的統(tǒng)計:1萬個文件,6百萬行代碼(2)對linux2.6內(nèi)核的統(tǒng)計:1.5萬個文件,6百萬行代碼內(nèi)核編程習(xí)慣(技巧)不同于應(yīng)用程序。14.每一個進程(或應(yīng)用程序)都通過MMU建立獨立尋址空間——用戶空間。一個進程是不可以隨便修改(或者訪問)另一個進程中的數(shù)據(jù)和代碼的。進程之間要想運行數(shù)據(jù)交互,要么經(jīng)過內(nèi)核傳遞,要么通過內(nèi)核映射共享內(nèi)存。15.linux的設(shè)備文件以文件的形式存在/dev目錄設(shè)備文件是特殊文件,使用LS/dev-1命令可以看到。主設(shè)備號標識設(shè)備對應(yīng)的驅(qū)動
7、程序,一個驅(qū)動程序可以控制若干個設(shè)備,次設(shè)備號提供了一種區(qū)分它們的方法,系統(tǒng)增加一個驅(qū)動程序就要賦予它一個主設(shè)備號,這一賦值過程在驅(qū)動程序的初始化過程中。16.設(shè)備已經(jīng)注冊到內(nèi)核表中,對于設(shè)備的訪問通過設(shè)備文件(設(shè)備文件與設(shè)備驅(qū)動程序的主設(shè)備號匹配),內(nèi)核會調(diào)用驅(qū)動程序中的正確函數(shù)。17.給程序一個它們可以請求設(shè)備驅(qū)動程序的名字,這個名字必須插入到目錄/dev中,并與驅(qū)動程序的主設(shè)備號和次設(shè)備號相連。18.動態(tài)分配的主設(shè)備號不能保證總是一樣的無法事先創(chuàng)建設(shè)備節(jié)點;可以讀取/proc/devices讀取cat/proc/devices;利用腳本動態(tài)創(chuàng)建設(shè)備文件節(jié)點