[OS64位][011]源码阅读:代码使用与命令行操作 程序3-3 boot.asm loader.asm 以及 mount 使FAT文件系统生效

学习笔记

使用教材(配书源码以及使用方法)
《一个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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容