歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 各大開發板Android燒寫方式總結

各大開發板Android燒寫方式總結

日期:2017/2/28 15:56:39   编辑:Linux教程

現在手頭有幾塊板子,2410、2440都是以前用的,現在主要是用6410,一塊是一個公司的JFJ6410開發板,另外一個是天嵌的6410V1.今天總結一下Mini6410、OK6410、TQ6410以及Real6410這幾個國內買的比較多的開發板燒寫Android的方式。其實主要是燒寫UBI文件系統的方式。之前做嵌入式用的比較多的文件系統是cramfs和yaffs2文件系統。但是隨著Android的流行,燒寫Android系統便多了個更好的選擇,那就是UBI文件系統,UBI相對於cramfs以及yaffs2在性能上的優勢我不清楚,但是至少UBI的壓縮對我們使用開發板學習是個不錯的特性。燒寫一般都使用U-Boot。

首先是友善之臂的Mini6410,它提供了兩種Boot,一種是移植的三星提供U-Boot1.1.6,這個版本不支持UBI文件系統的燒寫,他們自己做了個superboot,支持UBI,但是不開源,沒用過。

然後就是飛凌的OK6410,他們使用的也是三星提供的U-Boot,不支持UBI。所以想出另外的方式來燒寫。他們的燒寫使用了自己的 SD卡燒寫工具:SD_Writer,首先燒寫了一個mmc.bin和一個zImage-sd的文件到SD卡中,前者mmc.bin其實就是用於SD卡啟動的,後者zImage-sd是一個內核文件。我們首先來看看mmc.bin做了哪些事情,從SD卡啟動,進入U-Boot的下載模式,使用printenv打印環境變量,可得:

[plain]
  1. SMDK6410 # printenv
  2. bootargs=rootdelay=0 console=ttySAC0,115200
  3. bootcmd=nand erase;

[plain]

  1. fatload mmc 0:1 0x50008000 u-boot.bin;nand write.uboot 0x50008000 0 0x100000;

[plain]

  1. fatload mmc 0:1 0x50008000 zImage;nand write.e 0x50008000 0x100000 0x500000;

[plain]

  1. movi read kernel 0x50008000;bootm 0x50008000

從上面得bootcmd可以知道做的事情分四步:

1、擦除整個NAND Flash;

2、從SD卡中將u-boot.bin文件下載到內存中,然後燒寫到NAND Flash上;

3、從SD卡中將zImage下載到內存中,然後燒寫到NAND Flash上;

4、從SD卡讀取內核(不是上一步燒寫的zImage,而是之前使用SD卡燒寫工具燒寫的zImage-sd)到內存,然後啟動這個內核。而啟動參數就是上面的bootargs所顯示。

進入這個內核之後,就會進入下面這個命令行,

可能有人會覺得之前燒寫了U-Boot和zImage-sd到SD卡上,並沒有燒寫文件系統,那這個內核怎麼啟動呢?這裡我們看一下命令提示符前面“initramfs”這幾個字符就明白了。

所有的2.6版本linux內核都有一個特殊的文件系統rootfs,是內核啟動的初始始根文件系統,initramfs的文件會復制到rootfs。如 果把initramfs比作種子,那麼rootfs就是它生長的土壤。大部分linux系統正常運行後都會安裝另外的文件系統,然後忽略rootfs。

這下大家就知道了吧,但是由於飛凌沒提供的源文件,所以不知道yjsx這個程序具體是啥,只能通過看燒寫的過程知道了,這裡我就不貼了。主要做的工作就是把拷貝到SD卡中的文件系統燒寫到NAND Flash上,注意,這裡他們燒寫的是yaffs格式,而不是ubi,我猜想他們僅僅是為了方便用戶使用SD卡燒寫(畢竟友善之臂的燒寫方式確實非常好),而不是使用ubi文件系統。

這裡再來說一些Real6410和TQ6410,他們做法類似,Real6410是在NAND分區的時候分了兩個文件系統區,一個是cramfs,一個是真正用到的文件系統區。先啟動內核進入cramfs文件系統,將NAND格式化為UBI格式的,再進行燒寫。同樣,TQ6410也是先掛載NFS文件系統,將NAND格式化UBI,然後進行燒寫。

不過貌似TQ6410V2已經支持了UBI燒寫,這個還沒看。

好了,就這樣吧,簡單記一下,呵呵,不清楚的可以看看幾家公司提供的使用手冊。

Copyright © Linux教程網 All Rights Reserved