資源描述:
《基于ZYNQ芯片的外設(shè)驅(qū)動技術(shù)方案.doc》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、一、BootLoader的移植制作21、生成uboot.elf文件32、system.bit生成53、創(chuàng)建fsbl84、生成BOOT.BIN9二、配置并編譯linux內(nèi)核101、修改設(shè)備樹內(nèi)容102、配置編譯linux內(nèi)核12三、Linux設(shè)備驅(qū)動移植131、Linux設(shè)備驅(qū)動模型142、Linux設(shè)備驅(qū)動移植15在嵌入式操作系統(tǒng)中,BootLoader是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行??梢猿跏蓟布O(shè)備、建立內(nèi)存空間映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。在嵌入式系統(tǒng)中,通常并沒有像
2、BIOS那樣的固件程序(注,有的嵌入式CPU也會內(nèi)嵌一段短小的啟動程序),因此整個系統(tǒng)的加載啟動任務(wù)就完全由BootLoader來完成。在一個基于zynq的嵌入式Linux系統(tǒng)中,系統(tǒng)在上電或復(fù)位時通常都從地址0x處開始執(zhí)行,而在這個地址處安排的通常就是系統(tǒng)的BootLoader程序。想要在zynq芯片上順利啟動Linux并且驅(qū)動相關(guān)模塊正常工作,首先需要正確移植BootLoader。作為初始化硬件平臺的一段BareMetal代碼,Bootloader的移植也并入了我們的工作。所以綜合起來說,我們的工作主要分為了三個部分:Bootl
3、oader的移植以及Linux內(nèi)核和設(shè)備驅(qū)動的移植。在進(jìn)行移植工作之前,首先要做的是要在宿主機(jī)上面搭建好我們目標(biāo)板的開發(fā)平臺,以及下載好uboot源代碼,Linux內(nèi)核源代碼以及相關(guān)驅(qū)動源代碼。(有的模塊的驅(qū)動源代碼在Linux內(nèi)核源代碼中已經(jīng)包含進(jìn)去了,那么就不用單獨(dú)下載。需要下載的驅(qū)動源代碼只是針對標(biāo)準(zhǔn)Linux內(nèi)核中不支持的部件而言。)一、BootLoader的移植制作每一種操作系統(tǒng)都需要有自己的引導(dǎo)程序,最為人們所知的就是Windows的BIOS。缺失了這一部分,系統(tǒng)將無法正常啟動。對比與Windows的BIOS,andro
4、id系統(tǒng)擁有自己的專屬的BootLoader,它主要負(fù)責(zé)初始化系統(tǒng)平臺的硬件設(shè)備,建立內(nèi)存空間的映射關(guān)系。在它完成初始化工作之后,繼續(xù)負(fù)責(zé)把內(nèi)核鏡像和yaffs2格式的文件系統(tǒng)從SD卡載入到RAM中,完成Linux內(nèi)核和文件系統(tǒng)的加載并設(shè)置內(nèi)核的啟動參數(shù),緊接著啟動內(nèi)核。等到內(nèi)核真正啟動了之后,BootLoader就殺死自己,把CPU讓出給內(nèi)核使用。之后內(nèi)核根據(jù)硬件環(huán)境做出系統(tǒng)初始化設(shè)置,并將CPU轉(zhuǎn)讓給yaffs2文件系統(tǒng)運(yùn)行管理。至此,Linux系統(tǒng)成功的啟動起來。下圖1為bootloader的啟動過程。圖1BootLoader
5、啟動流程在我們移植的BootLoader中,由于XC7Z020-CLG484-1包含了可編程邏輯(PL)和處理系統(tǒng)(PS)兩個部分,所以它的啟動過程與一般的BootLoader稍有不同。BootLoader在它的啟動過程中需要負(fù)責(zé)配置可編程邏輯(PL)和處理系統(tǒng)(PS)這兩個部分。使用Xilinx官方提供的SDK生成的BOOT.BIN文件包含了fsbl(firststagebootloader)文件、system.bit文件和uboot.elf文件,其中fsbl文件主要用來加載system.bit并且配置處理系統(tǒng)(PS),而syst
6、em.bit文件起到了配置可編程邏輯(PL)的作用,注意該文件其實并不是必要的,如果在生成BOOT.BIN的過程中缺少該文件,那么PL部分得不到配置,那么我們只是相當(dāng)于把XC7Z020-CLG484-1當(dāng)成ARM來使用。之后系統(tǒng)開始加載ssbl(secondstagebootloader)到RAM中,即uboot.elf文件,它主要作用是加載內(nèi)核鏡像到RAM中。如下圖所示。1、生成uboot.elf文件Uboot源碼的主要目錄及其描述cpu與處理器相關(guān)的文件。每個子目錄中都包括cpu.c和interrupt.c、start.S、u-
7、boot.lds。cpu.c:初始化CPU、設(shè)置指令Cache和數(shù)據(jù)Cache等interrupt.c:設(shè)置系統(tǒng)的各種中斷和異常start.S:是U-boot啟動時執(zhí)行的第一個文件,它主要做最早期的系統(tǒng)初始化,代碼重定向和設(shè)置系統(tǒng)堆棧,為進(jìn)入U-boot第二階段的C程序奠定基礎(chǔ)。u-boot.lds:鏈接腳本文件,對于代碼的最后組裝非常重要。board已經(jīng)支持的所有開發(fā)板相關(guān)文件,其中包含SDRAM初始化代碼、Flash底層驅(qū)動、板級初始化文件。其中的config.mk文件定義了TEXT_BASE,也就是代碼在內(nèi)存的實際地址,非常重
8、要。common與處理器體系結(jié)構(gòu)無關(guān)的通用代碼,U-boot的命令解析代碼/common/command.c、所有命令的上層代碼cmd_*.c、U-boot環(huán)境變量處理代碼env_*.c等都位于該目錄下drivers包含幾乎所有外圍芯