android系统移植emmc记录(总) .
历时一个月,终于成功把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文件
- on init
- sysclktz 0
- loglevel 3
- .... 改变system/bin/下文件执行权限
- chmod 777 /system/bin/*
- ....
on init sysclktz 0 loglevel 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系统了。
-----------------------------------------------------------------------------------------------
注: 因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)