嵌入式開發軟件環境:uboot、kernel、rootfs、data布局分析
uboot+linux的整體方案
開發板的datasheet中都有詳細的地址空間的劃分,其中比較重要的兩塊是:DDR地址空間和Flash地址空間。DDR空間是系統和應用的運行空間,一般由linux系統自身進行使用和管理;Flash空間是系統和應用載體的存放空間,一般需要在使用前進行劃分,由應用開發者進行管理。
簡單的示例和說明。
其中,Flash的整體地址空間為:0x34000000~0x34FFFFFF,共16MB,使用的是Nor Flash芯片。布局需要做的工作是:
- 確定uboot二進制文件的大小,使用的地址范圍
- 確定linux kernel鏡像文件的大小,使用的地址范圍
- 確定rootfs 根文件系統的鏡像文件大小,使用的地址范圍
- 估計整體應用方案所需的空間大小,選擇可使用的地址范圍
完成上述工作后,項目的布局如下:
- uboot:0x34000000~0x34080000, 512KB
- kernel : 0x34080000~0x34180000, 1MB, 文件大小為952.8KB
- rootfs : 0x34180000~0x34700000, 5.5MB, 文件大小為3.85MB
- data : 0x34700000~0x34FFFFFF, 9MB, 文件大小為3.725MB
到這一步已經完成了地址空間的邏輯布局,接下來就是存儲空間的物理布局實現,就是對Flash進行分區,這里可以分成四個區,對應上述四塊軟件,也可以分成三個區:
mtdparts=phys_mapped_flash:0x180000(boot),0x580000(roofs70),0x900000(data)
燒寫鏡像文件
如何將上述相應的鏡像文件下載到或者燒寫到開發板上,也涉及到大批量生成的燒錄方式
- JTAG,或者配套的燒寫器,再加上配套的軟件套件,如CCS,完成uboot的燒寫
- 專門的串口燒寫工具,完成uboot的燒寫
- 在uboot環境下可以使用tftp工具,完成kernel鏡像、rootfs文件、app文件的燒寫
項目中主要是:燒寫器+tftp(uboot一般不修改)
uboot環境中tftp工具的使用
不同的uboot版本命令格式和提供的功能會有所差別,最好是使用前查閱幫助或者參考開發指導手冊,主要的功能有從服務器下載文件和上傳文件到服務器,常見的格式為:
- 下載文件:tftp <addr> <file>
- 上傳文件:tftp <addr> <size> <file>
如果使用的是Nand Flash芯片,下載過程:
- 下載文件到內存地址
- erase Flash上對應的文件存放地址空間
- write 內存地址中的文件內容到Flash上對應的地址空間
如果使用的是Nor Flash芯片,下載過程:
- erase Flash上對應文件的存放地址空間
- 直接下載文件到Flash中對應文件的地址空間中:tftp 0x34180000 rootfs.jffs2
同樣的現在也可以直接從Nor Flash中啟動內核鏡像,而不需要先將其加載到內存再啟動:
setenv bootcmd "bootm 0x34080000"
批量生產的軟件燒錄
進行設備的批量生產階段,肯定不能按照開發階段的過程來進行軟件環境的燒錄,對于大批量來說,這樣做效率太低,而且容易出錯。越簡單、單一的操作效率越高,越不容易出錯。最佳的方式是:一步解決。在此推薦的方式是:
- 按照上面的內容和步驟完成整個軟件環境的布局和構建
- 用tftp工具將整個Flash中的內容全部打包上傳到服務器,得到一個整體方案鏡像
- 使用燒片器燒寫整體鏡像完成批量原始設備的軟件燒錄構建