linux内核bootsect.S和setup.S流程
2015-07-26 19:13
495 查看
bootsect.S和setup.S两个文件是为了完成将内核加载到内存,并跳转到内核执行而写的。bootsect.S是由BIOS加载到内存的,只有512个字节,无法完成跳转到内核执行的任务,所以写了setup.S文件,该文件有2KB大小,当然该文件可以更加的大。该文件完成进入32位模式并跳转到内核执行的任务,且该文件实现了通过BIOS中断获取硬件信息的任务,当然该任务也可以有内核完成。
bootsect.s流程
将0x07c00的代码移动到0x90000处并跳转到0x90000处继续执行。
(0x07c00的代码BOIS加载的引导扇区)
跳转后重新设置寄存器(设置段寄存器为0x9000,sp为0x4000-12,代码段,数据段,堆栈段都设置完毕)
从内存0x00078复制原软驱参数表到0x94000-12处,然后修改表中的每磁道最大扇区数为18.
加载setuo模块(后面的4个扇区)到内存0x90200处。如果出错显示提示,重试。
加载system模块至0x10000处
确定根设备系统号
setup.s流程
使用中断获取所需信息
将0x100000处程序移动到0x01000处
加载暂时使用的ldt和gdt,gdt基地址为0x00000000
开始32为地址线
初始化中断控制器
开启32位保护模式并跳转到0x00001000处
bootsect.s流程
将0x07c00的代码移动到0x90000处并跳转到0x90000处继续执行。
(0x07c00的代码BOIS加载的引导扇区)
跳转后重新设置寄存器(设置段寄存器为0x9000,sp为0x4000-12,代码段,数据段,堆栈段都设置完毕)
从内存0x00078复制原软驱参数表到0x94000-12处,然后修改表中的每磁道最大扇区数为18.
加载setuo模块(后面的4个扇区)到内存0x90200处。如果出错显示提示,重试。
加载system模块至0x10000处
确定根设备系统号
setup.s流程
使用中断获取所需信息
将0x100000处程序移动到0x01000处
加载暂时使用的ldt和gdt,gdt基地址为0x00000000
开始32为地址线
初始化中断控制器
开启32位保护模式并跳转到0x00001000处
相关文章推荐
- linux查看jar包内文件命令
- Linux下如何安全退出线程
- 解决linux下set_loginuid failed opening loginuid报错问题
- linux ssh 别名登录小技巧
- 【Vbox】centos虚拟机安装usb网卡驱动
- 【Vbox】centos虚拟机安装usb网卡驱动
- Linux md raid
- linux多线程驱动中调用udelay()对整个系统造成的影响(by liukun321咕唧咕唧)
- SecureCRT 连接本地linux虚拟机(二)
- Linux devive mapper multipath
- linux系统编程:线程同步-信号量(semaphore)
- 本地虚拟机下的centOS安装jdk1.7
- Linux Min装机--配置JDK替换OpenJDK
- Linux监控和安全运维---zabbix安装及部署
- Linux监控和安全运维---nagios安装及部署
- 在GNU/Linux下将CD音乐转为mp3
- Linux监控和安全运维--cacti安装部署
- 在linux6上安装RAC时多路径的权限设置
- linux中文字符显示
- linux内核参数注释与优化