当前位置: 首页 > news >正文

嵌入式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
http://www.lryc.cn/news/399444.html

相关文章:

  • RK3568笔记三十五:LED驱动开发测试
  • pnpm 如何安装指定版本
  • LeetCode 240 搜索二维矩阵||
  • 万界星空科技MES系统:食品加工安全的实时监控与智能管理
  • 【学习笔记】4、组合逻辑电路(下)
  • 使机器人在执行任务倒快递
  • 谈谈软件交互设计
  • npm install报错:淘宝镜像证书过期
  • 各种Attention|即插即用|适用于YoloV5、V7、V8、V9、V10(一)
  • 语言模型演进:从NLP到LLM的跨越之旅
  • 自动驾驶中的人机互相接管问题讨论
  • 语音识别HResults统计工具以及字根据关键词进行合并
  • lvs集群、NAT模式和DR模式、keepalive
  • zookeeper在哪里能用到
  • coco_eval 使用
  • 国产精品ORM框架-SqlSugar详解 进阶功能 集成整合 脚手架应用 专题二
  • el-table 动态添加删除 -- 鼠标移入移出显隐删除图标
  • Kafka接收消息
  • C语言 | Leetcode C语言题解之第233题数字1的个数
  • 简谈设计模式之原型模式
  • CentOS7.X系统部署Zabbix6.0版本(可跟做)
  • QT文件生成可执行的exe程序
  • 【ZooKeeper学习笔记】
  • 220V降5V芯片输出电压电流封装选型WT
  • AWS S3 基本概念
  • [XCUITest] 处理iOS权限点击授权 有哪些权限?
  • 宪法学学习笔记(个人向) Part.5
  • C语言的指针与数组
  • 计算机图形学入门28:相机、透镜和光场
  • Swift 基于Codable协议使用