Linux 之框架學習法

入門級:

Bootloader=Boot(啓動) + loader(加載)= 啓動內核 = 加載和啓動操作系統,確保內核正確加載並啓動,爲操作系統的正常運行創建必要的環境。

Boot 的目的:

最終目的:跳到 C 語言中;爲了 C 語言運行程序會進行一系列的初始化,系統一上電後如何通過一系列的設置讓軟件程序員進入 C 語言 / 更高級語言環境的開發,這個過程就是 boot 的主要目的。

Loader 的目的:

主要目的是開始執行應用邏輯,比如點燈:需要燈的接口開發;串口輸入輸出:需要串口編程;加載 linux 的內核:flash 的編程、網卡的編程、內核啓動前的初始化部分。根據不同的應用會有不同的變化。

1. 執行片外程序:在啓動內核之前會執行一些額外的程序,即片外程序,主要包括:初始化操作、硬件檢測、設置系統參數。目的是確保系統處於正確的狀態,併爲內核的加載和執行創建必要的條件。

2. 啓動內核: BootLoader 的作用就是啓動內核。

3. 生命週期、調用關係:

  1. 啓動階段:
  1. 用戶空間運行:
  1. 系統調用:
  1. 內核態和用戶態:
  1. 關閉和終止:

4. 編譯、燒寫和命令:

Linux 系統要啓動就必須需要一個 bootloader 程序,也就說芯片上電以後先運行一段 bootloader 程序。這段 bootloader 程序會先初始化 DDR 等外設,然後將 Linux 內核從 flash(NAND, NOR FLASH,SD,MMC 等) 拷貝到 DDR 中,最後啓動 Linux 內核。

4.1 uBoot 編譯步驟

①解壓 uboot 源碼(官方網站下載):

tar -vxjf uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2

②編譯 uboot 的命令:

#ARCH=arm表示設置目標爲arm架構,相當於make distclean,清除工程
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
#配置uboot,配置文件爲mx6ull_14x14_evk_emmc_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig
#V=1用於設置編譯過程中的信息輸出級別,相當於make -j12,即使用12核來編譯uboot
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12 
##########################################################################
#每次編譯uboot都需要輸入一長串命令
#爲了簡單起見,建立一個shell腳本文件,將這些命令寫到shell腳本里
#執行shell腳本即可完成編譯工作
#新建mx6ull_evk_emmc.sh腳本文件
##########################################################################
#!/bin/bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12 
##########################################################################
#通過命令“./mx6ull_evk_emmc.sh”編譯uboot

編譯完成以後會生成 u-boot.bin、u-boot.imx 等文件,但是這些文件是 NXP 官方開發板配置生成的,所以接下來將其燒錄到開發板上看看能否使用。

u-boot.bin 是編譯出來的 uboot 二進制文件。uboot 是個裸機程序,因此需要在其前面加上頭部 (IVT 、 DCD 等數據) 才能在 I.MX6U 上執行。

u-boot.imx 是添加頭部以後的 u-boot.bin,u-boot.imx 就是要燒寫到開發板中的 uboot 鏡像文件。

③創建一個 Shell 腳本文件,編寫下列代碼,然後進行可執行權限設置並執行。

#!/bin/bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
chmod 777 mx6ull_tek_emmc.sh
./mx6ull_tek_emmc.sh

4.2 燒寫驗證與測試

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/tsNZBnBCDllxjPcIGcSYYg