关于编译powerpc linux的几个Image 参考原文 http://blog.sina.com.cn/s/blog_86a30b0c0100wfzt.html PowerPC架构
1,dtb: dtb文件由dts生成,对于任何一个PowerPC处理器板,都要有对应的dts文件,dts文件主要是对目标板的HW参数进行描述,比如我的目标板是evm440(Powerpc440),我编写了一个evm440.dts文件放到内核arch/powerpc/boot/dts/目录下. 编译evm440.dtb文件命令如下: $ make ARCH=powerpc CROSS_COMPILE=/toolchain/freescale-2010.09/bin/powerpc-linux-gnu- evm440.dtb 编译成功后会在arch/powerpc/boot/下生成evm440.dtb文件,这就是我们需要的dtb文件. 2. uImage: 这个Image应该是地球都知道的,这里就不多说了,编译命令如下: $ make ARCH=powerpc CROSS_COMPILE=/toolchain/freescale-2010.09/bin/powerpc-linux-gnu- uImage 编译成功后会在arch/powerpc/boot/下生成uImage文件,这就是我们需要的内核Image文件. 3. simpleImage.xxxx和simpleImage.initrd.xxxx: 这里的xxxx是特定目标板名字,我的目标板是evm440,也就是simpleImage.evm440和simpleImage.initrd.evm440。 simpleImage.evm440是包括evm440.dtb与uImage以及simpleboot的单一Image,可以不需要bootloader支持加载. simpleImage.initrd.evm440是包括evm440.dtb,ramdisk.image.gz与uImage以及simpleboot的单一Image,也是可以不需要bootloader支持加载. 编译命令如下: $ make ARCH=powerpc CROSS_COMPILE=/usr/toolchain/freescale-2010.09/bin/powerpc-linux-gnu- simpleImage.evm440 $ make ARCH=powerpc CROSS_COMPILE=/usr/toolchain/freescale-2010.09/bin/powerpc-linux-gnu- 编译成功后会在arch/powerpc/boot/下生成: simpleImage.evm440 simpleImage.evm440.elf simpleImage.initrd.evm440 simpleImage.initrd.evm440.elf 这些命令格式,另外包括cuImage,在Document/powerpc/bootwrape文件中有说明。 附 1. 在修改内核配置时,要在arch/powerpc/boot/dts/目录下使用新的设备树文件(通常参考相似的设备树文件),如p2020stm1.dts; 2. 修改扳级文件,在arch/powerpc/platform/85xx/目录下(通常参考相似文件),如 cp mpc85xx_rdb.c p2020_stm1.c,并修改好这个目录下的Makefile 和Kconfig文件; 3. 内核根目录下.config可以参考arch/powepc/configs/目录下的配置,如mpc85xx_smp_defconfig; 4. 编译 make cuImage.p2020stm1。 cuImage 对应命令格式, p2020stm1 对应设备树文件。为了使命令中的p2020stm1能找到对应的CPU,还需要修改文件arch/powerpc/boot/wraper文件,添加"|*-p2020*"内容。 194 *-mpc85*|* ..... 195 platformo=$object/cuboot-85xx.o 经过这四个过程基本OK [转]Linux内核zImage\Image\uImage之区别及uImage的制作 http://zh5202.blog.163.com/blog/static/178025195201210535458755/ 一、Image、zImage和uImage的区别 内核编译(make)之后会生成两个文件,一个是Image,一个是zImage,其中Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M。uImage是uboot专用的映像文件,它是在zImage之前加上一个长度为64字节的“头”,说明这个内核的版本、加载位置、生成时间、大小等信息;其0x40之后与zImage没什么区别。uImage的64字节的头结构如下: typedef struct image_header{ uint32_tih_magic; uint32_tih_hcrc; uint32_tih_time; uint32_tih_size; uint32_tih_load; uint32_tih_ep; uint32_tih_dcrc; uint32_tih_os; uint32_tih_arch; uint32_tih_type; uint32_tih_comp; uint32_tih_name[IH_NMLEN]; }image_header_t; 所以uImage和zImage都是压缩后的内核映像,而uImage是uboot专用的映像文件,是用mkimage工具根据zImage制作而来的。 二、uImage的制作 (编译uboot源码,编译成功后载uboot/tools目录下会生成mkimgage工具,将mkimage工具拷贝到/usr/bin/目录下即可。) mkimage工具 内核编译完后zImage在内核根目录下,mkimage工具在u-boot根目录下的tools文件夹中,将zImage和mkimage放在同一个目录下,执行: ./mkimage -A arm -O linux -T kernel -C none -a 30008000 -e 30008000 -n linux-2.6.26 -d zImage uImage2.6.26 就将zImage转换成uImage了。 【mkimage的命令参数:】 -A :==>set architecture to 'arch’ :用于指定CPU类型,比如arm、x86、mips、ppc -O :==>set operating system to 'os’ :用于指定操作系统,比如freebsd、linux、vxworks -T :==>set image type to 'type’ :用于指定image类型,比如kernel、ramdisk、filesystem -C :==>set compression type 'comp’ :用于指定压缩类型:none、gzip、bzip2 -a :==>set load address to 'addr’(hex) :用于指定uImage的加载地址 -e :==>set entry point to 'ep’(hex) :用于指定内核的入口地址,一般是:uImage的载入地址+0x40(信息头的大小) -n :==>set image name to 'name’ :用于指定uImage在头结构中的命名 -d :==>use image data from 'datafile’ :用于指定无头信息的zImage文件名 -x :==>set XIP(execute in place) :用于设置执行位置 如对于ARM Linux内核映像常用选项为: -A arm :==> 架构是arm -O linux :==> 操作系统是linux -T kernel :==> 类型是kernel -C none/bzip/gzip :==> 压缩类型 -a 0x40008000 :==> uImage的载入地址(hex),通常为0xX0008000 -e 0x40008040 :==> 内核的入口地址(hex),XX为0x40或者0x00 -n linux-xxx :==> uImage的名字,任意 -d namexxx :==> 无头信息的zImage文件名,为源内核文件 uImagexxx :==> 加了头信息之后的zImage文件名,任意 【例子:】 ./mkimage -A arm -O linux -T kernel -C none -a 30008000 -e 30008040 -d zImage uImage
【注意:】 -a和-e后面跟的分别是image的载入地址和内核的入口地址,两者可以一样,也可以不一样,依据如下情况而定: 当-a后面指定的地址和bootm xxxx后面的地址一样时,-e后面的地址必须要比-a后面的地址多0x40,也就是映像头的大小64个字节。因为当他们地址一样时,uboot是不会搬运映像的; 当-a后面指定的地址和bootm xxxx后面的地址不一样时,uboot会将bootm xxxx地址处的映像文件搬运到-a指定的地址处,此时,-e和-a必须要一样,因为映像头并没有搬运过去,载入地址就是内核的入口地址。需要注意的是,因为uboot要重新搬运内核映像,所以要注意bootm xxxx的地址和-a之间的地址不要导致复制时的覆盖。 [转]uImage、zImage、bzImage、vlinzx区别 |
|
来自: raymoon_sure > 《linux移植》