在已得到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命令验证:
fileramdisk.img,输出:ramdisk.img: gzip compressed data, from Unix, last modified: Wed Mar 18 17:16:10 2009,我们可以学习怎么样把ramdisk.img解压出来。将ramdisk.img复制一份到任何其他目录下,将其名称改为ramdisk.img.gz,并使用命令
gunzipramdisk.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>的同级目录下还会生成kernelimage,命名方法是<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

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. Android(安卓)源码下载编译
  6. 在Android(安卓)Studio 2.3 中开发运行 Cordova 8.0.0项目
  7. apk的优化方案-1
  8. Android(安卓)View的layout_width属性是如何解析的
  9. Android学习系列之(二)项目目录结构基本介绍

随机推荐

  1. 【Android笔记 七】Android(安卓)Sensor
  2. Android(安卓)NDK支持STL的一些注意事项
  3. 浅谈Android中的BaseAdpater
  4. AppCode iOS 应用开发 开发环境
  5. Android学习整理 -1- Fragment 学习
  6. android apk 自我保护技术-加密apk
  7. Android(安卓)MVP开发模式 google 官方Mv
  8. 开源自己写的刷票器软件(windows和Android
  9. Android应用程序开发以及背后的设计思想
  10. Android(安卓)10个快速开发框架:Afinal、T