嵌入式linux系统内核启动过程分享

内核的生成步骤可以概括如下:

① 先生成 vmlinux,这是一个elf可执行文件。② 然后 objcopy 成 arch/i386/boot/compressed/vmlinux.bin,去掉了原 elf 文件中一些无用的section等信息。③ gzip 后压缩为 arch/i386/boot/compressed/vmlinux.bin.gz。④ 把压缩文件作为数据段链接成 arch/i386/boot/compressed/piggy.o。⑤ 链接:arch/i386/boot/compressed/vmlinux = head.o+misc.o+piggy.o ,其中 head.o 和 misc.o 是用来解压缩的。⑥ objcopy 成 arch/i386/boot/vmlinux.bin,去掉了原 elf 文件中一些无用的 section等信息。⑦ 用 arch/i386/boot/tools/build.c 工具拼接 bzImage = bootsect+setup+vmlinux.bin。

想要探寻Linux内核的启动,可以先从一个普通的用户态C程序的启动来入手。

C语言程序是如何启动并运行的

首先写一个最简单的C程序 test.c

 1 #include <stdio.h>
 2
 3 int main()
 4 {
 5     printf("hello world ...\n");
 6     return 0;
 7 }

我们都知道,C程序的入口时 main 函数,那么下面来深入探索一下为什么是 main 函数,首先使用 gcc 生成可执行文件

gc

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 08:52:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 08:52:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 08:52:02       57 阅读
  4. Python语言-面向对象

    2024-07-14 08:52:02       68 阅读

热门阅读

  1. RabbitMQ的工作模式

    2024-07-14 08:52:02       17 阅读
  2. 跨域问题出现的原因,怎么解决?

    2024-07-14 08:52:02       22 阅读
  3. Isaac sim中使用不同的backone

    2024-07-14 08:52:02       17 阅读
  4. Python中的pytest的使用

    2024-07-14 08:52:02       26 阅读
  5. Power BI 工具介绍

    2024-07-14 08:52:02       24 阅读
  6. 【C语言】多线程服务器

    2024-07-14 08:52:02       22 阅读
  7. 数学建模如何创新

    2024-07-14 08:52:02       27 阅读
  8. 【Qt】使用临时对象的坑

    2024-07-14 08:52:02       21 阅读
  9. C++智能指针的用法

    2024-07-14 08:52:02       23 阅读
  10. vue怎样自定义指令?

    2024-07-14 08:52:02       21 阅读