**:
1.前言
打包的好處:
其他平台是將kernel/uboot/rootfs編譯好後直接分開燒寫到flash中,分開的話必然需要使用者在燒寫的時候,指定燒寫的bin檔案。把這些整合到乙個韌體檔案中的話,在燒寫這些到flash的時候會自動去韌體裡面搜尋需要的內容,這樣對使用者更透明。
打包指令碼為lichee/tools/pack/pack,韌體打包主要做3件事:
1. 將需要的資源檔案和二進位制檔案拷貝到指定目錄(lichee/tools/pack/out)
2. 對某些檔案進行必要的更新操作(如boot0/uboot頭部資訊等)
3. 將lichee/tools/pack/out目錄下的檔案按照image.cfg、sys_partition.fex進行打包處理
2.拷貝檔案
拷貝的檔案型別分為幾類:工具檔案、配置檔案、boot0/uboot檔案。
工具檔案:
split_***x.fex
usbtool_test.fex
cardscript.fex 製作量產tf卡時指定boot0和uboot燒寫到tf卡的位置
cardtool.fex
usbtool.fex
aultls32.fex
配置檔案:
common/toc/toc1.fex
common/toc/toc0.fex
common/toc/boot_package.fex
common/dtb/sunxi.fex
common/imagecfg/image_linux.cfg linux韌體配置表,表示生成韌體必要哪些部件,當lichee/tools/pack/out目錄下沒有所有指定的部件時,打包韌體將失敗 。很重要,只針對生成linux韌體
common/partition/sys_partition_dragonboard.fex 規定了生成dragonboard韌體時mbr中分割槽資訊 ,只針對dragonboard韌體
common/partition/sys_partition_linux.fex 固定了生成linux韌體時mbr中分割槽資訊, 很重要,只針對linux韌體
chips/$/configs/default/* env.fex android韌體的env分割槽
image.cfg android韌體配置表
env_dragon.fex dragonboard韌體env分割槽
chips/$/configs/$/*.fex *.cfg
sys_config.fex 使用者配置資訊
sys_partiton.fex android韌體的分割槽配置表
test_cofig.fex dragonboard韌體的測試配置檔案
boot0/uboot檔案:
boot0_nand.fex 有nand驅動的boot0
boot0_sdcard.fex 有mmc驅動的boot0
boot0_spinor.fex 有spinor驅動的boot0
bl31.bin
scp.bin
u-boot-spinor-*.bin 經過裁剪,適用於spinor平台的uboot
u-boot-*.bin 普通的uboot
fes1-*.bin usb燒寫階段初始化dram的,類似於boot0 ota相關的boot檔案
3.更新檔案
到這裡,使用者的配置資訊還沒有放入到編譯好的bin檔案中。但是系統起來的某些關鍵部件的配置卻在使用者配置檔案裡面,比如dram/emmc/nand等的初始化引數就放在sys_config.fex裡面。所以需要將這些資訊塞到boot0/uboot頭部。
轉換配置檔案
轉換配置主要的指令碼**為:
script sys_config.fex > /dev/nullscript
sys_partition.fex > /dev/null
該指令碼將使用者易讀的.fex檔案轉為**易操作的.bin檔案。最後就會生成sys_config.bin和sys_partition.bin兩個檔案,後面boot0和uboot就可以通過標準介面去讀取sys_config.bin中使用者配置。
更新boot0引數
boot0開機後會被自動從介質中讀取到sram中,它主要的功能包括:初始化串列埠、初始化記憶體、讀取uboot。所以必須將sys_config.fex中串列埠引數、dram引數、jtag引數以及storage引數寫入到boot0中(boot0_file_head_t結構體中定義)
更新uboot引數
和boot0類似,也需將sys_config.fex某些配置值寫入到u-boot中。主要包括:dram引數、cpu執行頻率和電壓、串列埠配置、工作模式(量產和啟動)、儲存介質型別(nand/emmc/spinor)、nand gpio資訊、sdcard gpio資訊,在spare_boot_data_head結構體中有詳細說明。
生成mbr檔案
mbr分割槽記錄了韌體中有多少個分割槽以及每個分割槽的起始位址和大小。它是使用下面的命令生成的:
update_mbr sys_partition.bin n(n為mbr的份數)
執行完這個命令後,將會生成sunxi_mbr.fex這個檔案。
生成env分割槽檔案
uboot優先使用env分割槽中的環境變數,如果沒有env分割槽,則使用預設環境變數。現在針對camdroid和android平台
4. 生成韌體
經過上面的操作後,即可以執行打包韌體的操作了
dragon image.cfg sys_partition.fex
image.cfg主要功能是:
- 功能1 確定韌體的必須組成部件 如果pack/out目錄下沒有image.cfg中指定的filename存在,則打包韌體就會失敗
- 功能2 和sys_partiton配合生成韌體索引表
當發生了下面兩種情況,將執行韌體打包流程:
(1)在lichee頂層目錄執行./build.sh pack
(2)在android頂層目錄執行 pack (可帶引數)
全志平台開發坑點
全志平台接觸得不少,但是都是燒一下韌體。最近才涉及到編譯系統原始碼,與其他平台有很大的不同。這裡小結一下。lichee很強大,也很迷惑人,你不會知道如何make menuconfig去修改核心配置 在裝置樹之前還有乙個sys config.fex,這個是這個平台搞得配置檔案,裝置樹是由這個檔案生成的...
全志編譯環境分析
全志編譯環境分析 cqa64 ubuntu16.04 bv3 20180515 編譯環境的根目錄 常用環境變數值 buildroot out common buildroot out sun50iw1p1 ubuntu16 common buildroot linux 3.10 linux 3.10...
全志平台linux啟動流程分析
2015 08 02 16 31 一 brom階段 機器上電之後會執行固化在brom裡面的一段引導程式,這個程式會依次遍歷所有支援的啟動介質,直到找到第乙個支援的。目前支援的啟動介質是sd mmc卡 nand和spinor。當程式初始化啟動介質成功後,就從固定位置讀入bootloader的boot0...