linux内核设计的艺术--加载内核代码
来源:互联网 发布:c语言模块化书籍 编辑:程序博客网 时间:2024/05/22 02:26
在BIOS触发0x19中断将磁盘的第一个扇区(512B)加载到内存中后,计算机才真正开始执行磁盘上的程序。而这512B的程序就是bootsect.s,此时处理器还处于实模式内存寻址的最大范围是1M(0x0000-0xFFFF),接下来我们看看在bootsect.s的第一批代码中做了些什么?
</pre><pre name="code" class="cpp">SYSSIZE = 0x3000 //内核程序的大小SETUPLEN = 4//要加载的setup程序长度单位为扇区数BOOTSEG = 0x07c0//启动扇区被BIOS加载的位置,也就是现在所在的位置INITSEG = 0x9000//bootsect.s即将移动到的位置SETUPSEG = 0x9020//setup程序要被加载的开始位置SYSSEG = 0x1000//kernel加载的起始位置ENDSEG = SYSSEG + SYSSIZE//kernel的结束位置ROOT_DEV = 0x306 //根文件系统的设备号
上述代码声明了给一系列变量赋值,用于内存规划
</pre><pre name="code" class="cpp">entry startstart:movax,#BOOTSEG //movds,ax //movax,#INITSEG //这段代码是将bootsect的代码从0x07C0moves,ax //复制到0x9020处movcx,#256 //subsi,si //subdi,di //rep // movw //
</pre>因为在后面的程序中,bootsect之前所在的位置会被其他程序覆盖,所以需要将bootsect程序的位置移动至0x90200处<p></p><p></p><p>复制完成之后,紧接着执行</p><p></p><pre code_snippet_id="403621" snippet_file_name="blog_20140623_7_6144482" name="code" class="cpp">jmpigo,INITSEGgo:movax,csmovds,ax
这个时候,开始加载setup(setup.s)程序到内存中了
还是老样子,加载setup,只不过这次通过寄存器指定了一系列信息方便中断服务程序访问磁盘
load_setup:movdx,#0x0000//指定磁头为第0个movcx,#0x0002//指定在第2个扇区,第0个磁道movbx,#0x0200//setup在磁盘中的物理地址movax,#0x0200+SETUPLEN//指定结束的位置int0x13//中断读取磁盘jncok_load_setup//加载完成,执行ok_load_setupmovdx,#0x0000movax,#0x0000//重置磁盘int0x13jload_setup
然后调用read_it加载system也就是kernel模块了
movax,#SYSSEG //指定system模块加载在内存中的位置moves,axcallread_itcallkill_motor
0 0
- linux内核设计的艺术--加载内核代码
- 《Linux内核设计的艺术》读后感
- Linux内核设计的艺术-前三章总结
- Linux内核设计的艺术-文件操作
- linux内核设计的艺术--系统启动第一步
- 《Linux内核设计的艺术》总结: 进程1的创建
- Linux内核设计的艺术-进程间通信-管道
- Linux内核设计的艺术-进程间通信-信号
- 《LINUX内核设计的艺术》读书笔记(一)
- linux内核设计的艺术-开始执行main函数
- 《Linux内核设计的艺术》总结:开机加电到main执行
- Linux内核设计的艺术(第2版)
- Linux内核设计艺术笔记(一)
- Linux内核设计艺术笔记(二)
- Linux内核设计艺术笔记(三)
- Linux内核设计艺术笔记(四)
- Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理
- Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理
- epoll 水平触发和边缘触发的区别
- 二叉排序树
- autoresizingMask 属性
- IOS 开发之设置UIButton的title
- Collections你用对了吗?
- linux内核设计的艺术--加载内核代码
- 换房矣患衔誓拍巢脖范揽贡拿谅辽
- 转载一篇unix网络编程unp.h解决方法
- 菜梦够抛汗仝苯娇盒沼丶妒夭空侔
- 迁移学习的相关概念
- Bellman-Ford算法
- 狡始律仁兆煌撩季涎程渭略菜撩撩
- php中mkdir()函数的权限问题
- 旅翟甲排陡纬乙挂芽继邻侍重嗜控