AT91Bootstrap是bootloader的第二階段,緊接在ROM boot之後,主要負責硬體的初始化及配置,例如clock PIO DRAM等等的配置,以及複製Flash or SD card的uboot到RAM上
ROM boot流程
板子一上電即開始執行ROM code,首先會先確認NAND chip select(JP5)的配置
若為1(short)則會開始從SPI CS0 flash、SD card、NAND flash、SPI CS1 flash、EEPROM照順序尋找是否有可使用的bootstrap(註1),若有的話則讀取一份到SRAM且跳過去,若沒有任何可使用的bootstrap則進入SAM-BA監控模式
若為0(open)則會直接進入SAM-BA監控模式
進入SAM-BA模式則可藉由相關工具將程式燒到flash or EEPRM
註1: sama5d3-xplained僅支援nand flash或sd card boot
前置作業
要build在開發版上跑的程式必須先有cross compiler,而sama5d3是ARM Cortex-A5的CPU,因此用的gcc如下
sudo apt-get install gcc-arm-linux-gnueabi
安裝完cross compiler之後必須下載bootstrap的src code(當然必須先有git相關指令,這部份請自行安裝)
git clone git://github.com/linux4sam/at91bootstrap.git
下載完成後進入at91bootstrap資料夾,即可使用make相關指令產生.config檔以及二進位檔
註2: 也可建立完整的toolchain來得到cross-compile gcc
建置程式
因為Sama5d3預設本來就是跑Linux的,因此建置at91bootstrap過程和Linux的bootstrap/uboot基本上沒什麼太大的不同
你可以在抓下來的程式碼當中的board/sama5d3_xplained資料夾內發現四個default configuration files,如下
sama5d3_xplainednf_linux_image_dt_defconfig
sama5d3_xplainednf_uboot_defconfig
sama5d3_xplainedsd_linux_image_dt_defconfig
sama5d3_xplainedsd_uboot_defconfig
nf代表從nand flash讀取,sd代表從sd card讀取
linux代表讀取linux kerenel到RAM,dt代表讀取dtb到RAM,uboot代表讀取uboot到RAM
要使用怎樣的configuration file需看需求決定,不過從檔案當中可以發現也可以選擇不讀取uboot直接讀取kernel的方式帶起linux
一般我們都使用flash且帶uboot的方式,在最上層的資料夾裡輸入以下make指令可產生.config檔
make mrproper
make sama5d3_xplainednf_uboot_defconfig
另外也可以使用以下指令進行產生客製化的.config檔,細部使用不在此篇敘述
make menuconfig
最後輸入以下指令,會在最上層目錄中產生一個binaries資料夾,裡面包含了bin檔及elf檔,將bin檔放置flash當中的bootstrap位置即可在ROM code執行完成後,跳到此段程式執行
make CROSS_COMPILE=arm-linux-gnueabi-
燒錄到nandflash
建置完bootstrap之後可看到最上層目錄多出了一個binaries資料夾,裡面的sama5d3_xplained-nandflashboot-uboot-3.8.5.bin即是我們要燒錄到flah的檔案
我們可以到atmel官網下載SAM-BA工具,檔名為SAM-BA 2.16 for Linux,下載完之後解壓縮可得到一sam-ba_cdc_linux資料夾,裡面的執行檔(sam-ba or sam-ba_64)即是我們要使用的工具
首先先把NAND chip select(JP5)設為0接著RESET,若從UART看到RomBoot
的log代表成功進入sam-ba監控模式,接著必須把JP5再設回1
接下來要啟動sam-ba,正常打開應可看到Select connection有相關資訊,若沒有的話可能是權限問題,可以用sudo開啟此檔案
1 | sudo ./sam-ba |
開啟後畫面如下,將板子選至at91sama5d3x-xplained後按Connect
將標籤頁選至NandFlash,Scripts選擇Enable NandFlash,之後按Execute,沒看到紅色字代表成功
現在要把bootstrap燒到nandflash裡了,將Scripts選至Send Boot File,之後按Execute再選擇bin檔,一樣沒看到紅色字代表成功
現在bootstrap已經燒好了,可以將sam-ba關掉,且將板子RESET即可看到以下畫面代表成功執行bootstrap了