美文网首页
[OS64位][011]源码阅读:代码使用与命令行操作 程序3-

[OS64位][011]源码阅读:代码使用与命令行操作 程序3-

作者: AkuRinbu | 来源:发表于2019-05-07 19:58 被阅读0次

学习笔记

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

相关文章

网友评论

      本文标题:[OS64位][011]源码阅读:代码使用与命令行操作 程序3-

      本文链接:https://www.haomeiwen.com/subject/byxyoqtx.html