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
是根文件系统;