Linux启动流程分析

目录

1.Linux编译

2.链接脚本 vmlinux.lds

3.start_kernel函数

4.rest_init 函数


1.Linux编译

编译脚本mx6ull_evk_emmc.sh内容如下

#!/bin/sh
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16

ARM架构的所有配置文件在arch/arm/configs文件夹下,设备树文件在arch/arm/boot/dts文件夹下。

        编译完成以后就会在 arch/arm/boot 这个目录下生成一个叫做 zImage 的文件,zImage 就是
我们要用的 Linux 镜像文件。另外也会在 arch/arm/boo/dts 下生成很多.dtb 文件,这些.dtb 就是
设备树文件。

        首先编译出来的是 vmlinux,vmlinux 是 ELF 格式的文件,但我们实际使用 zImage 或 uImage 这样的 Linux 内核镜像文件。vmlinux 是编译出来的最原始的内核文件,是未压缩的,差不多有 16MB,Image 是 Linux 内核镜像文件,但是 Image 仅包含可执行的二进制数据。Image 就是使用 objcopy 取消掉 vmlinux 中的一些其他信息,仍然很大,zImage 是经过 gzip 压缩后的 Image,经过压缩以后其大小大概在 6MB 左右,uImage 是老版本 uboot 专用的镜像文件,uImag 是在 zImage 前面加了一个长度为 64字节的“头”,这个头信息描述了该镜像文件的类型、加载位置、生成时间、大小等信息。新的 uboot 已经支持了 zImage 启动!所以已经很少用到 uImage 了,除非你用的很古老的 uboot。

       使用"make all"和"make"命令会生成zImage镜像和dtb设备树文件,make zImage”命令就可以单独编译出 zImage 镜像,“make dtbs”命令只编译设备树文件,也就是将.dts 编译为.dtb

2.链接脚本 vmlinux.lds

        要分析 Linux 启动流程,同样需要先编译一下 Linux 源码,因为有很多文件是需要编译才
会生成的。首先分析 Linux 内核的连接脚本文件 arch/arm/kernel/vmlinux.lds,通过链接脚本可以
找到 Linux 内核的第一行程序是从哪里执行的。vmlinux.lds 中有如下代码:

 ENTRY 指明了了 Linux 内核入口,入口为 stext,stext 定义在文件arch/arm/kernel/head.S 中 , 因 此 要 分 析 Linux 内 核 的 启 动 流 程 , 就 得 先 从 文 件arch/arm/kernel/head.S 的 stext 处开始分析。

 stext最终调用start_kernel启动内核

3.start_kernel函数

 

 start_kernel 里面调用了大量的函数,每一个函数都是一个庞大的知识点,start_kernel函数最终调用rest_init 函数。

4.rest_init 函数

 

 

 rest_init 函数的终极任务是创建大名鼎鼎的"init"进程,并挂载根文件系统和设置console,,由内核态切换到用户态。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值