现在的位置: 首页 > 综合 > 正文

Android 中的各个Image

2018年04月16日 ⁄ 综合 ⁄ 共 2695字 ⁄ 字号 评论关闭

 

OBJCOPY: objcopy的作用是拷贝一个目标文件的内容到另一个目标文件中。Objcopy使用GNU BFD库去读或写目标文件。Objcopy可以使用不同于源目标文件的格式来写目的目标文件(也即是说可以将一种格式的目标文件转换成另一种格式的目标文件) 对内核的一些解释: 

vmlinuz: 是可引导的、压缩的内核。“vm”代表 “Virtual Memory”。 vmlinuz是可执行 的Linux内核,它位于/boot/vmlinuz; 

vmlinux: 未压缩的内核,是ELF文件即编译出来的最原始的文件; 

Image:  内核映像文件, 其实就是vmlinux的OBJCOPY; 

zImage: 用gzip对vmlinux压缩后的文件的OBJCOPY; 

uImage:是uboot专用的映像文件,它是在zImage之前加上一个长度为64字节的“头”,说明这个内核的版本、加载位置、生成时 间、大小等信息;其0x40之后与zImage没区别; 

对在IM820中这些是如何生成内核的一些说明: 

vmlinux: 由mydroid/kernel/android-2.6.29/Makefile生成: 

在Makfile的526行  all:vmlinux    //可以看出编译内核肯定会得到vmlinux 

Image由Mydroid/kernel/arch/arm/boot/.Image.cmd第一行文件生成 

cmd_arch/arm/boot/Image := arm-none-linux-gnueabi-objcopy -O binary -R .note -R .note.gnu.build-id -R .comment -S  vmlinux  arch/arm/boot/Image  

zImage由 Mydroid/kernel/arch/arm/boot/.zImage.cmd文件的第一行生成 

cmd_arch/arm/boot/zImage := arm-none-linux-gnueabi-objcopy -O binary -R .note -R .note.gnu.build-id -R .comment -S  arch/arm/ boot/compressed/vmlinux arch/arm/boot/zImage 

//compressed/vmlinux的意思是用gzip压缩过的vmlinux 

uImage由Mydroid/arch/arm/boot/.uImage.cmd文件的第一行生成 
cmd_arch/arm/boot/uImage:=/bin/bash   /mnt/sdb1/home/lijl/25.14/mydroid/kernel/android-2.6.29/scripts/mkuboot.sh -A arm -O linux -T kernel -C none -a 0x80008000 -e 0x80008000 -n 'Linux-2.6.29-omap1' -d arch/arm/boot/zImage arch/arm/boot/uImage 

mkuboot.sh 这个脚本其实就是指/home/mid/bin/mkimage这个命令,这个命令是专门给zImage自动加上uboot的用的文件头的;  

P59A的启动方式是: 

开机自动执行ROM code  (TI提供 已经固化)  然后ROM Code可以片选从一个SD卡或者T卡装载入x-loader到Ti芯片自带的RAM  (64K),这是第一级引导程序一般比较小,然后x-loader又把
uboot.bin装载到一个大的外部RAM(256MB)中,这是第二级引导程序,然后由第二级引导程序装入内核 

引导次序依次为:Rom code -> x-loader->uboot.bin->kernel; 

x-loader 的Makefile在 mydroid/bootable/bootloader/ x-loader/Makefile 生成文件是:MLO 

Uboot.bin 的Makefile在 mydroid/bootable/bootloader/ u-boot /Makefile 生成文件是:u-boot.bin

 uImage就是 kernel 

文件系统是通过mydroid/Makefile的make j8生成分别是:

 userdata.img   用户文件系统,其实就是userdata目录的内容 

system.img    系统文件系统,其实就是system目录中的内容 

ramdisk.img   其实就是/文件目录下的内容 

一般烧内核的时候,把内核和根文件系统同时烧入。因此要生成uMulti文件 uMulti = uImage + ramdisk.img 

第一烧录到板子上的文件:

1, MLO, u-boot.in, userdata.img,system.img uMulti  uboot引导环境变量文件;

Uboot环境文件如下,是告诉引导程序一些信息的

“bootdelay 3

bootargs console=ttyS2,115200n8mem=256Mvideoout=omap24xxvout:rotation=0

bootcmd nand unlock; nand read.i 81C00000 0x0200000 0x500000; bootm 81C00000“

下面再描述如何编译recovery.img(这个是在恢复出厂设置,或升级软件时用到的)

编译recovery.img 直接./mydroid下执行make recoveryimage就可以了;

但编译会出错,经过查询可以知道真正的Makefile在./mydroid/build/core目录

在Makefile中用到变量TARGET_NO_KERNEL,要执行TARGET_NO_KERNEL不能为TRUE

修改./vendor/ti/zoom2/BoardConfig.mk:

把TARGET_NO_KERNEL := true

导致我们目前在编译的时候,默认没有生成  recovery.img,

要生成 recovery.img 必须屏蔽TARGET_NO_KERNEL := true

创建目录:./vendor/ti/zoom2/recovery/res

拷贝编译好的内核到目录:vendor/ti/zoom2

cp zImage./vendor/ti/zoom2/kernel

命令: make recoveryimage

单独生成 recovery.img,ramdisk-recovery.img

recovery.img:是recovery文件系统;

ramdisk-recovery.img
是根文件系统;

抱歉!评论已关闭.