曆時一個月,終於成功把android系統移植到emmc上啟動。
開發板:s5pv210
系統:android 2.34
目的:使用emmc代替 nand flash
燒寫命令:fastboot sdfuse
分區命令: fdisk
vfat格式命令:fatformat
Ext3格式命令:ext3format
--------------------------------------------------------------------------------
1:android系統移植emmc記錄(1)--製作SD卡啟動模式
2:android系統移植emmc記錄(2)--u-boot燒寫emmc檔案方式
------------------------------------------------------------------------------------------------------------------------
如果android產生的檔案是ext3格式(如何產生,請網上瞭解,我自己的只是手動產生),則應該可以啟動系統,基本移植成功。然而,這時三星的基本移植方式,對於我手上的源碼,卻並不合適,測試無法啟動系統,停止在
mount根檔案系統後,無法找到/init 檔案。
經分析,基本屬於kernel沒有擷取到正確的ramdisk分區地址,至此開始分析u-boot源碼了。
--------------------------------------------------------------------------------------------------------------------
3:android系統移植emmc記錄(3)--sd/mmc初始化分析
4:android系統移植emmc記錄(4)--fdisk命令分析
5:android系統移植emmc記錄(5)--fastboot命令分析
6: android系統移植emmc記錄(6)--sd卡燒寫檔案分析
--------------------------------------------------------------------------------------------------------------------
u-boot基本可初始化emmc和sd了,並能夠通過sd來燒寫emmc。
根據【2】項燒寫android編譯出來的ext3檔案,並不能成功執行到Init進程,出現如下錯誤:
Kernel panic - not syncing: No init found. Try passing init= option to kernel.
在此問題上一直卡了很久,分析ramdisk燒寫到emmc的分區裡。而kernel掛載的分區並不含ramdisk分區,只有fdisk分的各個區。
所以目前的做法是:不把ramdisk檔案獨立出來,跟system檔案整合成一個ext3檔案,燒寫到system分區上,讓kernel掛載上,成功執行到
init進程,並啟動了android系統。
原理:根據init.rc指令檔發現,ramdisk只是把system分區mount到ramdisk分區檔案下的system,所以把system檔案全部考到root/ system下
修改init.rc指令檔,最後產生ext3檔案就行了。
方法:
1:修改init.rc檔案
[java]
view plaincopyprint?
- on init
-
- sysclktz 0
-
- loglevel 3
- .... 改變system/bin/下檔案執行許可權
- chmod 777 /system/bin/*
- ....
on initsysclktz 0loglevel 3.... 改變system/bin/下檔案執行許可權chmod 777 /system/bin/*....
on fs
# mount mtd partitions
# Mount /system rw first to give the filesystem a chance to save a checkpoint
#mount yaffs2 mtd@system /system 屏蔽掉system分區掛載,因目前分區已經有system
#mount yaffs2 mtd@system /system ro remount
mount ext3 /dev/block/mmcblk0p3 /data nosuid nodev
mount ext3 /dev/block/mmcblk0p4 /cache nosuid nodev
# mount ext4 /dev/block/mmcblk0p3 /data nosuid nodev
# mount ext4 /dev/block/mmcblk0p4 /cache nosuid nodev
chown setprop等命令不要放在service 下面,不然會提示 init :錯誤資訊。
2: 把system裡面的所有檔案考入到root/ system/ 檔案下。修改下/root/system/bin/ 裡面檔案的執行許可權。
3: 使用工具 : mkext3image root system.ext3 產生ext3檔案。
4: 編譯kernel ,支援 ext3 檔案系統。重建zImage
5: 燒寫:
fastboot 方式:
1:把 u-boot.bin zImage system.ext3 檔案放入 fastboot工具目錄下
2:通過moviNAND 工具把u-boot.bin韌體到sd裡,然後設定板子從SD卡模式啟動。
3:板子串連usb,在PC上運行 --> cmd ,
cd e:\fastboot\
e:\fastboot\ : fastboot flash bootloader u-boot.bin
fastboot flash kernel zImage
fastboot flash system system.ext3
sdfuse 方式:
1:把 u-boot.bin zImage system.ext3 檔案放入 SD卡下sdfuse目錄下
2:通過moviNAND 工具把u-boot.bin韌體到sd裡,然後設定板子從SD卡模式啟動。
3:進入命令列:
輸入# : sdfuse flash bootloader u-boot.bin
sdfuse flash kernel zImage
sdfuse flash system system.ext3
6: 修改啟動參數:
set bootcmd "movi read kernel c0008000; bootm c0008000"
set bootargs "console=ttySAC2,115200 noinitrd root=/dev/mmcblk0p2 rw init=/init "
system 分區是 mmcblk0p2 , rw :表示 system分區可讀可寫,一定要加上去,不然不能在system上安裝軟體了。
7:啟動系統,可以進入android系統了。
fastboot工具下載
-----------------------------------------------------------------------------------------------
註: 因emmc介面跟sd一樣,我們可以移植android檔案系統到SD卡上,讓android在SD卡上跑。
方法:
1:用winpm 軟體把SD卡分3個區,並預留10M空間,格式為ext3,分別為 system userdata cache 分區。
2:用moviNAND 工具把支援從SD卡啟動的u-boot燒錄sd裡面。注意:此u-boot不能開啟 USE_MMC0,只能開啟 USE_MMC2。
也就是支援SD,不支援emmc。所以,開發板上是NANDflash的就可以做這種卡了。帶emmc的就不行。
3:然後通過ubuntu 系統,mount上 system分區,並把root 檔案下的所有檔案考入 system分區裡。
4:設定板子為SD卡啟動模式,插入sd卡,改變bootargs 參數,指定root 為system的分區裝置。
5:進入系統。
會出現的錯誤:
注意這條:表示你的sd卡處在防寫保護狀態了。所以就打不開裝置了。
mmcblk0: mmc0:aaaa SU04G 3.69 GiB (ro)
[ 2.439190] mmcblk0: p1 p2 p3 p4
[ 2.479149] VFS: Cannot open root device "mmcblk0p2" or unknown-block(179,2)
[ 2.484751] Please append a correct "root=" boot option; here are the available partitions:
[ 2.493070] 1f00 256 mtdblock0 (driver?)
[ 2.497978] 1f01 5120 mtdblock1 (driver?)
[ 2.502917] 1f02 5120 mtdblock2 (driver?)
[ 2.507856] 1f03 3072 mtdblock3 (driver?)
[ 2.512811] 1f04 112640 mtdblock4 (driver?)
[ 2.517735] 1f05 81920 mtdblock5 (driver?)
[ 2.522675] 1f06 839680 mtdblock6 (driver?)
[ 2.527620] b300 3872256 mmcblk0 driver: mmcblk
[ 2.532829] b301 3256302 mmcblk0p1
[ 2.537059] b302 124806 mmcblk0p2
[ 2.541306] b303 359290 mmcblk0p3
[ 2.545552] b304 105896 mmcblk0p4
[ 2.549801] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,2)
http://blog.csdn.net/yunfly163/article/details/7495035
原文地址