IMX6Solo启动流程-Linux 内核启动 一
来源:互联网 发布:皇家猫粮 知乎 编辑:程序博客网 时间:2024/06/06 01:11
写在前头
*.版权声明:本篇文章为原创,可随意转载,转载请注明出处,谢谢!另我创建一个QQ群82642304,欢迎加入!
*.目的:整理一下RIotBoard开发板的启动流程,对自己的所学做一个整理总结,本系列内核代码基于linux-3.0.35-imx。
*.备注:整个系列只是对我所学进行总结,记录我认为是关键的点,另我能力有限,难免出现疏漏错误,如果读者有发现请多指正,以免我误导他人!
从编译说起
linux内核的常见操作就是配置和编译.
make config、make menuconfig、make xxx_defconfig等等都是对内核的配置,生成的配置文件在顶层目录的.config。其中make menuconfig和make xxx_defconfig是比较常用的。一般刚开始的时候都是需要默认配置文件,比如我的RIotBoard的板子就是make imx6_defconfig实际上就是将arch/arm/configs/imx6_defconfig拷贝到.config。
make vmlinux、make bzImage、make uImage等等实际上就是将内核编译成一个可执行的文件,对于Uboot来说,我们是用make uImage进行编译的,uImage是在编译出来的内核文件前端加上一个镜像头,供Uboot进行识别。
内核编译实际上是一个比较庞大的工程,而且输出也相对精简,但是我们在make的时候加上V=1,就可以输出详细的信息。
uImage生成流程
- 根据内核配置文件,将linux中的子系统编译成一个个build-in.o
- 将所有的build-in.o链接生成vmlinx,使用的链接脚本为arch/arm/kernel/vmlinux.lds
- 将生成的vmlinux通过arm-fsl-linux-gnueabi-objcopy去掉符号表,调试信息等,生成arch/arm/boot/Image
- 将生成的arch/arm/boot/Image通过gzip压缩成arch/arm/boot/compressed/piggy.gzip
- 根据链接脚本arch/boot/compressed/vmlinux.lds,将piggy.gzip和arch/boot/compressed里的自解压程序链接成arch/arm/boot/compressed/vmlinux。
- 将生成的vmlinux通过arm-fsl-linux-gnueabi-objcopy去掉符号表,调试信息等,生成arch/arm/boot/zImage
- 通过Uboot目录下的tools/mkimage程序,在arch/arm/boot/zImage的头部加上linux内核镜像头,生成arch/arm/boot/uImage
在uImage的生成流程中,用到里两个vmlinux.lds,生成里两次vmlinux。在2中生成的vmlinux是linux内核原始的执行镜像文件,在5中生成的vmlinux是先将linux内核原始的执行镜像文件压缩,然后编译自解压程序,最后将自解压程序和压缩后的文件链接成新的vmlinux,自解压程序在linux启动的时候先会被执行,它的作用就是解压缩内核镜像文件到指定地点,然后跳转到内核入口。
所以真正的入口是在arch/boot/compressed/中
总结
了解uImage的生成流程对研究linux内核启动流程还是有帮助的,如果懒于研究内核的Makefile和Kbuild机制,那就在make的时候加上V=1吧,它能够让你看清整个编译流程。
参考
暂无
- IMX6Solo启动流程-Linux 内核启动 一
- IMX6Solo启动流程-Linux 内核启动 二
- IMX6Solo启动流程-Linux 内核启动 三
- IMX6Solo启动流程-Linux 内核启动 四
- IMX6Solo启动流程-Linux 内核启动 五
- IMX6Solo启动流程-Linux 内核启动 六
- IMX6Solo启动流程-Linux 内核启动 七
- IMX6Solo启动流程-从上电到Uboot
- Linux内核启动流程分析(一)
- Linux内核启动流程分析(一)
- linux内核启动流程
- Linux内核启动流程
- linux内核启动流程
- linux内核启动流程
- linux内核启动流程
- Linux内核启动流程
- Linux内核启动流程
- linux内核启动流程
- Android 之 Handler 的使用(一)
- 网站推广成功之法—独占神话
- 依赖倒置原则
- leetcode 202 Happy Number(难易度:Easy)
- 大四上week2-4(抽象类,接口,Object类,扑克牌案例 )
- IMX6Solo启动流程-Linux 内核启动 一
- DataGridView和ListView比较
- Eclipse中Tomcat插件的使用说明
- 分冶法之归并排序
- Asynchttpclient的使用及请求与响应封装
- hdu1505city game dp
- 凌凯短信Webservice接口报错解决办法
- system() 函数执行遇到 Cannot allocate memory
- 用cxf编写基于spring的webservice之上篇