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文件

  1.  on init  
  2.   
  3. sysclktz 0  
  4.   
  5. loglevel 3  
  6. ....  改变system/bin/下文件执行权限  
  7. chmod 777 /system/bin/*  
  8. ....  
 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系统了。

 

 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)

 

posted @ 2013-09-05 16:37  莫回头  阅读(989)  评论(0编辑  收藏  举报