学习笔记
使用教材(配书源码以及使用方法)
《一个64位操作系统的设计与实现》
http://www.ituring.com.cn/book/2450
https://www.jianshu.com/p/28f9713a9171
需要的源码
- 程序3-3
boot.asm
loader.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)