U盘启动Linux1.0

本文描述如何对linux1.0内核修改使其能从U盘启动。

内核加载到内存是在bootsect.S文件中处理的。bootsect.S本身写在了启动设备第一个扇区。bootsect.S加载启动设备后面4个扇区,做一些启动内核前的准备。接着,加载启动设备后面的扇区–内核到内存中。

bootsect.S中的汇编代码是读取软盘的扇区的,所以,将内核文件写入U盘也是无法使用的。所以需要修改bootsect.S中加载扇区的代码。

加载扇区,主要使用的是BIOS提供的中断—int 0x13。

        INT 0x13,功能02  
参数:  
    AH      02  
    AL      读取扇区数  
    CH      柱面[0, 79]  
    CL      扇区[1, 18]  
    DH      磁头[0, 1]  
    DL      驱动器(0x0 ~ 0x7f表示软盘,0x80 ~ 0xff表示硬盘)  
    ES:BX   缓冲区地址,即数据读到这里  
返回值:  
    CF = 0表示操作成功,此时AH=0,AL=传输的扇区数  
    CF = 1即carry位置位(可用JC表示跳转)表示操作失败,AH=状态代码  

其中,需要注意的是,BIOS启动时将U盘看成硬盘处理。所以驱动器用0x80。

除了读取扇区,在操作扇区前还需要使用 int 0x13获取硬盘信息。

        INT 0x13,功能08
参数:
    AH        08H
    DL        驱动器,00H~7FH:软盘;80H~0FFH:硬盘
返回:
CF=1——操作失败,AH=状态代码
CF=0 成功
BL=01H — 360K
=02H — 1.2M
=03H — 720K
=04H — 1.44M
=05H   ??
=06H  2.88M
=10H  ATAPI可移动介质
CH=最大柱面号的低8位   low eight bits of maximum cylinder number(柱面号从0开始算)
CL的位7-6=最大柱面号的高2位 high two bits of maximum cylinder number
CL的位5-0=最大扇区号 maximum sector number(扇区号从1开始算)
DH=最大磁头号 maximum head number(磁头号从0开始算)
DL=驱动器数 number of drives
ES:DI=磁盘驱动器参数表地址(只软驱)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值