玩轉Zynq連載1——Zynq的linux啟動(dòng)過(guò)程 更多資料共享 鏈接:https://share.weiyun.com/5s6bA0s ![]() 簡(jiǎn)單的,以ug585中的一張圖來(lái)看,從大的方面說(shuō),Zynq中liunx的啟動(dòng)可以分為硬件初始化和軟件啟動(dòng)。而硬件初始化,分別是上電(POR)、所有寄存器復位和Zynq芯片的啟動(dòng)模式引腳采樣、外設初始化禁能以及PLL的使能。而軟件啟動(dòng),分為3個(gè)階段,分別是stage 0 - BootROM、stage 1 - FSBL和stage 2 - 操作系統啟動(dòng)。 ![]() 硬件初始化相對簡(jiǎn)單明了,不多費口舌。下面我們看看軟件啟動(dòng)過(guò)程。 ![]() BootROM是Zynq固化好的,換句話(huà)說(shuō),BootROM一定在Zynq芯片內部。雖然沒(méi)有看到哪個(gè)xilinx官方文檔很明確的提到BootROM存放在哪個(gè)位置,但沒(méi)關(guān)系,這并不重要。從功能上看,BootROM所實(shí)現的功能,如圖紅色箭頭所示,從SDIO外設所連接的外部SD卡(假設我們的FSBL和linux內核都在SD中)讀取的FSBL代碼,通過(guò)中央互聯(lián)單元(Central Interconnect)和片內存儲器互聯(lián)單元(OCM Interconnect)送到256KByte的片內存儲器中被處理器(Application Processor Unit)執行。 ![]() 如圖所示,stage 1的FSBL所做的最重要的事情,就是將下一個(gè)階段stage 2的代碼(Liunx的uboot代碼)從SD卡,經(jīng)過(guò)SDIO外設接口、片內存儲器互聯(lián)單元(OCM Interconnect)和DDR3存儲控制器(DDR3 Memory Interface),送到外部的DDR3芯片中運行起來(lái)。 ![]() stage 2可以直接運行基于BSP的裸機程序(不帶任何操作系統),也可以讀取操作系統的啟動(dòng)引導程序(Second Stage Boot Loader, SSBL),對于linux操行系統而言,這個(gè)階段運行的就是uboot。 接下來(lái)我們可以通過(guò)用于zynq運行linux的SD卡來(lái)理解接下來(lái)的stage1和stage 2的啟動(dòng)過(guò)程。 在Ubuntu中,我們打開(kāi)SD卡,可以看到part(BOOT)0和part1(ROOTFS)兩個(gè)分區。如圖所示,part1(ROOTFS)類(lèi)似windows中的C盤(pán),一些常見(jiàn)的軟件工具可以存儲在這里。 ![]() 而part0(BOOT)則通常最少有如下3個(gè)文件。 ![]() 這3個(gè)文件的基本功能如下所述。主要看BOOT.bin這個(gè)文件,它包含了啟動(dòng)過(guò)程stage 1的FSBL、stage 2的uboot和PL配置的bit流,而當linux的uboot起來(lái)以后,它隨后就會(huì )去加載uImage,將linux內核在外部存儲器如DDR3上運行起來(lái)。 ![]() 參考文檔: ug585-Zynq-7000-TRM.pdf的Chapter 6:Boot and Configuration ug821-zynq-7000-swdev.pdf的Chapter 3:Boot and Configuration 更多資料共享 鏈接:https://share.weiyun.com/5s6bA0s |