在已得到Android的烧录映像后,操作如下:DNW中设置加载uboot地址:0x57e00000,先将CFG3跳线配置到第三向左第四向右,从NOR FLASH启动。
1,u-boot
开机上电,烧录一次UBOOT后,按键盘进入命令状态,输入dnw,第二次烧入u-boot文件,因为要烧入NAND中。
执行nand erase 0 40000;nand write c0000000 0 40000
2,kernel
输入dnw,烧录后,执行nand erase 600000 300000;nand write c0000000 600000 300000
3.ram-disk
输入dnw,烧录后,执行nand erase 900000 100000;nand write c0000000 900000 100000
4,android image - system.img
输入dnw,烧录后,执行nand erase a00000 4300000;nand write.yaffs c0000000 a00000 3057000,注意:size大小依实际而定。
5,android user data - userdata.img
输入dnw,烧录后,执行nand erase 5a00000 2600000;nand write.yaffs c0000000 5a00000 840
6,boot command
setenv bootcmd 'nand read 50008000 600000 300000;nand read 50800000 900000 100000;bootm 50008000 50800000'
saveenv
7,断电,重新将CF3跳线配置到第三右第四左从NAND启动,上电即可。
=============================================================
(1)android源码编译后得到system.img,ramdisk.img,userdata.img映像文件。其中, ramdisk.img是emulator的文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,emulator负责加载这3个映像文件后,会把system.img和userdata.img分别加载到 ramdisk文件系统中的system和 userdata目录下。
ramdisk根文件系统中包含一些对于启动android的很重要的文件,比如内核启动完后加载的第一个进程init、一些重要的配置文件等,总之它控制着整个android的启动。根据init.rc,init.goldfish.rc来初始化并装载系统库、程序等直到开机完成。init.rc脚本包括了文件系统初始化、装载的许多过程。init.rc的工作主要是:
1)设置一些环境变量
2)创建system、sdcard、data、cache等目录
3)把一些文件系统mount到一些目录去,如,mount tmpfs tmpfs /sqlite_stmt_journals
4)设置一些文件的用户群组、权限
5)设置一些线程参数
6)设置TCP缓存大小
生成的system.img,ramdisk.img,userdata.img映像文件是采用cpio打包、gzip压缩的,可以通过file命令验证:
file ramdisk.img,输出: ramdisk.img: gzip compressed data, from Unix, last modified: Wed Mar 18 17:16:10 2009 ,我们可以学习怎么样把 ramdisk.img解压出来。将ramdisk.img复制一份到任何其他目录下,将其名称改为ramdisk.img.gz,并使用命令
gunzip ramdisk.img.gz,然后新建一个文件夹,叫ramdisk吧,进入,输入命令cpio -i -F ../ramdisk.img,这下,你就能看见并操作ramdisk里面的内容了。然后把Android源码编译后生成的system和 userdata里的文件分别复制到 ramdisk/system和ramdisk/userdata下。这样就得到一个文件系统了。
(2)对于android系统文件夹,比如out/target/product/smdk6410/system目录,说明如下:
system/app 这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是/data/文件夹中。
system/bin 这个目录下的文件都是系统的本地程序,从bin文件夹名称可以看出是binary二进制的程序,里面主要是Linux系统自带的组件。
system/etc 从文件夹名称来看保存的都是系统的配置文件,比如APN接入点设置等核心配置。
system/fonts 字体文件夹,除了标准字体和粗体、斜体外可以看到文件体积最大的可能是中文字库,或一些unicode字库。
system/framework 主要是一些核心的文件,从后缀名为jar可以看出是是系统平台框架。
system/lib lib目录中存放的主要是系统底层库,如平台运行时库。
system/media 铃声音乐文件夹,除了常规的铃声外还有一些系统提示事件音
system/usr 用户文件夹,包含共享、键盘布局、时间区域文件等。
===========================================================================================
针对MTK的安卓平台,现在很多工具都可以直接修改IMG来达到内置不同壁纸/APK/开机LOGO等内容,这是如何完成的呢?一个基本的操作是需要对已有的IMG内容进行解压,修改后在打包。下面学习解压和打包的过程。
MTK的CODE中已内置解压和打包工具,在alps/mediatek/build/tools/images/,目录下的工具可以整体拷贝到一个目录下,然后编辑~/.bashrc文件把tool_dir添加到$PATH环境变量中,然后source ~/.bashrc使设置生效;这样在任何目录下都可以解压打包。
(1)image解包,使用的是diff.pyc
格式是diff.pyc -o <output_dir> <image_file>
- <output_dir>是自己定义将要解包的目录,可以是绝对路径或相对路径。
- <image_file>是被解包的image,name并不限定于boot.img/recovery.img/system.img/userdata.img,这里不会检查image name,而是会自动判断image的类型;如果解包的是boot.img和recovery.img,额外在<output_dir>的同级目录下还会生成kernel image,命名方法是<output_dir>-kernel。如下,boot.img解压后得到两个,一个ramdisk根文件系统,另一个是ramdisk-kernel,是真正的内核。
diff.pyc也可以同时对sparse(透过build flow编译生成)和raw ext4(透过flash tool从手机readback)格式的image进行解包操作。
(2)image打包,使用的是pack.pyc。打包命令格式分两种,分别针对boot.img/recovery.img和system.img/userdata.img
A,针对第一种,格式是pack.pyc <kernel> <ramdisk> <build_version> <boot/recovery>
- <kernel> 是kernel image文件
- <ramdisk> 包含ramdisk rootfs的目录
- <build_version> 可以是任意一个15个字符的字符串,可以只填入0.
- <boot/recovery>表示生成的是boot image还是recovery image,只选其一。
- 执行命令后会在<ramdisk>同级目录下生成<ramdisk>.img文件,这就是生成的boot.img或recovery.img。如下,把刚解压的重新打包成ramdisk.img,烧写时需要重命名成boot.img或recovery.img.
B,针对第二种,格式是pack.pyc -<partition_size> <source_dir>
- -<partition_size>表示要生成的image分区的size,比如-600就表示600MB。具体分区的size,请参考download时使用的scatter file(MT65XX_Android_scatter.txt),查看其中ANDROID,USRDATA, CACHE分区的大小;
- <source_dir>目录的名字只能是system, data, cache其中一个,目前不接受其他的目录名,生成的image分别对应的是system.img, userdata.img和cache.img
例如pack.pyc -600 system, 把当前目录下的system目录中的内容打包成partition size为600MB的system.img
参考原文:http://blog.csdn.net/knock/archive/2009/12/03/4931781.aspx