uboot 是一段裸機代碼,它的實現非常復雜,主要是初始化一些硬件,部署整個計算機系統,將內核讀到內存,根據環境變量去啟動內核,并向內核傳遞參數。它的目標就是啟動內核,內核啟動后它的生命也隨之結束。 u-boot 是 SourceForge 上的開源項目,由一個人發起,然后由整個世界所有感興趣的人共同維護發展而來的一個 bootloader,bootloader 是用來引導和加載內核,向內核傳遞參數的,是內核引導程序的統稱,bootloader 除了 u-boot 還有 bios,LilO,redboot,vivi 等。 Uboot 的源碼存放路徑為“iTOP-STM32MP157 開發板光盤資料\04_TF-A、uboot 和內核源碼\uboot”,如下圖所示: ![]() Uboot 源碼的編譯器和編譯 TF-A 的編譯器相同為 gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf。 將源碼拷貝源碼到“/home/topeet”目錄下,使用如下命令解壓:tar -vxf u-boot-stm32mp-2020.01-r0_20210817.tar.gz (注意,日期后綴名可能會更新)解壓源碼壓縮包,解壓完成之后得到“u-boot-stm32mp-2020.01-r0”文件夾。 使用命令進入 uboot 的源碼如下圖所示:cd u-boot-stm32mp-2020.01-r0/ ![]() 三個個文件分別為編譯的 makefile 文件和 EMMC 和 TF 卡編譯的源碼。 我們以 EMMC 源碼編譯為例(TF 卡的 uboot 鏡像編譯步驟相同),使用命令 cd emmc_u-boot-stm32mp-2020.01/ 進入到對應的源碼目錄下,如下圖所示: ![]() 然后使用命令“./create.sh”進行編譯,如下圖所示: ![]() 編譯過程如下圖所示: ![]() 編譯完成如下圖所示: ![]() 編譯完成之后會在上一級目錄產生 build-trusted 目錄,用來存放編譯生成的文件。而我們所需要的文 件為 u-boot.stm32 如下圖所示: ![]() 至此我們的 uboot 編譯就完成了。然后在 build-trusted 目錄下使用以下命令 cp u-boot.stm32 /home/image/uboot/emmc_emmc_u-boot.stm32 來替換掉燒寫文件中關于 emmc 的 uboot 即可(每個人 image 的路徑都不同,要根據自己的情況來完善命令)。 |