本文主要是介绍在内核中创建 uImage 的方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
2.6 内核树的 Makefile
提供了创建 uImage
的方法,但需要我们提供相应的 mkimage
命令。所以首先拷贝 uboot
中 tools
目录下编译后生成的 mkimage
到/usr/bin/
下,然后便可以在内核根目录下通过make uImage
来创建uImage
文件。该文件生成在 arch/arm/boot/
下。
2.2.2 修改内核的 Makefile
文件
[arm@localhost linux2.6.14.1]$ vi arch/arm/boot/Makefile
#MKIMAGE 变量记录 mkimage 命令的路径 mkuboot.sh 脚本文件可以 scripts 目录中找到
MKIMAGE := $(srctree)/scripts/mkuboot.sh#zreladdry 与 params_physy 可以在 arch/arm/machs3c2410/Makefile.boot 当中找到
ZRELADDR := $(zreladdry)
PARAMS_PHYS := $(params_physy)
INITRD_PHYS := $(initrd_physy) #生成 uImage 的 mkImage 命令行,其中需要关注的就是a 与 e 参数。
#参数a:指明 uImage 加载的 SDRAM 地址,内核默认指定加载地址为 0x30008000。
#uboot 引导时,bootm 命令跳到与上相同位置执行,检查完镜像头后,它会跳到内核真正的入口点开
始执行。
#参数e:指明 uImage 中刨去镜像头后真正的内核入口地址。
#镜像头为 0x40 长,故此处指定为 0x30008040。
#uboot 引导时,go 命令可以直接指定此位置。go 命令不检查镜像头。
quiet_cmd_uimage = UIMAGE $@cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) A arm O linux T kernel \
-C none a $(ZRELADDR) e 0x30008040 \
-n 'Linux$(KERNELRELEASE)' d $< $@
这篇关于在内核中创建 uImage 的方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!