linux编译zimage,linux zImage生成过程详解-程序员宅基地

技术标签: linux编译zimage  

内核编译完成后会生成zImage内核镜像文件。关于bootloader加载zImage到内核,并且跳转到zImage开始地址运行zImage的过程,相信大家都很容易理解。但对于zImage是如何解压的过程,就不是那么好理解了。本文将结合部分关键代码,讲解zImage的解压过程。

先看看zImage的组成吧。在内核编译完成后会在arch/arm/boot/下生成zImage。

在arch/armboot/Makefile中:

$(obj)/zImage: $(obj)/compressed/vmlinux FORCE

$(call if_changed,objcopy)

由此可见,zImage的是elf格式的arch/arm/boot/compressed/vmlinux二进制化得到的

在arch/armboot/compressed/Makefile中:

$(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.o

$(addprefix $(obj)/, $(OBJS)) FORCE

$(call if_changed,ld)

$(obj)/piggy.gz: $(obj)/../Image FORCE

$(call if_changed,gzip)

$(obj)/piggy.o: $(obj)/piggy.gz FORCE

其中Image是由内核顶层目录下的vmlinux二进制化后得到的。注意:arch/arm/boot/compressed/vmlinux是位置无关的,这个有助于理解后面的代码。,链接选项中有个 –fpic参数:

EXTRA_CFLAGS := -fpic

总结一下zImage的组成&

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_36099503/article/details/116767976

智能推荐

C语言字符串_c 字符-程序员宅基地

文章浏览阅读2.7k次。文章目录字符串:1、c语言中表示一个字符串:字符串的输入和输入:如何用scanf输入带空格的字符串?2、char型指针和char型数组的区别3、字符串长度获取strlen4、字符串拷贝strcpy5、字符串拼接strcat注意:要求前面字符串申请的地址空间足够长,必须容纳两个字符串,否则会越界6、字符串的比较strcmp字符串比较是要区分大小写strncmp比较的是前n个字符相不相同,而不是第n个字符相不相同7、strstr判断字符串时候有某个字符串8、strtok 分割字符串 同sscanf9、strch_c 字符

解决win11家庭版无法使用cmd文件或bat文件问题_win11系统cmd打不开-程序员宅基地

文章浏览阅读6.4k次,点赞3次,收藏7次。a、创建用户变量 %Path% ,值为 C:/windows/system32。下面图文说明cmd文件无法执行的解决方法,bat文件同理。b、修改path 变量,添加 %Path%2、创建并编辑hyper-v.cmd文件。3、经验证,cmd文件可执行了。_win11系统cmd打不开

FTP上传文件经常中断或超时的解决方案-程序员宅基地

文章浏览阅读1.5w次。近日做了一个简单的活,就是把一个phpcms建的网站整站迁移到另一个空间上。原本应该是很简单的事情,无奈却处处碰壁,遇到各种问题。终于在今天把所有问题解决,特撰写此文以留纪念,同时这里面遇到的一些问题的解决方法希望能给需要的朋友一些帮助。任务:把用所在A服务器的A1域名下的phpcms所建的网站迁移到B服务器下B1域名下。环境:普通家用1.5..._为什么向服务器上上传数据总是中断

JAVA获取中文名字的首字母_java 获取名称对应 小写首字母-程序员宅基地

文章浏览阅读2.1k次。转自http://blog.csdn.net/leayefang/article/details/90822551、调用FirstLetterUtil类的getFirstLetter()方法,获取姓名的首字母。如:“阿鲁卓玛”获取首字母是“alzm”。 String firstLetter = FirstLetterUtil.getFirstLetter(“阿鲁卓玛”_java 获取名称对应 小写首字母

不能将 “const char *“ 类型的值分配到 “char *“ 类型的实体_qt 不能将 "const char *" 类型的值分配到 "char *" 类型的实体-程序员宅基地

文章浏览阅读2.4k次,点赞4次,收藏2次。解决方案打开项目–>属性–>c/c+±->语言–>符合模式–>否_qt 不能将 "const char *" 类型的值分配到 "char *" 类型的实体

Fatal error: Call to a member function fetch_row() on a non-object in C:\wamp\www\baicaotang\admin\m_fatal error: call to a member function fetchrow() -程序员宅基地

文章浏览阅读1.9k次。昨晚在做测试的时候,输出数据测试的时候一直出现这个问题,_fatal error: call to a member function fetchrow() on a non-object in d:\xamp

随便推点

STM32-深入理解GPIO的8种工作模式_otg_fs_gccfg-程序员宅基地

文章浏览阅读4.6k次,点赞14次,收藏104次。对STM32中GPIO的8种工作模式做一个详细的说明_otg_fs_gccfg

python绘制有误差线的折线图_plt 带误差带的折线图-程序员宅基地

文章浏览阅读1.3w次,点赞8次,收藏44次。数据如上import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport matplotlib.font_manager as fm#读取数据data = pd.read_excel(r'C:\Users\Administrator\Desktop\图(1).xlsx',sheet_name = 5)..._plt 带误差带的折线图

vim :ctags+cscope_vim与ctags/cscope-程序员宅基地

文章浏览阅读424次。 转自:http://www.cnblogs.com/sunblackshine/archive/2011/08/25/2152962.html + http://easwy.com/blog/ 使用vim + cscope/ctags,就能够实现Source Insight的功能,可以很方便地查看分析源代码。 关键词: vim, cscope, ctags, tags ..._vim与ctags/cscope

ue4-shader-自定义shader代码hlsl_ue4 hlsl sample-程序员宅基地

文章浏览阅读6.4k次,点赞3次,收藏27次。title: ue4-shader-自定义shader代码hlslcategories: UnrealEngine4tags: [ue4, shader, hlsl]date: 2019-05-01 00:14:31comments: falseue4-shader-自定义shader代码hlsl前篇Shader Development - https://docs.un..._ue4 hlsl sample

python集合(set)类型_python set size-程序员宅基地

文章浏览阅读1.5w次,点赞2次,收藏8次。集合(set)快速访问集合(set)涉及修改集合数据的相关函数以及运算符—程序说明集合(set)帮助文档_python set size

django 使用原生sql_django原生sql轉模型-程序员宅基地

文章浏览阅读3.2k次。Django中查询筛选数据时,大多数是使用封装好的orm,其中有一些较为复杂的sql语句很难使用orm实现,因此在此引入Django中原生sql的使用方法在Django中使用原生Sql主要有以下三种方法: 一:extra:结果集修改器,一种提供额外查询参数的机制 二:raw:执行原始sql并返回模型实例 三:直接执行自定义Sql 举例说明使用方法from djang..._django原生sql轉模型

推荐文章

热门文章

相关标签