版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 第12章 嵌入式Linux軟件設(shè)計(jì) 共五十七頁(yè)12.1 移植(yzh)的基本概念廣義上講移植包括軟件移植和硬件移植。從狹義上講,移植就是指軟件移植,即將一個(gè)軟件從一個(gè)平臺(tái)遷移到另一個(gè)與其不同的平臺(tái)上工作。通常情況(qngkung)下,移植分為以下3種情況(qngkung)。1、從一個(gè)硬件平臺(tái)移植到另一個(gè)硬件平臺(tái)2、從一個(gè)操作系統(tǒng)移植到另一個(gè)操作系統(tǒng)3、從一種軟件庫(kù)環(huán)境移植到另一種軟件庫(kù)環(huán)境 共五十七頁(yè)12.2 Bootloader的移植(yzh) Bootloader是操作系統(tǒng)和硬件的紐帶。它負(fù)責(zé)初始化硬件,引導(dǎo)操作系統(tǒng)內(nèi)核,檢測(cè)各種參數(shù)給操作系統(tǒng)內(nèi)核使用。一個(gè)功能完備的大型Bootload
2、er,就相當(dāng)于一個(gè)小型的操作系統(tǒng)。在嵌入式領(lǐng)域中,操作系統(tǒng)移植的關(guān)鍵在于Bootloader的移植以及操作系統(tǒng)內(nèi)核與硬件相關(guān)(xinggun)部分的移植。 共五十七頁(yè)12.2.1 關(guān)鍵文件(wnjin)的修改1. vivi頂層Makefile文件的修改vivi作為L(zhǎng)inux系統(tǒng)的啟動(dòng)代碼,在編譯配置時(shí)需要(xyo)用到函數(shù)庫(kù)包括交叉編譯器庫(kù)和頭文件,交叉編譯開(kāi)關(guān)選項(xiàng)設(shè)置,還包括Linux內(nèi)核代碼中的庫(kù)和頭文件通常需要修改vivi工程管理文件Makefile。共五十七頁(yè)2.vivi中與硬件相關(guān)的初始化與具體運(yùn)行在哪一個(gè)處理器平臺(tái)(pngti)上相關(guān)的文件都存放在vivi/arch/目錄下系統(tǒng)使用
3、S3C2410 x處理器,對(duì)應(yīng)的目錄為s3c2410其中head.s文件是vivi啟動(dòng)配置代碼,加電復(fù)位運(yùn)行的代碼就是從這里開(kāi)始的。 共五十七頁(yè)3.對(duì)不同F(xiàn)lash啟動(dòng)的修改vivi能從Nor Flash或Nand Flash啟動(dòng)啟動(dòng)程序、Linux內(nèi)核及根文件系統(tǒng),甚至包括圖形用戶(hù)界面都需要存放在Nor Flash或Nand Flash中。4.內(nèi)核啟動(dòng)參數(shù)設(shè)置經(jīng)過(guò)(jnggu)修改后,S3C2410 x開(kāi)發(fā)板能從Nand Flash中啟動(dòng)運(yùn)行Linux,也能從Nor Flash中啟動(dòng),所以相應(yīng)地也要修改啟動(dòng)命令 。共五十七頁(yè)5. Flash驅(qū)動(dòng)的實(shí)現(xiàn)移植vivi的最后一步就是實(shí)現(xiàn)Flash驅(qū)
4、動(dòng)程序員需要根據(jù)自己系統(tǒng)中具體Flash芯片的型號(hào)(xngho)及配置來(lái)修改驅(qū)動(dòng)程序,使Flash設(shè)備能夠在嵌入式系統(tǒng)中正常工作。 共五十七頁(yè)12.2.2 串口設(shè)置(shzh)示例串口作為一種常用的通信方式,在嵌入式開(kāi)發(fā)中起到極其重要的作用(zuyng)幾乎所有的嵌入式設(shè)備都提供了串口的支持,并且都在Bootloader中就給出了支持為下一步開(kāi)發(fā)提供方便,比如操作系統(tǒng)內(nèi)、文件系統(tǒng)等下載等。 共五十七頁(yè)對(duì)vivi而言,串口的初始化是在vivi初始化的第一個(gè)階段進(jìn)行具體(jt)是在arch/s3c2410 /head.s文件中設(shè)置一般串口波特率設(shè)置為115200Buad。若希望波特率設(shè)置為1152
5、00,而PCLK又等于40MHz,那么UBRDIVn就應(yīng)該設(shè)置為:UBRDIVn= (int)(40000000/(11520016) ) 1 =(int)(21.7)-1 =20其中,PCLK=50700000,UBRDIV0的值向下取整。 共五十七頁(yè)12.2.3 Bootloader的交叉(jioch)編譯修改vivi目錄下的Makefile文件,將其中的編譯器由 gcc改為交叉編譯器arm-linux-gcc。使用make命令(mng lng),根據(jù)Makefile文件自動(dòng)完成整個(gè)編譯。編譯完成后,系統(tǒng)將自動(dòng)在vivi的根目錄下生成一個(gè)名為“vivi” 的二進(jìn)制目標(biāo)文件,用于下載到嵌入式
6、目標(biāo)設(shè)備的Flash中。共五十七頁(yè)12.2.4 Bootloader的下載(xi zi)Bootloader的下載(又叫做(jiozu)燒錄)利用JTAG口進(jìn)行。操作平臺(tái)可以是Windows或桌面Linux,只是兩者用的工具軟件不同而已。以Windows操作平臺(tái)及sjf2410工具軟件為例進(jìn)行介紹。在下載之前,需要將生成的可執(zhí)行文件從桌面Linux下轉(zhuǎn)移到Windows的某個(gè)目錄下(如 d:vivi)。共五十七頁(yè) 利用Jflash線(xiàn)將PC機(jī)和嵌入式目標(biāo)板的JTAG口正確連接。 啟動(dòng)sjf服務(wù),安裝giveio.sys驅(qū)動(dòng)。打開(kāi)sjf目錄下的loaddrv.exe,將彈出LoadDrv窗口. 然
7、后再依次點(diǎn)擊install 和start按鈕, 就會(huì)提示“service already runing”,也就是驅(qū)動(dòng)已經(jīng)安裝成功. 在DOS環(huán)境下手動(dòng)運(yùn)行sjf2410命令(mng lng):sjf2410 /f: vivi,其中“/f:是”參數(shù)而不是目錄. vivi下載成功后,用串口將PC和嵌入式目標(biāo)板連接起來(lái),并啟動(dòng)Windows中的超級(jí)終端.共五十七頁(yè)12.3 嵌入式Linux內(nèi)核(ni h)的移植內(nèi)核是嵌入式Linux系統(tǒng)(xtng)的核心部分。Linux與Windows不同,其內(nèi)核和文件系統(tǒng)、圖形用 戶(hù)系統(tǒng)(GUI窗口系統(tǒng))可以分開(kāi)。它們的開(kāi)發(fā)、移植、下載甚至運(yùn)行都是可以分開(kāi)的。共五
8、十七頁(yè)內(nèi)核(ni h)移植是一個(gè)比較復(fù)雜的任務(wù),也是嵌入式系統(tǒng)開(kāi)發(fā)中非常重要的一個(gè)過(guò)程。內(nèi)核移植一般包括3大步驟內(nèi)核配置內(nèi)核編譯內(nèi)核下載共五十七頁(yè)12.3.1 內(nèi)核移植(yzh)的準(zhǔn)備 準(zhǔn)備好編譯內(nèi)核的編譯器即交叉編譯工具(gngj)鏈從相關(guān)的網(wǎng)站()下載要移植的內(nèi)核源代碼(基本上都是C語(yǔ)言編寫(xiě)) 。共五十七頁(yè)12.3.2 關(guān)鍵文件(wnjin)的修改1. 設(shè)置目標(biāo)平臺(tái)和指定交叉編譯器在源代碼的最上層根目錄下的Makefile文件中,指定所移植的硬件平臺(tái),以及所使用的交叉編譯器。 2. arch/arm目錄下Makefile 修改內(nèi)核系統(tǒng)的啟動(dòng)(qdng)代碼是通過(guò)此文件產(chǎn)生的。 共五十七頁(yè)3
9、. arch/arm目錄下Config.in 修改 Config.in文件是用來(lái)設(shè)置后面介紹的menuconfig配置菜單的,它們是一一對(duì)應(yīng)關(guān)系。 這里把嵌入式目標(biāo)板的CPU平臺(tái)加在相應(yīng)的地方,這樣(zhyng)在配置Linux內(nèi)核時(shí)就能夠選擇是否支持該平臺(tái)了 4. arch/arm/boot目錄下Makefile 修改 編譯出來(lái)的內(nèi)核存放在該目錄下。 用來(lái)指定內(nèi)核解壓到實(shí)際硬件內(nèi)存系統(tǒng)中的物理地址。 一般如果內(nèi)核無(wú)法正常啟動(dòng),很可能是這里的地址設(shè)置不正確。共五十七頁(yè)5. arch/arm/boot/compressed目錄下 Makefile 修改(xigi) 該文件從vmlinux中創(chuàng)建一
10、個(gè)壓縮的vmlinuz鏡像文件 該文件中用到的SYSTEM、ZTEXTADDR、ZBSSADDR、和ZRELADDR是從arch/arm/boot/Makefile文件中得到的。 6. arch/arm/boot/compressed目錄下 添加head-s3c2410.s共五十七頁(yè)7. arch/arm/def-configs目錄 這里定義(dngy)了一些平臺(tái)的config文件,比如lart和assert等。把配置好的S3C2410的配置文件復(fù)制到這里即可。8. arch/arm/kernel目錄下Makefile 修改 該文件主要用來(lái)確定文件類(lèi)型的依賴(lài)關(guān)系。共五十七頁(yè)9. arch/ar
11、m/kernel目錄下的文件 debug-armv.s 修改 在該文件中添加如下代碼,目的是關(guān)閉(gunb)外圍設(shè)備的時(shí)鐘,以保證系統(tǒng)正常運(yùn)行。 10. arch/arm/kernel目錄下的文件 entry-armv.s 修改 在適當(dāng)?shù)牡胤郊尤肴缦麓a,此為CPU初始化時(shí)的處理中斷的匯編代碼。共五十七頁(yè)11. arch/arm/mm目錄下的相關(guān)文件 此目錄下的文件是和ARM平臺(tái)相關(guān)的內(nèi)存管理內(nèi)容,只有mm-armv.c文件需要移植。12. arch/arm/mach-s3c2410目錄下的相關(guān)文件 這個(gè)目錄在2.4.18版本的內(nèi)核中是不存在的,但在高版本中已經(jīng)添加(tin ji)了對(duì)這款處理
12、器的支持。 不過(guò)發(fā)布的內(nèi)核只是對(duì)處理器的基本信息提供支持,有關(guān)開(kāi)發(fā)板的外設(shè) 。共五十七頁(yè)12.3.3 內(nèi)核(ni h)的配置與裁剪配置內(nèi)核與裁剪是移植內(nèi)核過(guò)程中很重要的一步,也是非常復(fù)雜的一步,配置時(shí)一定要小心,否則操作系統(tǒng)將無(wú)法運(yùn)行。配置內(nèi)核的目的:裁剪掉不必要的文件(wnjin)和目錄獲得一個(gè)最簡(jiǎn)的、又能滿(mǎn)足用戶(hù)開(kāi)發(fā)的操作系統(tǒng)以解除嵌入式開(kāi)發(fā)過(guò)程中所遇到的存儲(chǔ)空間有限的困擾。共五十七頁(yè) 通常有4種主要的配置內(nèi)核的方法(fngf)。 1. make config(命令行) 2. make oldconfig (使用已有的配置文件,提示之前沒(méi)有配置的選項(xiàng)) 3. make menuconfig
13、(基于文本的菜單) 4. make xconfig (基于X窗口的配置菜單)共五十七頁(yè)1、啟動(dòng)內(nèi)核配置窗口進(jìn)入(jnr)被配置內(nèi)核的目錄,如/arm/kernel輸入make menuconfig打開(kāi)內(nèi)核配置窗口2、配置內(nèi)核使用SPACE鍵選中或取消對(duì)某項(xiàng)的選擇,*表示被選中。3、保存配置共五十七頁(yè)12.3.4 內(nèi)核(ni h)的編譯編譯內(nèi)核幾個(gè)步驟:一是清除以前編譯通過(guò)(tnggu)的殘留文件;二是編譯內(nèi)核image文件和可加載模塊;三是安裝模塊。共五十七頁(yè)在編譯內(nèi)核之前,可先參考內(nèi)核目錄下的README文件和Documentation/Changes文件:README文件說(shuō)明安裝(nzhu
14、ng)內(nèi)核的方法;Changes文件說(shuō)明編譯和運(yùn)行內(nèi)核需要的最低工具軟件列表。 共五十七頁(yè)具體介紹編譯(biny)內(nèi)核的基本步驟 make dep (該命令用在內(nèi)核2.4或之前) 用于建立源文件之間的依賴(lài)關(guān)系 在執(zhí)行(zhxng)內(nèi)核配置命令之后使用。 make clean (這個(gè)步驟是可選的)用于刪除前面留下來(lái)的中間文件不會(huì)刪除.config等配置文件 make zImage用于編譯生成壓縮形式的內(nèi)核映象編譯成功后,在archarmboot目錄下生成zImage文件 .共五十七頁(yè) make modules如果在配置菜單的過(guò)程中,有些選項(xiàng)被選擇為模塊的,即選項(xiàng)前為M并且(bngqi)在回答En
15、able loadable module support(CONFIG_MODULES)時(shí)選了“Yes”用命令make modules來(lái)編譯這些可加載模塊用make modules_install 將make modules 生成的模塊文件復(fù)制到到相應(yīng)目錄。 如果是直接升級(jí)PC桌面Linux系統(tǒng)的內(nèi)核,那么接下來(lái)還要用make install來(lái)安裝新內(nèi)核。 共五十七頁(yè)12.3.5 內(nèi)核(ni h)的下載進(jìn)入vivi控制臺(tái)連好串口線(xiàn),啟動(dòng)超級(jí)終端(波特率為115200),在開(kāi)機(jī)的瞬間快速的按空格鍵(不能是回車(chē)鍵)向flash芯片中燒寫(xiě) kernel 在vivi命令行上輸入:load flash
16、kernel x含義:向flash芯片中燒寫(xiě) kernel,采用xmodem協(xié)議?;剀?chē)后會(huì)提示等待。 選擇要發(fā)送的文件比如(br)zImage文件,這里L(fēng)inux環(huán)境下源代碼arch/arm/boot目錄下的zImage內(nèi)核映像文件已轉(zhuǎn)移到windows 的某個(gè)目錄下。共五十七頁(yè)12.4 嵌入式Linux文件系統(tǒng)的移植(yzh)文件系統(tǒng)是Linux/UNIX系統(tǒng)的一個(gè)重要組成部分。也是操作系統(tǒng)正常工作時(shí)的必要組成部分。在啟動(dòng)時(shí)內(nèi)核需要根文件系統(tǒng)來(lái)掛載和組織文件。內(nèi)核代碼映像文件保存在根文件系統(tǒng)中。系統(tǒng)引導(dǎo)啟動(dòng)程序會(huì)從這個(gè)根文件系統(tǒng)設(shè)備上把內(nèi)核執(zhí)行代碼加載到內(nèi)存(ni cn)中去運(yùn)行。共五十七頁(yè)
17、在Linux 中,用戶(hù)(yngh)能看到的文件空間是用一個(gè)單樹(shù)狀結(jié)構(gòu)來(lái)組織的。根文件系統(tǒng)的最頂層稱(chēng)為root其下的每一個(gè)目錄都有其具體的目的和用途常見(jiàn)的根文件系統(tǒng)有Romfs、JFFS2、NFS、ext2、RamDisk、cramfs等 。共五十七頁(yè)12.5 Linux下設(shè)備(shbi)驅(qū)動(dòng)程序的開(kāi)發(fā)Linux驅(qū)動(dòng)開(kāi)發(fā)(kif)是嵌入式軟件設(shè)計(jì)中的主要內(nèi)容。也是嵌入式Linux移植中工作量最大的部分。共五十七頁(yè)這里主要概述:Linux設(shè)備驅(qū)動(dòng)框架驅(qū)動(dòng)程序的組成(z chn)常用的加載驅(qū)動(dòng)程序的方法通過(guò)實(shí)例來(lái)詳細(xì)介紹字符設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)過(guò)程。 共五十七頁(yè)12.5.1 驅(qū)動(dòng)程序概述(i sh)設(shè)
18、備驅(qū)動(dòng)程序是應(yīng)用程序與硬件之間的一個(gè)中間軟件層??梢钥醋?kn zu)是一個(gè)硬件抽象層。為應(yīng)用程序屏蔽了硬件的細(xì)節(jié)。共五十七頁(yè)在應(yīng)用程序看來(lái),硬件設(shè)備只是一個(gè)設(shè)備文件(wnjin)。 應(yīng)用程序可以像操作普通文件一樣對(duì)硬件設(shè)備進(jìn)行操作。在操作系統(tǒng)看來(lái),設(shè)備驅(qū)動(dòng)程序是內(nèi)核的一部分。 它主要實(shí)現(xiàn)的功能有: 對(duì)設(shè)備進(jìn)行初始化和釋放; 把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù); 讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù) 回送應(yīng)用程序請(qǐng)求的數(shù)據(jù) 檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤。共五十七頁(yè)1. 設(shè)備(shbi)類(lèi)型分類(lèi) 在Linux操作系統(tǒng)下有3類(lèi)主要的設(shè)備(shbi)類(lèi)型:字符設(shè)備塊設(shè)備網(wǎng)絡(luò)設(shè)備共五十七頁(yè)3類(lèi)主要(zhy
19、o)的設(shè)備類(lèi)型(1) 字符設(shè)備(shbi)字符設(shè)備(char device)和普通文件之間有主要的區(qū)別:普通文件可以來(lái)回讀/寫(xiě),而大多數(shù)字符設(shè)備僅僅是數(shù)據(jù)通道,只能順序讀/寫(xiě)。 (2)塊設(shè)備 塊設(shè)備(block device)是文件系統(tǒng)的物質(zhì)基礎(chǔ),它也支持像文件一樣被訪(fǎng)問(wèn)。 (3)網(wǎng)絡(luò)設(shè)備網(wǎng)絡(luò)設(shè)備是一個(gè)物理設(shè)備,如以太網(wǎng)卡,但軟件也可以作為網(wǎng)絡(luò)設(shè)備,典型的是回送設(shè)備(loopback)。 字符設(shè)備和塊設(shè)備的主要區(qū)別在于是否使用了緩沖技術(shù)。共五十七頁(yè)2. 設(shè)備(shbi)驅(qū)動(dòng)與文件系統(tǒng)的關(guān)系Linux通過(guò)設(shè)備文件系統(tǒng)對(duì)設(shè)備進(jìn)行管理。設(shè)備都以文件的形式存放在/dev目錄下,稱(chēng)為“設(shè)備文件”。應(yīng)用程
20、序可以像普通文件一樣(yyng)打開(kāi)、關(guān)閉和讀/寫(xiě)這些設(shè)備文件。為了管理這些設(shè)備,系統(tǒng)為設(shè)備編了號(hào),每個(gè)設(shè)備號(hào)又分為主設(shè)備號(hào)和次設(shè)備號(hào)。 (p396數(shù)據(jù)結(jié)構(gòu))共五十七頁(yè)12.5.2 重要(zhngyo)的數(shù)據(jù)結(jié)構(gòu)和函數(shù)1. 設(shè)備(shbi)驅(qū)動(dòng)中關(guān)鍵數(shù)據(jù)結(jié)構(gòu)設(shè)備驅(qū)動(dòng)程序提供的這組入口點(diǎn)由幾個(gè)結(jié)構(gòu)向系統(tǒng)進(jìn)行說(shuō)明,是:file_operations數(shù)據(jù)結(jié)構(gòu)inode數(shù)據(jù)結(jié)構(gòu)file數(shù)據(jù)結(jié)構(gòu)(P397)2. 設(shè)備驅(qū)動(dòng)開(kāi)發(fā)中的基本函數(shù)設(shè)備驅(qū)動(dòng)程序所提供的入口點(diǎn),在設(shè)備驅(qū)動(dòng)程序初始化的時(shí)候向系統(tǒng)進(jìn)行說(shuō)明,以便系統(tǒng)在適當(dāng)?shù)臅r(shí)候調(diào)用。初始化部分一般還負(fù)責(zé)為設(shè)備驅(qū)動(dòng)程序申請(qǐng)系統(tǒng)資源,包括內(nèi)存、中斷、時(shí)鐘、I/
21、O端口等(這些資源也可以在open子程序或別的地方申請(qǐng))在這些資源不用的時(shí)候,應(yīng)該釋放它們,以利于資源的共享。 共五十七頁(yè)(1)設(shè)備注冊(cè)函數(shù)(2)內(nèi)存(ni cn)操作函數(shù) (3)中斷申請(qǐng)和釋放函數(shù) (4) I/O端口操作函數(shù) 共五十七頁(yè)12.5.3 字符設(shè)備(shbi)驅(qū)動(dòng)程序的組成 設(shè)備驅(qū)動(dòng)程序作為內(nèi)核的一部分它完成的功能包括:對(duì)設(shè)備初始化和釋放(shfng);把數(shù)據(jù)從內(nèi)核傳送到硬件并從硬件讀取數(shù)據(jù);讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請(qǐng)求的數(shù)據(jù);檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤。 共五十七頁(yè)1. 驅(qū)動(dòng)程序的注冊(cè)和注銷(xiāo)設(shè)備驅(qū)動(dòng)程序通過(guò)命令insmod以模塊的方式動(dòng)態(tài)加載后入口點(diǎn)是init
22、 _module 函數(shù)或宏 mdolue init 。 2. 設(shè)備操作在設(shè)備成功注冊(cè)之后,就可對(duì)它進(jìn)行打開(kāi)、讀寫(xiě)、控制和釋放等操作。在Linux內(nèi)核中,字符設(shè)備使用(shyng)fie_operations結(jié)構(gòu)來(lái)定義設(shè)備的各種操作集合。 共五十七頁(yè)3. 驅(qū)動(dòng)程序的中斷處理(chl)在實(shí)際的系統(tǒng)中,設(shè)備的許多工作通常與處理器不同步,而且總比處理器慢。在設(shè)備準(zhǔn)備好后通知處理器來(lái)進(jìn)行處理,這種方法就是中斷。由于系統(tǒng)的中斷資源有限驅(qū)動(dòng)程序在使用中斷前需要申請(qǐng),使用完后需要釋放。Linux中,中斷的申請(qǐng)和釋放分別是通過(guò) request_irq()函數(shù)和free_irq()函數(shù)來(lái)實(shí)現(xiàn)的。共五十七頁(yè)12.5
23、.4 動(dòng)態(tài)(dngti)和靜態(tài)加載方式Linux設(shè)備驅(qū)動(dòng)模塊(m kui)屬于內(nèi)核的一部分可以用靜態(tài)和動(dòng)態(tài)兩種方式來(lái)進(jìn)行編譯和加載兩者方式的開(kāi)發(fā)過(guò)程稍有不同,也各有特點(diǎn)。共五十七頁(yè)1. 靜態(tài)(jngti)加載方式(1)特點(diǎn)靜態(tài)方式就是將驅(qū)動(dòng)程序的源代碼事前放到內(nèi)核源代碼中,和整個(gè)內(nèi)核一起編譯。它需要修改內(nèi)核源代碼和文件系統(tǒng),并重新燒錄下載到嵌入式設(shè)備中,這樣(zhyng)當(dāng)內(nèi)核啟動(dòng)時(shí)就會(huì)加載驅(qū)動(dòng)程序。 (2)內(nèi)核的修改設(shè)備驅(qū)動(dòng)程序?qū)懲旰?,就可以將文件加到linux的內(nèi)核中了。 共五十七頁(yè)(3)文件系統(tǒng)的修改在內(nèi)核中加上驅(qū)動(dòng)程序后,還不能直接在應(yīng)用程序中使用驅(qū)動(dòng)程序中的函數(shù),如open,clos
24、e等.因?yàn)檫€需要在文件系統(tǒng)中提供設(shè)備訪(fǎng)問(wèn)(fngwn)接口,也就是/dev/目錄下的設(shè)備名與設(shè)備號(hào)。共五十七頁(yè)2. 動(dòng)態(tài)(dngti)加載方式(1)特點(diǎn)動(dòng)態(tài)加載方式就是說(shuō)將驅(qū)動(dòng)程序編譯成一個(gè)可加載、卸載(xi zi)的模塊目標(biāo)文件,然后添加到內(nèi)核中去即可。這種方法的好處就是通過(guò)將于內(nèi)核中一些不常用的驅(qū)動(dòng)采取動(dòng)態(tài)加載方式,從而可以減少內(nèi)核的大小模塊被插入內(nèi)核后,它就和內(nèi)核其他部分一樣可方便的被使用。 共五十七頁(yè)(2)驅(qū)動(dòng)程序添加到內(nèi)核中對(duì)于動(dòng)態(tài)驅(qū)動(dòng)程序的源代碼,其初始化函數(shù)和靜態(tài)方式的定義不同。要用這樣一些(yxi)函數(shù):int _init device_init (void);void _ex
25、it device_exit(void);module_init(device _init);module_exit(device_exit)。 (3)文件系統(tǒng)下設(shè)備名的創(chuàng)建驅(qū)動(dòng)添加安裝好后,還需要修改文件系統(tǒng)共五十七頁(yè)12.6 應(yīng)用(yngyng)程序開(kāi)發(fā)在Windows環(huán)境中,開(kāi)發(fā)者習(xí)慣使用各種功能強(qiáng)大的集成編譯開(kāi)發(fā)環(huán)境(IDE),完成程序編輯、編譯后,直接運(yùn)行即可。基于嵌入式Linux的應(yīng)用程序開(kāi)發(fā)過(guò)程中,目前還缺乏比較簡(jiǎn)單、高效的開(kāi)發(fā)工具和手段。應(yīng)用程序最終運(yùn)行平臺(tái)是嵌入式目標(biāo)系統(tǒng),而程序開(kāi)發(fā)與調(diào)試又仍然需要借助PC平臺(tái)的桌面系統(tǒng)來(lái)完成在程序的開(kāi)發(fā)與調(diào)試過(guò)程中,需要頻繁地將目標(biāo)文件從桌
26、面Linux系統(tǒng)中加載到嵌入式目標(biāo)設(shè)備(shbi)中,這是一個(gè)相對(duì)比較耗時(shí)的過(guò)程。 共五十七頁(yè)12.6.1 應(yīng)用程序的加載方式(fngsh)在桌面Linux上編輯源文件交叉編譯(biny)生成ELF可執(zhí)行文件后將生成的可執(zhí)行文件加載到嵌入式目標(biāo)系統(tǒng)上運(yùn)行。程序加載有多種方式,最為常見(jiàn)的方式有:U盤(pán)拷貝FTP下載NFS掛載方式共五十七頁(yè)12.6.2 應(yīng)用程序的GDB/GDBSERVER聯(lián)機(jī)(lin j)調(diào)試嵌入式Linux的聯(lián)機(jī)環(huán)境下,常用的調(diào)試代理工具為GDBSERVER。它是一個(gè)輕量級(jí)的調(diào)試器,運(yùn)行在目標(biāo)機(jī)上與運(yùn)行在主機(jī)(zhj)上的GDB通過(guò)RSP(Remote Serial Protoco1)協(xié)議進(jìn)行通訊從而完成遠(yuǎn)程聯(lián)機(jī)調(diào)試工作。共五十七頁(yè)1. GDB/GDBSERVER調(diào)試模型主機(jī)和目標(biāo)機(jī)之間使用串口或者網(wǎng)絡(luò)作為通信的通道.2. RSP通訊協(xié)議RSP協(xié)議將GDBGDBSERVER間通訊的內(nèi)容看做(kn zu)是數(shù)據(jù)包。數(shù)據(jù)包的內(nèi)容都使用ASCII字符。每一個(gè)數(shù)據(jù)包都遵循這樣的格式:$調(diào)試信息 接受方在收到數(shù)據(jù)包之后,對(duì)數(shù)據(jù)包進(jìn)行校驗(yàn),若正確回應(yīng)“+”,反之回應(yīng) 。共五十七頁(yè)3. 調(diào)試步驟(1)交叉編譯被調(diào)試程序文件(wnjin)。 (2)運(yùn)行嵌入式目標(biāo)機(jī)中的GDBSERVER 并加載被調(diào)試程序文件
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45198-2024老舊汽車(chē)估值評(píng)價(jià)規(guī)范
- STAT3-IN-39-生命科學(xué)試劑-MCE-5782
- ANO1-IN-4-生命科學(xué)試劑-MCE-2608
- 3-Methoxybenzeneboronic-acid-d3-3-Methoxyphenylboronic-acid-d-sub-3-sub-生命科學(xué)試劑-MCE-9929
- 二零二五年度電子產(chǎn)品銷(xiāo)售退換貨及售后服務(wù)協(xié)議
- 2025年度游戲工作室游戲市場(chǎng)調(diào)研分析師用工合同
- 二零二五年度生態(tài)旅游區(qū)集體土地入股聯(lián)營(yíng)協(xié)議
- 2025年度電子商務(wù)消費(fèi)者權(quán)益保護(hù)合同協(xié)議
- 二零二五年度美容店轉(zhuǎn)讓合同含美容院品牌形象使用權(quán)及廣告推廣
- 二零二五年度綠色環(huán)保餐飲商鋪?zhàn)赓U協(xié)議
- 住建局條文解讀新規(guī)JGJT46-2024《施工現(xiàn)場(chǎng)臨時(shí)用電安全技術(shù)標(biāo)準(zhǔn)》
- 物流公司軟件售后服務(wù)流程方案
- 機(jī)械工程類(lèi)基礎(chǔ)知識(shí)單選題100道及答案解析
- 關(guān)于水滸傳的題目單選題100道及答案解析
- 冠心病課件完整版本
- 2024年衛(wèi)生資格(中初級(jí))-中醫(yī)外科學(xué)主治醫(yī)師考試近5年真題集錦(頻考類(lèi)試題)帶答案
- 中國(guó)大百科全書(shū)(第二版全32冊(cè))08
- 霍尼韋爾Honeywell溫控器UDC2500中文手冊(cè)
- 義務(wù)教育數(shù)學(xué)新課標(biāo)課程標(biāo)準(zhǔn)2022版考試真題附含答案
- AQ/T 2059-2016 磷石膏庫(kù)安全技術(shù)規(guī)程(正式版)
- 四川省宜賓市中學(xué)2025屆九上數(shù)學(xué)期末統(tǒng)考模擬試題含解析
評(píng)論
0/150
提交評(píng)論