系统移植——linux内核移植——分析内核编译过程

uImage镜像文件

1.进入linux内核源码目录

        ubuntu@ubuntu:~$ cd FSMP1A/linux-stm32mp-5.10.61-stm32mp-r2-r0/linux-5.10.61/

   打开Makefile文件

        vi Makefile 

   搜索include

        

           

因为 $(SRCARCH)->arm

所以上述指令为 arch/arm/Makefile

2.进入linux内核源码目录下,arch/arm目录下,打开Makefile文件,搜索:uImage

 

通过分析可知:

make -f ./scripts/Makefile.build obj=arch/arm/boot(目录) MACHINE= arch/arm/boot/uImage(目标)

3.进入linux内核源码目录下,scripts目录下,打开Makefile.build文件

   src := $(obj) ——arch/arm/boot

   kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src)) ——kbuild-dir := arch/arm/boot

   kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile) 

   kbuild-file := arch/arm/boot/Kbuild 和arch/arm/boot/Makefile

   include $(kbuild-file) ——将arch/arm/boot/目录下的Makefile进行展开,替换到当前目录下的这个位置(达到Makefile中转)

4.进入linux内核源码目录下,arch/arm/boot目录下,打开Makefile文件,搜索uImage

5.进入linux内核源码目录下,scripts目录下,打开Kbuild.include文件,搜索if_changed

 

其中:$(cmd_$(1)) :调用了 cmd_uimage

6.继续在当前目录下,打开Makefile.lib文件,搜索cmd_uimage功能

$(BASH) :bash

MKIMAGE := 内核源码目录下/scripts/mkuboot.sh

通过分析mkuboot.sh脚本文件可知,执行mkimage命令

mkimage -A arm -O linux -C gzip -T kernel -a 0xc2000000 -e 0xc2000000 -n uImage -d zImage uImage

7.总结:uImage是通过zImage得到,将 zImage 通过 mkimage 这个工具添加64字节头部信息

zImage镜像文件

1.进入arch/arm/boot目录下,打开Makefile文件,搜索zImage

 $(call if_changed,objcopy) ——执行cmd_objcopy

2.进入scripts目录下,打开Makefile.lib文件,搜索cmd_objcopy功能

        arm-linux-gnueabihf-objcopy arch/arm/boot/compressed/vmlinux arch/arm/boot/zImage

3.zImage镜像文件和arch/arm/boot/compressed/vmlinux之间关系

        arch/arm/boot/compressed/vmlinux通过objcopy命令格式化转换为zImage

$(obj)/compressed/vmlinux镜像文件

1.进入arch/arm/boot目录下,打开Makefile文件,搜索vmlinux

 

执行命令:

make -f ./scripts/Makefile.build obj=arch/arm/boot/compressed arch/arm/boot/compressed/vmlinux

2.进入arch/arm/boot/compressed目录下,打开Makefile文件,搜索vmlinux

 

将所有的.o文件通过ld命令,根据vmlinux.lds链接脚本文件,链接生成vmlinux

$(call if_changed,gzip) ——执行cmd_gzip 

3.进入scripts目录下,打开Makefile.lib文件,搜索cmd_gzip功能

 

4.arch/arm/boot/compressed/vmlinux镜像文件和Image之间关系

         将Image镜像gzip压缩方式得到arch/arm/boot/compressed/vmlinux镜像文件

Image镜像文件

1.进入arch/arm/boot目录下,打开Makefile文件,搜索Image

 

$(call if_changed,objcopy) ——执行cmd_objcopy

2.进入scripts目录下,打开Makefile.lib文件,搜索cmd_objcopy功能

3.Image和vmlinux之间关系

        vmlinux通过objcopy命令格式化转换为Image

总结

vmlinux 通过 objcopy 转化为 Image

Image 通过 gzip 转化为 arch/arm/boot/compressed/vmlinux

arch/arm/boot/compressed/vmlinux 通过 objcopy 转化为 zImage

zImage 通过 mkimage 转化为 uImage

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux内核裁剪移植交叉编译借鉴.pdf》是一本介绍Linux内核裁剪、移植和交叉编译的参考资料。在这本书中,作者详细介绍了如何通过裁剪Linux内核来减少系统资源占用,提高系统性能,以及如何将Linux内核移植到不同的硬件平台上。同时,还介绍了如何进行交叉编译,以在一台开发主机上生成适用于另一种架构的可执行程序。 在Linux系统开发中,裁剪内核是非常重要的一步。通过裁剪,可以去除一些不需要的模块和功能,从而减小内核的体积,提高系统的启动速度和运行效率。同时,对于嵌入式系统来说,移植Linux内核至不同的硬件平台也是必不可少的。这本书详细介绍了移植过程,包括如何配置和修改内核源码,以及如何为目标硬件生成适配的内核镜像。 此外,本书还介绍了交叉编译的概念和方法。在实际开发中,通常需要在一种架构的开发主机上生成另一种架构的可执行程序,这就需要使用交叉编译工具。《Linux内核裁剪移植交叉编译借鉴.pdf》通过简单易懂的方式,讲解了交叉编译的原理和技巧,帮助读者更好地理解和掌握这一重要的开发技能。 总的来说,这本书是一本对于Linux系统开发者非常有参考价值的资料,通过学习这本书,读者可以更好地理解和掌握Linux内核裁剪、移植和交叉编译的技术,从而更好地进行嵌入式Linux系统的开发工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值