no bootable device 华为笔记本no boot device
主引导(MBR)程序
建立 mbr.S 主引导汇编程序:
引导成功后将会输出:My MBR
;主引导程序
SECTION MBR vstart=0x7c00 ;程序开始的地址
mov ax,cs ;使用cs初始化其他的寄存器
mov ds,ax ;因为是通过jmp 0:0x7c00到的MBR开始地址
mov es,ax ;所以此时的cs为0,也就是用0初始化其他寄存器
mov ss,ax ;此类的寄存器不同通过立即数赋值,采用ax中转
mov fs,ax
mov sp,0x7c00 ;初始化栈指针
;清屏利用0x10中断的0x6号功能
mov ax,0x600
mov bx,0x700
mov cx,0
mov dx,0x184f
int 0x10
;获取光标位置
mov ah,3 ;3号子功能获取光标位置
mov bh,1 ;bh寄存器存储带获取光标位置的页号,从0开始,此处填1可以看成将光标移动到最开始
int 0x10
;打印字符串
mov ax,message
mov bp,ax
mov cx,6 ;字符串长度,不包括&39; &39;
mov ax,0x1301
mov bx,0x2
int 0x10
jmp $
message db &34;My MBR&34;
times 510-($-$) db 0
db 0x55,0xaa
将mbr.S 主引导汇编程序放到bochs的主目录下,通过NASM编译汇编代码,前面已经介绍过nasm和bochs的安装。
编译执行: nasm -o mbr.bin mbr.S
进入bochs目录,执行bximge
输入1 回车, 去建立硬盘镜像
根据提示进行输入,硬盘的镜像文件名为:hd60M.img,如上图
在bochs的主目录下, 修改bochsrc文件
修改为:ata0-master: type=disk, path=&34;hd60M.img&34;, mode=flat
启动项为 disk, 如下图
下一步是把这个512字节的文件写入0盘0道0扇区
执行:
dd if=mbr.bin of=/usr/local/bin/hd60M.img bs=512 count=1 conv=notrunc
模拟硬盘启动
1.执行 bochs -f bochsrc 弹出Bochs x86-64 emulator窗口,但是窗口一片黑
2.切换回终端界面,可以看到已经选择了[6] 开始模拟,输入c 回车
弹出如下界面:
bachs x86-64模拟器 输出My MBR
说明已成功从我们自己制作的硬盘镜像完成主引导启动。
可能的启动失败错误:Message: No bootable device。 如下图
选择Continue继续出现下图 Boot failed: not a bootable disk
说明mbr.S主引导程序有问题。可以查看编译后的二进制文件mbr.bin的尺寸大小
如果超过512字节, 说明mbr.S源文件有问题,我的开始是mbr.S源文件中指令参数之间有多余的空格,删除后重新编译 nasm -o mbr.bin mbr.S
编译后查看mbr.bin文件大小,为512字节
重新执行dd命令后,就正常了。
dd if=mbr.bin of=/usr/local/bin/hd60M.img bs=512 count=1 conv=notrunc
免责声明:本文章由会员“张书东”发布如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务如因作品内容、版权和其他问题请于本站联系