linux0.11简单内核的启动过程(第一篇)

在这里运行环境我就不多说了,我自己是在bochs上面试调的,(文章主要用来记录学习过程,不提供源码,许多源码网上都有)

在这里我笔记一个定义  : GRUB的全称是GRand Unified Bootloader,是一个多重操作系统启动管理器,用来 引导不同的操作系统。

1.裸机上去运行一句hello kernel  需要的最简单文件

1111

   boot  文件夹下是一个boot.s文件           代码从这里开始,里面包含了start函数,告诉了ld连接器这个文件里面包含了入口函数

  include 文件夹下是一个types.h文件      这里面试头文件和一些类型的重定义

   init  文件夹下是一个entry.c文件             这里个文件时C语言实现的内核入口函数

  scripts文件夹下是一个kernel.ld 文件     这个文件是项目初步采用的连接器脚本定义,这个感觉是在make过程中用到了,就是说告诉ld程序如何构造我们所需要的内 核镜像文件,通过查资料它对连接器是这么解释的:

 

111

试调结果为

888

      自己感觉这里试通过start函数找到了init中的内核入口函数,显示的hello kernel, 而且types.h 文件在entry.c的头文件中

2.控制屏幕输出内容

                首先我们要知道显卡(显示内容存储和显示控制单元)和显示器,再就是字符的编码的种类,字符编码的种类有3种:输入码,   内码,字模码。

  字模码 :定义一个字符在屏幕上显示的坐标位置

  内码    : 定义字符在内存中的存储形式,大家都知道的ASCII码就是        输入码:顾名思义

 这部分比上面多了4个文件 ,

  分别是drivers文件夹下的console.c    libs下的common.c 和 include下的common.h和console.h

   1111

     common.c :文件是用来定义几个端口读写函数的以用来方便读写某个端口

     console.c :文件是定义显卡存储的起始位置和当前输出的屏幕位置的变量定义,我自己理解为分屏幕的函数把屏幕用坐标分成80*25个格子,每个格子有两部分组成(2个字节每个字节8位,前8位是存储内容,后8位的前4位是背景色后四位前景色)。

     common.hconsole.h都是函数声明的一些头文件

试调结果为

555

 

1.目录说明 cong@msi:/work/os/rootfs/grub/grub0.97$ tree . ├── bash -->a.out格式 ├── bochrc -->bochs启动配置 ├── bzImage -->linux-2.4.12的内核 ├── createminix.sh -->创建minix文件系统硬盘镜像的脚本 ├── creatext2.sh -->创建ext文件系统硬盘镜像的脚本 ├── grub -->在grub的install时会用到 │ ├── default │ ├── device.map │ ├── e2fs_stage1_5 │ ├── fat_stage1_5 │ ├── installed-version │ ├── jfs_stage1_5 │ ├── menu.lst -->现在默认是引导bzImage │ ├── menu.lst_bak │ ├── minix_stage1_5 │ ├── reiserfs_stage1_5 │ ├── stage1 │ ├── stage2 │ └── xfs_stage1_5 ├── grub-floppy ├── grub-install ├── grub-md5-crypt ├── grub-mkdevicemap ├── grub-probe ├── grub-reboot ├── grub-set-default ├── grub_sh -->grub的命令行,但与grub目录重名,改名了 ├── grub-terminfo ├── Image -->linux-0.12的内核 ├── Makefile -->make qemu 启动qemu ├── mkfs -->格式化minix文件系统的命令 └── Readme.txt 2. 使用说明 2.1 创建minix的硬盘镜像 a. 执行createminix.sh脚本会在当前目录下生成hdminix.img cong@msi:/work/os/rootfs/grub/grub0.97$ ./执行createminix.sh b.启动qemu即可看到启动grub的界面 cong@msi:/work/os/rootfs/grub/grub0.97$ make qemu 默认是引导了bzImage,需要默认引导Image就把menu.lst中的default 0 --->default 1 2.2 创建ext2的硬盘镜像 a. 执行creatext2.sh脚本会在当前目录下生成hdc.img cong@msi:/work/os/rootfs/grub/grub0.97$ ./creatext2.sh b.启动qemu即可看到启动grub的界面 cong@msi:/work/os/rootfs/grub/grub0.97$ make qemu 默认是引导了bzImage
Linux0.11内核源码解读第一季——汇编启动部分》是一本深入解析Linux0.11内核源代码的书籍。汇编启动部分是整个内核启动过程中的重要环节,能够帮助读者深入理解操作系统的启动和初始化流程。 首先,汇编启动部分是内核启动的第一步。它通过软件中断机制在实模式下启动。通过设置系统段描述符和全局描述符表,为操作系统提供必要的运行环境。在启动过程中,汇编启动部分会初始化中断向量表、设置栈段(SS)和栈指针(SP),并跳转到引导扇区加载内核文件。 接着,书籍详细分析了引导扇区的装载过程。引导扇区会被BIOS加载到内存地址0x7C00处,然后执行引导扇区的代码。在引导扇区中,汇编启动部分会进行一些必要的初始化工作,如设置栈段和栈指针,加载中断描述符表以及读取磁盘上的内核文件。 此外,书籍还介绍了一些启动相关的概念和知识,如分段机制、实模式和保护模式之间的切换等。读者通过学习这些知识,可以更加清楚地了解硬件和操作系统之间的交互过程。 总之,汇编启动部分是Linux0.11内核启动的关键环节,对于理解操作系统的启动过程非常重要。《Linux0.11内核源码解读第一季——汇编启动部分》通过深入剖析源代码,让读者能够全面了解Linux内核启动过程,并通过这些知识来探索更深入的操作系统原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值