学习笔记
使用教材(配书源码以及使用方法)
《一个64位操作系统的设计与实现》
http://www.ituring.com.cn/book/2450
https://www.jianshu.com/p/28f9713a9171
需要的源码
- 程序3-3
boot.asmloader.asm
程序3-3 boot.asm
201 Label_File_Loaded:
202
203 00000134 EA00000010 jmp BaseOfLoader:OffsetOfLoader
- 等价于
CS:IP = 0x1000:0x00,跳转到 内存地址0x10000处执行; - 内存地址
0x10000是目标文件loader.bin被读入到的目标缓冲区起始地址;
程序3-3 loader.asm
- 调用 INT 10 中断,在屏幕上
第2行、第0列显示字符串"Start Loader";
代码使用与命令行操作
- 0、编译源码
[anno@localhost Desktop]$ nasm boot.asm -o boot.bin -l boot.lst
[anno@localhost Desktop]$ nasm loader.asm -o loader.bin -l loader.lst
- 1、制作一块1.44MB的软盘镜像
boot.img
[anno@localhost ~]$ bximage
========================================================================
bximage
Disk Image Creation / Conversion / Resize and Commit Tool for Bochs
$Id: bximage.cc 12690 2015-03-20 18:01:52Z vruppert $
========================================================================
1. Create new floppy or hard disk image
2. Convert hard disk image to other format (mode)
3. Resize hard disk image
4. Commit 'undoable' redolog to base image
5. Disk image info
0. Quit
Please choose one [0] 1
Create image
Do you want to create a floppy disk image or a hard disk image?
Please type hd or fd. [hd] fd
Choose the size of floppy disk image to create, in megabytes.
Please type 160k, 180k, 320k, 360k, 720k, 1.2M, 1.44M, 1.68M, 1.72M, or 2.88M.
[1.44M] 1.44M
What should be the name of the image?
[a.img] boot.img
Creating floppy image 'boot.img' with 2880 sectors
The following line should appear in your bochsrc:
floppya: image="boot.img", status=inserted
- 2、将
boot.bin写入软盘boot.img
dd 命令的 conv=notrunc 字段很重要,保证软盘文件不截断
[anno@localhost Desktop]$ ls
bochsrc boot.bin boot.lst loader.asm loader.lst
boot.asm boot.img gnome-terminal.desktop loader.bin save
[anno@localhost Desktop]$ dd if=boot.bin of=boot.img bs=512 count=1 conv=notrunc
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.00898087 s, 57.0 kB/s
- 3、将
media文件夹 挂载到 软盘镜像boot.img
(1)在桌面新建一个文件夹 叫做 media
(2)将 media 通过 mount命令挂载到了 boot.img由于
boot.img已经拥有了 FAT12 文件系统(说白了,就是可以解析FAT表项的能力,代码实现于Func_GetFATEntry部分),并且mount 命令 可以实现 FAT数据区与根目录区的联系,从而达到 只需要操作media文件夹 实质就是操作boot.img的效果(说白了,如果我们往挂载好之后的media分区复制数据,其实就是把数据复制到boot.img)
[anno@localhost Desktop]$ ls
bochsrc boot.bin boot.lst loader.asm loader.lst
boot.asm boot.img gnome-terminal.desktop loader.bin save
[anno@localhost Desktop]$ sudo mount boot.img media -t vfat -o loop
[sudo] password for anno:
[anno@localhost Desktop]$ sudo cp loader.bin media
[anno@localhost Desktop]$ sync

挂载前后对比 黄色部分标出挂载成功
- 4、启动 虚拟机 依次按下
6【回车】c【回车】
[anno@localhost Desktop]$ bochs -f ./bochsrc

运行结果
参考资料
- 什么是挂载?mount的用处在哪?
5.这时提问者使用了
mount /dev/sdb1 ~/Share/,把新硬盘的区sdb1挂载到工作目录的/Share/文件夹下,之后访问这个/Share/文件夹就相当于访问这个硬盘2的sdb1分区了。对/Share/的任何操作,都相当于对sdb1里文件的操作。
https://www.cnblogs.com/faithfu/p/9466742.html)