转载:内核镜像zImage是如何生成的

内核镜像zImage是如何生成的

前面两篇文章介绍了vmlinux 文件生成,这个文件必然是核心的linux内核,但是它是ELF格式的文件,其中包含了可执行的二进制指令(内核),调试信息,符号表等内容。 vmlinux的生成是编译内核的关键,但是得到的vmlinux文件是不能烧写到flash中执行的。主要的问题是,没有一个环境来加载ELF格式的文 件。而zImage则是可以加载执行的二进制代码。

总的来说zImage和vmlinux的关系是:

1、zImage是可可运行的二进制内核镜像

2、zImage是由vmlinux处理、压缩得到的

3、zImage的大小比vmlinux小很多

下面介绍一下如何由vmlinux处理得到zImage

a、将vmlinux文件中的调试信息、符号表除去生成一个Image的镜像文件

/usr/local/arm/3.4.1/bin/arm-linux-objcopy -O binary -R .note -R .comment -S  vmlinux arch/arm/boot/Image

b、将Image镜像用gzip压缩工具进行压缩,得到piggy.gz的文件

gzip -f -9 < arch/arm/boot/compressed/../Image > arch/arm/boot/compressed/piggy.gz

c、piggy.S文件中直接将上面一步的piggy.gz文件包含在其中,将piggy.S编译得到piggy.o文件

/usr/local/arm/3.4.1/bin/arm-linux-gcc -Wp,-MD,arch/arm/boot/compressed/.piggy.o.d

-nostdinc -isystem /usr/local/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/include

-D__KERNEL__ -Iinclude  -mlittle-endian -D__ASSEMBLY__ -mapcs-32 -mno-thumb-interwork

-D__LINUX_ARM_ARCH__=4 -march=armv4 -mtune=arm9tdmi -msoft-float

-c -o arch/arm/boot/compressed/piggy.o

arch/arm/boot/compressed/piggy.S

d、将piggy.gz head.o misc.o三个文件链接成文内核镜像

/usr/local/arm/3.4.1/bin/arm-linux-ld -EL   --defsym zreladdr=0x30008000 --defsym params_phys=0x30000100

-p --no-undefined -X /usr/local/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/libgcc.a -T arch/arm/boot/compressed/vmlinux.lds

arch/arm/boot/compressed/head.o

arch/arm/boot/compressed/piggy.o

arch/arm/boot/compressed/misc.o

-o arch/arm/boot/compressed/vmlinux

e、再次去除掉镜像中的符号、注释、调试信息的内容

/usr/local/arm/3.4.1/bin/arm-linux-objcopy -O binary -R .note -R .comment

-S  arch/arm/boot/compressed/vmlinux

arch/arm/boot/zImage

内核镜像zImage是如何生成的的更多相关文章

  1. linux常用的内核镜像格式

    linux常用的内核镜像格式 Linux内核有多种格式的镜像,包括vmlinux.Image.zImage等. 1.     Linux内核镜像格式 1.1 vmlinux vmlinuz是可引导的. ...

  2. Linux内核镜像格式

    <Linux内核镜像格式>   Linux内核有多种格式的镜像,包括vmlinux.Image.zImage.bzImage.uImage.xipImage.bootpImage等. ➤k ...

  3. Linux内核镜像文件格式与生成过程(转)

    <Linux内核镜像格式>   Linux内核有多种格式的镜像,包括vmlinux.Image.zImage.bzImage.uImage.xipImage.bootpImage等. ➤k ...

  4. 九鼎S5PV210开发板的SD卡启动、uboot tftp升级内核镜像

    Note: 我的S5PV210板子的磁盘是emmc版本,不是nandflash版本. 1. SD卡内烧录uboot镜像,然后作为启动盘来启动emmc中的内核镜像和根文件系统. 只要破坏emmc内的ub ...

  5. 浅析linux内核中timer定时器的生成和sofirq软中断调用流程(转自http://blog.chinaunix.net/uid-20564848-id-73480.html)

    浅析linux内核中timer定时器的生成和sofirq软中断调用流程 mod_timer添加的定时器timer在内核的软中断中发生调用,__run_timers会spin_lock_irq(& ...

  6. 浅析linux内核中timer定时器的生成和sofirq软中断调用流程【转】

    转自:http://blog.chinaunix.net/uid-20564848-id-73480.html 浅析linux内核中timer定时器的生成和sofirq软中断调用流程 mod_time ...

  7. linux的几个内核镜像格式Image 和 u-boot启动内核和文件系统时的一些环境变量的设置

    关于编译powerpc linux的几个Image参考原文 http://blog.sina.com.cn/s/blog_86a30b0c0100wfzt.html 转载▼   PowerPC架构 L ...

  8. Docker应用四:搭建docker镜像仓库(包括自生成https证书、登陆认证)

    利用docker官网提供的registry镜像创建私有仓库 一.首先从docker官网拉取registry镜像: docker pull registry 二.然后运行该镜像: docker run ...

  9. docker中使用的镜像加速器可以自己生成

    只要你到该网址https://cr.console.aliyun.com/cn-hangzhou/mirrors登录(我使用的是支付宝帐号),然后你如下图操作,就能够看见你的加速器地址了,只要你登录就 ...

随机推荐

  1. inux命令英文缩写的含义(方便记忆) 2

    linux常用命令的英文单词缩写 命令缩写: ls:list(列出目录内容) cd:Change Directory(改变目录) su:switch user 切换用户rpm:redhat packa ...

  2. django 解决csrf跨域问题

    1.中间件代码 [root@linux-node01 mysite]# tree middlewares middlewares ├── base.py ├── base.pyc ├── cors.p ...

  3. MySQL之基础功能

    一.视图 视图:是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据 视图有如下特点: 1. 视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系. 2. 视图是 ...

  4. csu 1114平方根大搜索(JAVA大小数+二分)

    1114: 平方根大搜索 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 182  Solved: 96[Submit][Status][Web Boar ...

  5. vue 条件渲染与列表渲染

    本文是对官方文档的整理 因为 v-if 是一个指令,所以必须将它添加到一个元素上.但是如果想切换多个元素呢?此时可以把一个 <template> 元素当做不可见的包裹元素,并在上面使用 v ...

  6. java-list-分组

    Map<String, List<Hb12Domain>> groupBy = hb18DomainList.stream().collect(Collectors.group ...

  7. centos修改oracle字符集

    1.首先以sysdba的身份登录上去 conn /as sysdba2.关闭数据库shutdown immediate;3.以mount打来数据库,startup mount4.设置session S ...

  8. 【企业通讯录app番外篇】怎么样创建服务端?

    本文将指导大家如何去创建企业通讯录app的服务端 除了获取图片,客户端与服务端唯一的交互就是获取最新数据,如果该用户不能获取数据(用户名密码错误.用户离职被删)则返回空. 1:典型的交互流程如下: 用 ...

  9. 如何使用Inno Setup Compiler制作安装软件包

    工具/原料   Inno Setup Compiler汉化版软件 方法/步骤     启动Inno Setup Compiler汉化版软件.   选择创建新的空白脚本文件,按确定.   然后按下一步. ...

  10. Unity3D 向量运算

    写在前面的话,前两天有个朋友在QQ上问我 如何获取主角面朝方向一定区域中的敌人对象.这个命题看似简单,其实里面蕴含了很多数学方面的东西.今天刚好有时间我就彻底的把这个疑问写在博客中.希望可以帮助到他. ...