x01.os.8: 加载内核,x01.os.8加载内核

来源:http://www.chinese-glasses.com 作者:Web前端 人气:91 发布时间:2020-04-15
摘要:kernel.img x01.os.8: 加载内核,x01.os.8加载内核 在 x01.os.7 中,借助 freedos ,学习了保护模式。但操作系统必须完成引导:boot, 加载内核:loader,kernel,进而管理process,memory,file等。 引导

kernel.img

x01.os.8: 加载内核,x01.os.8加载内核

x01.os.7 中,借助 freedos,学习了保护模式。但操作系统必须完成引导:boot, 加载内核:loader,kernel,进而管理process,memory,file等。

引导比较简单,开机启动时,CPU 采取硬的方式,直接把 BIOS 载入内存某处运行。这就是电脑启动时按 DEL 键可以看到的画面。此时,无硬盘可以,无内存则不可以。BIOS 是一个只读芯片,但我认为它仍有可写的部分,否则,启动盘设置的保存,就说不通。BIOS 退出时,它会检测启动盘 0 扇区的最后两个字节,是否为 0xAA55。如果是的,便把该扇区的 512 字节载入内存 0x7C00 处。以后的控制权,就交给了0x7C00 处。所谓的引导扇区,不过如此。这些设置,都是硬指标,没有讨价还价的余地。进入 0x7C00时,虽然只有512字节,但这并不妨碍构建 FAT12 格式的文件。方法如下:

       org 0x7C00

      jmp short l_start

      nop

%include"fat12.s"

包含文件“fat12.s”中,是一个引导参数块的定义。以此来完成 a.img 的 FAT12 格式化。将 loader, kernel 等文件复制到 a.img 中,即可使用。512字节实在太少,所以只能完成寻找加载 loader 的工作。进入 loader 后,虽可以多做一些事情,但没有必要,只需进行一些简单必要的设置,作为跳板,跳入 kernel 即可。必要设置,主要是对 kernel 内存地址 sel:**entry_point** 的一个整理。kernel 是 elf 格式,可与 C 交互。

让我们跟着于渊的脚步,看看进入 C 的运行效果图吧。

          10bet 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

按下键盘,会产生一个中断,最后一行即是。

完整代码,可到 x01.Lab.download 中下载。

 

当我们给计算机加电的时候,计算机系统怎么知道该如何启动我们的操作系统呢?

linux怎加载内核

加载内核?linux系统下的grub里有配置文件menu.lst吧,里边就有启动grub时需要加载的内核。你是说开机后系统如何加载内核吗?.ko文件一般是硬件的驱动,make是针对makefile来用的,makefile配置好编译条件和相关信息,用make就可以执行makefile里的配置。一般是在用源代码安装软件的时候用的,源代码包里通过configure会生成makefile文件  

  1. CS置为0xFFFF2. IP置为0x0000

linux内核加载问题

具体怎么编译的就不详说了,看样子你都生成出.ko文件了
menconfig里面。你把内核模块具体放在哪个目录下的,我也不知道
但是有一点,你添加的时候,应该要“M”键,也就是前面的'*'号得变成'M'

然后保存
最后放到板子上面去

首先1:加载内核模块,insmod ./xxx.ko(生成出来的模块)
2:给模块申请主次设备号,mknod /dev/(设备名,你自己定义的) c xxx(主设备号) 0
more /proc/devices 查看你当前加载的模块的主设备号

3.最后拿测试程序测试你的加载的驱动就可以了

如果你听不懂我说的,我可以举个详细的例子!  

http://www.bkjia.com/Linuxjc/882595.htmlwww.bkjia.comtruehttp://www.bkjia.com/Linuxjc/882595.htmlTechArticlex01.os.8: 加载内核,x01.os.8加载内核 在 x01.os.7 中,借助 freedos ,学习了保护模式。但操作系统必须完成引导: boot , 加载内核: loader ,...

-10bet, 一般位于第一个扇区- 占用512字节- 以0xAA55结束

启动盘里的代码是GRUB2,定义的。也就是说BIOS执行了启动盘中由GRUB2定义好的一系列加载操作系统的步骤

4. 其中选择的那一项可能会有很多指令,例如linux16,initrd等,都会执行对应的函数

BIOS完成上述步骤后,就需要开始加载操作系统。一般的操作系统,例如在windows我们都会安装在C盘也就是硬盘上。在BIOS上我们也可以看到启动盘的选择。

boot.img会先加载core.img的第一个扇区,也就是diskboot.img

lzma_decompress.img

- boot.img- diskboot.img- lzma_decompress.img- kernel.img- 启动内核

主函数中

由diskboot.S编译而成,任务是将core.img的其他部分一块加载到进来,显示解压它的下一步骤,lzma_decompress.img,再往下就是kernel.img,最后则是各个modules的映射,这里还不到linux的内核,所有都是grub的内核

10bet 2

diskboot.img

实模式可操作的空间非常有限,只有2^20也就是1M的地址空间

2、启动分页

BIOS会检查两件事情

BIOS

  1. 调用grub_command_execute,真正启动内核

由startup_raw.S编译而成,因为后续的kernel.img是经过压缩过后的,所以需要解压,同时它还需要完成从 实模式——保护模式 的切换,为的是能在更大的寻址空间里,加载更多的东西

由boot.S编译而成,一共512字节,正好符合启动盘的第一个扇区的大小,所以会安装在这个第一扇区,通常这个扇区成为MBR

本文由10bet发布于Web前端,转载请注明出处:x01.os.8: 加载内核,x01.os.8加载内核

关键词:

频道精选

最火资讯