ZYNQ + Linux 會擦出怎樣的火花
掃描二維碼
隨時隨地手機看文章
1,組成
ZYNQ上面移植Linux操作系統(tǒng)包括四個部分,uboot,devicetree,kernel,ramdisk.
其中uboot類似于bios,負責對設備進行簡單的初始化,devicetree以樹的形式對zynq相連的硬件設備進行描述,kernel是加載的操作系統(tǒng)內(nèi)核,ramdisk是操作系統(tǒng)啟動之后掛載的文件系統(tǒng)。
2,啟動過程
移植操作系統(tǒng)后zynq的啟動過程如下,首先加載bootrom(zynq中自帶,用戶無法修改),然后執(zhí)行fsbl(這個根據(jù)硬件在sdk中創(chuàng)建),然后執(zhí)行uboot,uboot會將kernel、devicetree和ramdisk載入ddr,跳轉(zhuǎn)到內(nèi)核入口處執(zhí)行,這樣linux就啟動了
對bootrom、fsbl和uboot詳細描述如下
3,uboot設置
uboot可以從xilinx 官方github上面下載,地址是?
主要修改下面幾個地方:http://xilinx.eetrend.com/content/2019/100018437.html
4,devicetree設置
devicetree源文件可以從xilinx官方下載,地址:https://github.com/Xilinx/device-tree-xlnx/releases
將dtsi,dts文件拷入linux系統(tǒng)下,使用dts工具制作devicetree.dtb文件。
如果需要修改devicetree文件。
可以通過dtc工具轉(zhuǎn)換為可讀文件dts,當對dts修改完成后,再次使用dtc工具編譯產(chǎn)生devicetree.dtb即可。
5, 文件系統(tǒng)配置
在文件系統(tǒng)中,如果需要添加用戶自定義的shell腳本或可執(zhí)行程序,可以放在/usr/bin目錄下。如果要設置系統(tǒng)自啟動項,可以在/etc/rc5.d中增加shell腳本。
這里進行了IP地址的配置 cd /home/root ;ifconfig eth0 192.168.x.x
6,內(nèi)核配置
內(nèi)核可以從xilinx官方git下載,地址:
目前l(fā)inux內(nèi)核中已經(jīng)集成了常見的驅(qū)動,驅(qū)動源碼位于drivers文件夾下。針對內(nèi)核的修改位于 arch\arm\configs\xilinx_zynq_defconfig文件中,該文件中定義了內(nèi)核所包含的驅(qū)動程序
7, 常見驅(qū)動
8,啟動文件制作
知識點
PetaLinux (UG1144).
PetaLinux工具集是一個嵌入式Linux系統(tǒng)開發(fā)工具包。它提供了一個多方面的Linux工具流,可以為Xilinx Zynq設備(包括Zynq UltraScale+設備)的Linux操作系統(tǒng)提供完整的配置、構(gòu)建和部署環(huán)境。
PetaLinux工具設計中心提供特定于PetaLinux工具的信息和文檔鏈接。
Bootgen
Xilinx®FPGA和片上系統(tǒng)(SoC)設備通常具有多個硬件和軟件二進制文件,用于引導它們按設計和預期工作。這些二進制文件可以包括FPGA比特流、固件映像、引導加載程序、操作系統(tǒng)和用戶選擇的應用程序,這些應用程序可以用非安全和安全的方法加載
Bootgen 是一個 Xilinx 工具,可以將二進制文件縫合在一起并生成設備引導映像。Bootgen 定義了多個屬性、屬性和參數(shù),這些屬性和參數(shù)是在創(chuàng)建用于 Xilinx 設備的引導映像時輸入的。(UG1283)
BootROM
Bootrom(或Boot ROM)是嵌入處理器芯片內(nèi)的一小塊掩模ROM或?qū)懕Wo閃存。它包含處理器在上電或復位時執(zhí)行的第一個代碼。根據(jù)某些帶式引腳或內(nèi)部保險絲的配置,它可以決定從哪里加載要執(zhí)行的代碼的下一部分以及如何或是否驗證其正確性或有效性。有時它可能包含其他功能,可能在引導期間或之后由用戶代碼使用。
引導程序
Bootloader 就是在操作系統(tǒng)內(nèi)核運行之前運行的一段程序,它類似于 PC機中的 BIOS 程序。通過這段程序,可以完成硬件設備的初始化,并建立內(nèi)存空間的映射圖的功能,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),為最終調(diào)用系統(tǒng)內(nèi)核做好準備。通常,Bootloader 是嚴重地依賴于硬件實現(xiàn)的,特別是在嵌入式中。
Bootloader 的操作模式。大多數(shù)Bootloader 都包含兩種不同的操作模式:“啟動加載”模式和“下載”模式。
啟動加載模式:這種模式也稱為“自主”模式。也就是 Bootloader 從目標機上的某個固態(tài)存儲設備上將操作系統(tǒng)加載到 RAM 中運行,整個過程并沒有用戶的介入。這種模式是嵌入式產(chǎn)品發(fā)布時的通用模式。
下載模式:在這種模式下,目標機上的 Bootloader 將通過串口連接或網(wǎng)絡連接等通信手段從主機(Host)下載文件,比如:下載內(nèi)核映像和根文件系統(tǒng)映像等。從主機下載的文件通常首先被 Bootloader 保存到目標機的 RAM 中,然后再被 Bootloader 寫到目標機上的FLASH 類固態(tài)存儲設備中。Bootloader 的這種模系統(tǒng)是在更新時使用。工作于這種模式下的Bootloader 通常都會向它的終端用戶提供一個簡單的命令行接口。
Bootloader負責查找和加載應該在芯片上運行的最終操作系統(tǒng)或固件。與bootrom的一個主要區(qū)別是它通常在可寫閃存中,可以更換或升級。
有時bootrom可以執(zhí)行引導加載程序的工作。例如,OMAP的bootrom足夠復雜(它可以解析FAT32?。?,你可以加載它并直接啟動Linux內(nèi)核。
但是,在許多情況下,使用單獨的引導加載程序,或者因為bootrom不夠(或不存在),或者因為需要額外的靈活性。它可以非常簡單(從RAM中的固定閃存位置加載內(nèi)核并跳轉(zhuǎn)到它),或者可能更復雜。例如, 的U-Boot 就像一個迷你操作系統(tǒng)本身 - 它有一個控制臺,一些命令,允許你打破啟動過程,例如修改內(nèi)核命令行參數(shù),甚至從不同的位置(SD / MMC或USB)加載內(nèi)核,運行一些測試等等。
當您擁有或多或少復雜的操作系統(tǒng)時,通常會使用引導加載程序,在啟動之前可能需要進行一些設置。
在最簡單的芯片上可能根本沒有引導ROM或引導加載程序 - 它們只是嘗試從固定的啟動地址獲取和執(zhí)行指令。事實上,今天大多數(shù)x86芯片都是這樣工作的 - 他們只是開始在FFFFFFF0上執(zhí)行代碼,期望芯片組已經(jīng)映射了那里的BIOS閃存芯片。在這里,您可以說BIOS是引導加載程序(盡管它也為操作系統(tǒng)提供服務,類似于bootrom)。





