版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第12章嵌入式Linux軟件設計第一頁,共57頁。12.1移植的基本概念廣義上講移植包括軟件移植和硬件移植。從狹義上講,移植就是指軟件移植,即將一個軟件從一個平臺遷移到另一個與其不同的平臺上工作。通常情況下,移植分為以下3種情況。1、從一個硬件平臺移植到另一個硬件平臺2、從一個操作系統(tǒng)移植到另一個操作系統(tǒng)3、從一種軟件庫環(huán)境移植到另一種軟件庫環(huán)境
第二頁,共57頁。12.2Bootloader的移植Bootloader是操作系統(tǒng)和硬件的紐帶。它負責初始化硬件,引導操作系統(tǒng)內(nèi)核,檢測各種參數(shù)給操作系統(tǒng)內(nèi)核使用。一個功能完備的大型Bootloader,就相當于一個小型的操作系統(tǒng)。在嵌入式領域中,操作系統(tǒng)移植的關鍵在于Bootloader的移植以及操作系統(tǒng)內(nèi)核與硬件相關部分的移植。第三頁,共57頁。12.2.1關鍵文件的修改1.vivi頂層Makefile文件的修改vivi作為Linux系統(tǒng)的啟動代碼,在編譯配置時需要用到函數(shù)庫包括交叉編譯器庫和頭文件,交叉編譯開關選項設置,還包括Linux內(nèi)核代碼中的庫和頭文件通常需要修改vivi工程管理文件Makefile。第四頁,共57頁。2.vivi中與硬件相關的初始化與具體運行在哪一個處理器平臺上相關的文件都存放在vivi/arch/目錄下系統(tǒng)使用S3C2410x處理器,對應的目錄為s3c2410其中head.s文件是vivi啟動配置代碼,加電復位運行的代碼就是從這里開始的。第五頁,共57頁。3.對不同F(xiàn)lash啟動的修改vivi能從NorFlash或NandFlash啟動啟動程序、Linux內(nèi)核及根文件系統(tǒng),甚至包括圖形用戶界面都需要存放在NorFlash或NandFlash中。4.內(nèi)核啟動參數(shù)設置經(jīng)過修改后,S3C2410x開發(fā)板能從NandFlash中啟動運行Linux,也能從NorFlash中啟動,所以相應地也要修改啟動命令。第六頁,共57頁。5.Flash驅動的實現(xiàn)移植vivi的最后一步就是實現(xiàn)Flash驅動程序員需要根據(jù)自己系統(tǒng)中具體Flash芯片的型號及配置來修改驅動程序,使Flash設備能夠在嵌入式系統(tǒng)中正常工作。第七頁,共57頁。12.2.2串口設置示例串口作為一種常用的通信方式,在嵌入式開發(fā)中起到極其重要的作用幾乎所有的嵌入式設備都提供了串口的支持,并且都在Bootloader中就給出了支持為下一步開發(fā)提供方便,比如操作系統(tǒng)內(nèi)、文件系統(tǒng)等下載等。第八頁,共57頁。對vivi而言,串口的初始化是在vivi初始化的第一個階段進行具體是在arch/s3c2410/head.s文件中設置一般串口波特率設置為115200Buad。若希望波特率設置為115200,而PCLK又等于40MHz,那么UBRDIVn就應該設置為:UBRDIVn=(int)(40000000/(115200×16))–1=(int)(21.7)-1=20其中,PCLK=50700000,UBRDIV0的值向下取整。第九頁,共57頁。12.2.3Bootloader的交叉編譯修改vivi目錄下的Makefile文件,將其中的編譯器由gcc改為交叉編譯器arm-linux-gcc。使用make命令,根據(jù)Makefile文件自動完成整個編譯。編譯完成后,系統(tǒng)將自動在vivi的根目錄下生成一個名為“vivi”的二進制目標文件,用于下載到嵌入式目標設備的Flash中。第十頁,共57頁。12.2.4Bootloader的下載Bootloader的下載(又叫做燒錄)利用JTAG口進行。操作平臺可以是Windows或桌面Linux,只是兩者用的工具軟件不同而已。以Windows操作平臺及sjf2410工具軟件為例進行介紹。在下載之前,需要將生成的可執(zhí)行文件從桌面Linux下轉移到Windows的某個目錄下(如d:\vivi)。第十一頁,共57頁。①利用Jflash線將PC機和嵌入式目標板的JTAG口正確連接。②啟動sjf服務,安裝giveio.sys驅動。打開sjf目錄下的loaddrv.exe,將彈出LoadDrv窗口.③然后再依次點擊install和start按鈕,就會提示“servicealreadyruning”,也就是驅動已經(jīng)安裝成功.④在DOS環(huán)境下手動運行sjf2410命令:sjf2410/f:vivi,其中“/f:是”參數(shù)而不是目錄.⑤vivi下載成功后,用串口將PC和嵌入式目標板連接起來,并啟動Windows中的超級終端.第十二頁,共57頁。12.3嵌入式Linux內(nèi)核的移植內(nèi)核是嵌入式Linux系統(tǒng)的核心部分。Linux與Windows不同,其內(nèi)核和文件系統(tǒng)、圖形用戶系統(tǒng)(GUI窗口系統(tǒng))可以分開。它們的開發(fā)、移植、下載甚至運行都是可以分開的。第十三頁,共57頁。內(nèi)核移植是一個比較復雜的任務,也是嵌入式系統(tǒng)開發(fā)中非常重要的一個過程。內(nèi)核移植一般包括3大步驟內(nèi)核配置內(nèi)核編譯內(nèi)核下載第十四頁,共57頁。12.3.1內(nèi)核移植的準備
準備好編譯內(nèi)核的編譯器即交叉編譯工具鏈從相關的網(wǎng)站()下載要移植的內(nèi)核源代碼(基本上都是C語言編寫)。第十五頁,共57頁。12.3.2關鍵文件的修改1.設置目標平臺和指定交叉編譯器在源代碼的最上層根目錄下的Makefile文件中,指定所移植的硬件平臺,以及所使用的交叉編譯器。2.arch/arm目錄下Makefile修改內(nèi)核系統(tǒng)的啟動代碼是通過此文件產(chǎn)生的。
第十六頁,共57頁。3.arch/arm目錄下Config.in修改Config.in文件是用來設置后面介紹的menuconfig配置菜單的,它們是一一對應關系。這里把嵌入式目標板的CPU平臺加在相應的地方,這樣在配置Linux內(nèi)核時就能夠選擇是否支持該平臺了4.arch/arm/boot目錄下Makefile修改編譯出來的內(nèi)核存放在該目錄下。用來指定內(nèi)核解壓到實際硬件內(nèi)存系統(tǒng)中的物理地址。一般如果內(nèi)核無法正常啟動,很可能是這里的地址設置不正確。第十七頁,共57頁。5.arch/arm/boot/compressed目錄下Makefile修改該文件從vmlinux中創(chuàng)建一個壓縮的vmlinuz鏡像文件該文件中用到的SYSTEM、ZTEXTADDR、ZBSSADDR、和ZRELADDR是從arch/arm/boot/Makefile文件中得到的。
6.arch/arm/boot/compressed目錄下添加head-s3c2410.s第十八頁,共57頁。7.arch/arm/def-configs目錄
這里定義了一些平臺的config文件,比如lart和assert等。把配置好的S3C2410的配置文件復制到這里即可。8.arch/arm/kernel目錄下Makefile修改該文件主要用來確定文件類型的依賴關系。第十九頁,共57頁。9.arch/arm/kernel目錄下的文件debug-armv.s修改在該文件中添加如下代碼,目的是關閉外圍設備的時鐘,以保證系統(tǒng)正常運行。10.arch/arm/kernel目錄下的文件entry-armv.s修改在適當?shù)牡胤郊尤肴缦麓a,此為CPU初始化時的處理中斷的匯編代碼。第二十頁,共57頁。11.arch/arm/mm目錄下的相關文件此目錄下的文件是和ARM平臺相關的內(nèi)存管理內(nèi)容,只有mm-armv.c文件需要移植。12.arch/arm/mach-s3c2410目錄下的相關文件這個目錄在2.4.18版本的內(nèi)核中是不存在的,但在高版本中已經(jīng)添加了對這款處理器的支持。不過發(fā)布的內(nèi)核只是對處理器的基本信息提供支持,有關開發(fā)板的外設。第二十一頁,共57頁。12.3.3內(nèi)核的配置與裁剪配置內(nèi)核與裁剪是移植內(nèi)核過程中很重要的一步,也是非常復雜的一步,配置時一定要小心,否則操作系統(tǒng)將無法運行。配置內(nèi)核的目的:裁剪掉不必要的文件和目錄獲得一個最簡的、又能滿足用戶開發(fā)的操作系統(tǒng)以解除嵌入式開發(fā)過程中所遇到的存儲空間有限的困擾。第二十二頁,共57頁。通常有4種主要的配置內(nèi)核的方法。1.makeconfig(命令行)
2.makeoldconfig
(使用已有的配置文件,提示之前沒有配置的選項)
3.makemenuconfig(基于文本的菜單)
4.makexconfig
(基于X窗口的配置菜單)第二十三頁,共57頁。1、啟動內(nèi)核配置窗口進入被配置內(nèi)核的目錄,如/arm/kernel輸入makemenuconfig打開內(nèi)核配置窗口2、配置內(nèi)核使用SPACE鍵選中或取消對某項的選擇,*表示被選中。3、保存配置第二十四頁,共57頁。12.3.4內(nèi)核的編譯編譯內(nèi)核幾個步驟:一是清除以前編譯通過的殘留文件;二是編譯內(nèi)核image文件和可加載模塊;三是安裝模塊。第二十五頁,共57頁。在編譯內(nèi)核之前,可先參考內(nèi)核目錄下的README文件和Documentation/Changes文件:README文件說明安裝內(nèi)核的方法;Changes文件說明編譯和運行內(nèi)核需要的最低工具軟件列表。第二十六頁,共57頁。具體介紹編譯內(nèi)核的基本步驟①makedep(該命令用在內(nèi)核2.4或之前)用于建立源文件之間的依賴關系在執(zhí)行內(nèi)核配置命令之后使用。
②makeclean(這個步驟是可選的)用于刪除前面留下來的中間文件不會刪除.config等配置文件③makezImage用于編譯生成壓縮形式的內(nèi)核映象編譯成功后,在arch\arm\boot\目錄下生成zImage文件.第二十七頁,共57頁。④makemodules如果在配置菜單的過程中,有些選項被選擇為模塊的,即選項前為[M]并且在回答Enableloadablemodulesupport(CONFIG_MODULES)時選了“Yes”用命令makemodules來編譯這些可加載模塊用makemodules_install將makemodules生成的模塊文件復制到到相應目錄。⑤如果是直接升級PC桌面Linux系統(tǒng)的內(nèi)核,那么接下來還要用makeinstall來安裝新內(nèi)核。第二十八頁,共57頁。12.3.5內(nèi)核的下載①進入vivi控制臺連好串口線,啟動超級終端(波特率為115200),在開機的瞬間快速的按空格鍵(不能是回車鍵)②向flash芯片中燒寫kernel在vivi命令行上輸入:loadflashkernelx含義:向flash芯片中燒寫kernel,采用xmodem協(xié)議?;剀嚭髸崾镜却"圻x擇要發(fā)送的文件比如zImage文件,這里Linux環(huán)境下源代碼arch/arm/boot目錄下的zImage內(nèi)核映像文件已轉移到windows的某個目錄下。第二十九頁,共57頁。12.4嵌入式Linux文件系統(tǒng)的移植文件系統(tǒng)是Linux/UNIX系統(tǒng)的一個重要組成部分。也是操作系統(tǒng)正常工作時的必要組成部分。在啟動時內(nèi)核需要根文件系統(tǒng)來掛載和組織文件。內(nèi)核代碼映像文件保存在根文件系統(tǒng)中。系統(tǒng)引導啟動程序會從這個根文件系統(tǒng)設備上把內(nèi)核執(zhí)行代碼加載到內(nèi)存中去運行。第三十頁,共57頁。在Linux中,用戶能看到的文件空間是用一個單樹狀結構來組織的。根文件系統(tǒng)的最頂層稱為root其下的每一個目錄都有其具體的目的和用途常見的根文件系統(tǒng)有Romfs
、JFFS2、NFS、ext2、RamDisk、cramfs等。第三十一頁,共57頁。12.5Linux下設備驅動程序的開發(fā)Linux驅動開發(fā)是嵌入式軟件設計中的主要內(nèi)容。也是嵌入式Linux移植中工作量最大的部分。第三十二頁,共57頁。這里主要概述:Linux設備驅動框架驅動程序的組成常用的加載驅動程序的方法通過實例來詳細介紹字符設備驅動程序的開發(fā)過程。第三十三頁,共57頁。12.5.1驅動程序概述設備驅動程序是應用程序與硬件之間的一個中間軟件層。可以看作是一個硬件抽象層。為應用程序屏蔽了硬件的細節(jié)。第三十四頁,共57頁。在應用程序看來,硬件設備只是一個設備文件。應用程序可以像操作普通文件一樣對硬件設備進行操作。在操作系統(tǒng)看來,設備驅動程序是內(nèi)核的一部分。它主要實現(xiàn)的功能有:對設備進行初始化和釋放;把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù);讀取應用程序傳送給設備文件的數(shù)據(jù)回送應用程序請求的數(shù)據(jù)檢測和處理設備出現(xiàn)的錯誤。第三十五頁,共57頁。1.設備類型分類在Linux操作系統(tǒng)下有3類主要的設備類型:字符設備塊設備網(wǎng)絡設備第三十六頁,共57頁。3類主要的設備類型(1)字符設備字符設備(chardevice)和普通文件之間有主要的區(qū)別:普通文件可以來回讀/寫,而大多數(shù)字符設備僅僅是數(shù)據(jù)通道,只能順序讀/寫。
(2)塊設備塊設備(blockdevice)是文件系統(tǒng)的物質(zhì)基礎,它也支持像文件一樣被訪問。(3)網(wǎng)絡設備網(wǎng)絡設備是一個物理設備,如以太網(wǎng)卡,但軟件也可以作為網(wǎng)絡設備,典型的是回送設備(loopback)。字符設備和塊設備的主要區(qū)別在于是否使用了緩沖技術。第三十七頁,共57頁。2.設備驅動與文件系統(tǒng)的關系Linux通過設備文件系統(tǒng)對設備進行管理。設備都以文件的形式存放在/dev目錄下,稱為“設備文件”。應用程序可以像普通文件一樣打開、關閉和讀/寫這些設備文件。為了管理這些設備,系統(tǒng)為設備編了號,每個設備號又分為主設備號和次設備號。(p396數(shù)據(jù)結構)第三十八頁,共57頁。12.5.2重要的數(shù)據(jù)結構和函數(shù)1.設備驅動中關鍵數(shù)據(jù)結構設備驅動程序提供的這組入口點由幾個結構向系統(tǒng)進行說明,是:數(shù)據(jù)結構inode數(shù)據(jù)結構file數(shù)據(jù)結構(P397)2.設備驅動開發(fā)中的基本函數(shù)設備驅動程序所提供的入口點,在設備驅動程序初始化的時候向系統(tǒng)進行說明,以便系統(tǒng)在適當?shù)臅r候調(diào)用。初始化部分一般還負責為設備驅動程序申請系統(tǒng)資源,包括內(nèi)存、中斷、時鐘、I/O端口等(這些資源也可以在open子程序或別的地方申請)在這些資源不用的時候,應該釋放它們,以利于資源的共享。第三十九頁,共57頁。(1)設備注冊函數(shù)(2)內(nèi)存操作函數(shù)(3)中斷申請和釋放函數(shù)(4)I/O端口操作函數(shù)第四十頁,共57頁。12.5.3字符設備驅動程序的組成設備驅動程序作為內(nèi)核的一部分.它完成的功能包括:對設備初始化和釋放;把數(shù)據(jù)從內(nèi)核傳送到硬件并從硬件讀取數(shù)據(jù);讀取應用程序傳送給設備文件的數(shù)據(jù)和回送應用程序請求的數(shù)據(jù);檢測和處理設備出現(xiàn)的錯誤。第四十一頁,共57頁。1.驅動程序的注冊和注銷設備驅動程序通過命令insmod以模塊的方式動態(tài)加載后.入口點是init_module函數(shù)或宏mdolueinit。2.設備操作在設備成功注冊之后,就可對它進行打開、讀寫、控制和釋放等操作。在Linux內(nèi)核中,字符設備使用fie_operations結構來定義設備的各種操作集合。第四十二頁,共57頁。3.驅動程序的中斷處理在實際的系統(tǒng)中,設備的許多工作通常與處理器不同步,而且總比處理器慢。在設備準備好后通知處理器來進行處理,這種方法就是中斷。由于系統(tǒng)的中斷資源有限.驅動程序在使用中斷前需要申請,使用完后需要釋放。Linux中,中斷的申請和釋放分別是通過request_irq()函數(shù)和free_irq()函數(shù)來實現(xiàn)的。第四十三頁,共57頁。12.5.4動態(tài)和靜態(tài)加載方式Linux設備驅動模塊屬于內(nèi)核的一部分可以用靜態(tài)和動態(tài)兩種方式來進行編譯和加載兩者方式的開發(fā)過程稍有不同,也各有特點。第四十四頁,共57頁。1.靜態(tài)加載方式(1)特點靜態(tài)方式就是將驅動程序的源代碼事前放到內(nèi)核源代碼中,和整個內(nèi)核一起編譯。它需要修改內(nèi)核源代碼和文件系統(tǒng),并重新燒錄下載到嵌入式設備中,這樣當內(nèi)核啟動時就會加載驅動程序。(2)內(nèi)核的修改設備驅動程序寫完后,就可以將文件加到linux的內(nèi)核中了。第四十五頁,共57頁。(3)文件系統(tǒng)的修改在內(nèi)核中加上驅動程序后,還不能直接在應用程序中使用驅動程序中的函數(shù),如open,close等.因為還需要在文件系統(tǒng)中提供設備訪問接口,也就是/dev/目錄下的設備名與設備號。第四十六頁,共57頁。2.動態(tài)加載方式(1)特點動態(tài)加載方式就是說將驅動程序編譯成一個可加載、卸載的模塊目標文件,然后添加到內(nèi)核中去即可。這種方法的好處就是通過將于內(nèi)核中一些不常用的驅動采取動態(tài)加載方式,從而可以減少內(nèi)核的大小模塊被插入內(nèi)核后,它就和內(nèi)核其他部分一樣可方便的被使用。第四十七頁,共57頁。(2)驅動程序添加到內(nèi)核中對于動態(tài)驅動程序的源代碼,其初始化函數(shù)和靜態(tài)方式的定義不同。要用這樣一些函數(shù):int__initdevice_init(void);void__exitdevice_exit(void);module_init(device_init);module_exit(device_exit)。(3)文件系統(tǒng)下設備名的創(chuàng)建驅動添加安裝好后,還需要修改文件系統(tǒng)第四十八頁,共57頁。12.6應用程序開發(fā)在Windows環(huán)境中,開發(fā)者習慣使用各種功能強大的集成編譯開發(fā)環(huán)境(IDE),完成程序編輯、編譯后,直接運行即可?;谇度胧絃inux的應用程序開發(fā)過程中,目前還缺乏比較簡單、高效的開發(fā)工具和手段。應用程序最終運行平臺是嵌入式目標系統(tǒng),而程序開發(fā)與調(diào)試又仍然需要借助PC平臺的桌面系統(tǒng)來完成在程序的開發(fā)與調(diào)試過程中,需要頻繁地將目標文件從桌面Linux系統(tǒng)中加載到嵌入式目標設備中,這是一個相對比較耗時的過程。第四十九頁,共57頁。12.6.1應用程序的加載方式在桌面Linux上編輯源文件交叉編譯生成ELF可執(zhí)行文件后將生成的可執(zhí)行文件加載到嵌入式目標系統(tǒng)上運行。程序加載有多種方式,最為常見的方式有:U盤拷貝FTP下載NFS掛載方式第五十頁,共57頁。12.6.2應用程序的GDB/GDBSERVER聯(lián)機調(diào)試嵌入式Linux的聯(lián)機環(huán)境下,常用的調(diào)試代理工具為GDBSERVER。它是一個輕量級的調(diào)試器,運行在目標機上與運行在主機上的GDB通過RSP(RemoteSerialProtoco1)協(xié)議進行通訊從而完成遠程聯(lián)機調(diào)試工作。第五十一頁,共57頁。1.GDB/GDBSERVER調(diào)試模型主機和目標機之間使用串口或者網(wǎng)絡作為通信的通道.2.RSP通訊協(xié)議RSP協(xié)議將GDB/GDBSERVER間通訊的內(nèi)容看做是數(shù)據(jù)包。數(shù)據(jù)包的內(nèi)容都使用ASCII字符。每一個數(shù)據(jù)包都遵循這樣的格式:$<調(diào)試信息<校驗碼>.接受方在收到數(shù)據(jù)包之后,對數(shù)據(jù)包進行校驗,若
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課件圖片沒了教學課件
- 2024年度知識產(chǎn)權許可合同補充協(xié)議
- 2024年太陽能路燈物流與倉儲服務合同
- 2024化工廠建設土石方運輸合同
- 04年新一代移動通信技術研發(fā)合同
- 2024年度企業(yè)招聘外包合同
- 2024規(guī)范版汽車租賃合同
- 課程課件封面教學課件
- 2024年國際貨物買賣合同標的數(shù)量與質(zhì)量檢驗標準詳解
- 2024學校校園廣告投放合同
- 2024年企業(yè)數(shù)據(jù)存儲與安全服務合同
- 2022年北京市公務員錄用考試《行測》真題及答案解析
- 江蘇省泰興市2024-2025學年高三上學期期中考試語文試題(含答案)
- 家長會教學課件
- 2024年消防宣傳月知識競賽考試題庫500題(含答案)
- 2024年典型事故案例警示教育手冊15例
- 高一歷史(中外歷史綱要上冊)期中測試卷及答案
- 20K607 防排煙及暖通防火設計審查與安裝
- 一氧化碳中毒培訓課件
- 教案(餐巾折花)
- 一元三次、一元四次方程的基本解法畢業(yè)論文
評論
0/150
提交評論