嵌入式開發涉及硬件和軟件兩部分,我的目前主要是作嵌入式軟件部分,使用uboot+linux的總體方案。這裏所說的「嵌入式軟件環境」,不是指宿主機上的嵌入式開發環境,而是指目標機中的運行軟件環境,只是簡要介紹一種佈局及相應的實現步驟。java
開發板的datasheet中都有詳細的地址空間的劃分,其中比較重要的兩塊是:DDR地址空間和Flash地址空間。DDR空間是系統和應用的運行空間,通常由linux系統自身進行使用和管理;Flash空間是系統和應用載體的存放空間,通常須要在使用前進行劃分,由應用開發者進行管理。在這裏以我如今正在作的項目進行簡單的示例和說明。linux
其中,Flash的總體地址空間爲:0x34000000~0x34FFFFFF,共16MB,使用的是Nor Flash芯片。佈局須要作的工做是:shell
完成上述工做後,項目的佈局以下:bash
到這一步已經完成了地址空間的邏輯佈局,接下來就是存儲空間的物理佈局實現,就是對Flash進行分區,這裏能夠分紅四個區,對應上述四塊軟件,也能夠分紅三個區:服務器
1 |
mtdparts=phys_mapped_flash:0x180000(boot),0x580000(roofs70),0x900000(app) |
這裏主要是指如何將上述相應的鏡像文件下載到或者燒寫到開發板上,也涉及到大批量生成的燒錄方式,我在第一個項目時就在這一塊糾結過,如今算是後知後覺。
在開發過程當中有不少的選擇,主要的有:app
基本就是上面的一個過程,在個人第一個項目中,主要是使用:JTAG+CCS+tftp的方式,如今項目中則是:燒寫器+tftp(uboot通常不修改)。工具
不一樣的uboot版本命令格式和提供的功能會有所差異,最好是使用前查閱幫助或者參考開發指導手冊,主要的功能有從服務器下載文件和上傳文件到服務器,常見的格式爲:佈局
1 |
- 下載文件:tftp <addr> <file> |
2 |
- 上傳文件:tftp <addr> <size> <file> |
在個人第一個項目中,使用的是Nand Flash芯片,下載過程:測試
1 |
- 下載文件到內存地址 |
2 |
- erase Flash上對應的文件存放地址空間 |
3 |
- write 內存地址中的文件內容到Flash上對應的地址空間 |
當前項目中,使用的是Nor Flash芯片,下載過程:spa
1 |
- erase Flash上對應文件的存放地址空間 |
2 |
- 直接下載文件到Flash中對應文件的地址空間中:tftp 0x34180000 rootfs.jffs2 |
由於手上如今沒有Nand Flash芯片的開發板,無法測試第二種方式是否可使用Nand Flash環境。
一樣的如今也能夠直接從Nor Flash中啓動內核鏡像,而不須要先將其加載到內存再啓動:
1 |
setenv bootcmd "bootm 0x34080000" |
進行設備的批量生產階段,確定不能按照開發階段的過程來進行軟件環境的燒錄,對於大批量來講,這樣作效率過低,並且容易出錯。越簡單、單一的操做效率越高,越不容易出錯。最佳的方式是:一步解決。在此推薦的方式是: