linux 0.11 源码学习(二)

linux 0.11的运行

linux 0.11版本的编译和运行可以基于bochs,个人参考的是赵博的文章,主要是三块工作:

  • 制作linux镜像,按要求修改makefile后,可以直接在redhat上编译,生成image:
  • 制作linux根文件镜像rootimage(即启动时存在的bin、home等目录);
  • 设置bochs配置参数,将image和rootimage分别作为软盘A和软盘B;

linux 0.11的makefile

对于linux启动首先要理解的是linux内核镜像的组成,image由三部分组成:bootsect、setup和system,其中system是真正的内核代码。由makefile可知:

all:    Image //最终生成的镜像文件
Image: boot/bootsect boot/setup tools/system tools/build
    objcopy -O binary -R .note -R .comment tools/system tools/kernel
    tools/build boot/bootsect boot/setup tools/kernel $(ROOT_DEV) > Image //由build程序组成image,ROOT_DEV是根文件参数
    rm tools/kernel -f
    sync
tools/system:    boot/head.o init/main.o \ //systtem部分目标文件
        $(ARCHIVES) $(DRIVERS) $(MATH) $(LIBS)
    $(LD) $(LDFLAGS) boot/head.o init/main.o \  //注意是GNU的编译和链接器
    $(ARCHIVES) \ //内核、文件系统、内存管理的目标文件
    $(DRIVERS) \ /驱动部分目标文件
    $(MATH) \ /数学运算库目标文件
    $(LIBS) \ /内核库函数目标文件
    -o tools/system 
//下面两个是X86的编译和连接器
boot/setup: boot/setup.s $(AS86) -o boot/setup.o boot/setup.s $(LD86) -s -o boot/setup boot/setup.o boot/bootsect: boot/bootsect.s $(AS86) -o boot/bootsect.o boot/bootsect.s $(LD86) -s -o boot/bootsect boot/bootsect.o

linux 0.11的build.c

上述makefile中很重要的一个文件是build.c,它将bootsect、setup、system和根文件作为参数,最终生成image。build.c在tools文件夹中,主要就是main函数执行功能如下:

  • 判断入参以及根文件,获取文件的主设备号和从设备号,写入image文件的508、509;默认写入0x021D即1.44 MB B驱动器;
  • 判断bootsect文件正确性,并写入stdout;
  • 判断setup正确性,(长度是否大于4个扇区(4*512),是则错误否则填0),并写入stdout;
  • 判断system正确性,并写入stdout;
  • 最终stdout会在makefile中重定向到image文件(> image);

 

 由上可知在image中头512字节是bootsect代码,因此当该image文件被加载入软盘启动时正好属于BIOS默认的引导扇区,也就是启动设备的第一个扇区,这也就是linux 0.11进入引导程序前的全部工作了:)

posted @   Fredric_2013  阅读(627)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示