设置工作模式与环境(上):建立计算机

1)一个内核工程需要多个文件,如果让GRUB大兄弟一个一个文件去加载,那他得累死,那我们应该怎么办?

  • 把多个文件合起来,这个合起来的文件叫内核映像文件,GRUB加载它就行了。

2)这个内核映像文件有了,那么怎样让GRUB找到他呢?你得告诉我一些提示吧,这就是映像文件的格式,那映像文件的格式是怎样的呢?

  • 有个4KB的GURB头,来给GRUB带路,然后是总文件描述符,分文件描述符。这些描述符是C语言写的

3)映像文件有了,不可能让他裸奔。那怎么打包呢?

  •  
     lmoskrlimg -m k -lhf GRUB头文件 -o 映像文件 -f 输入的文件列表
     -m 表示模式 只能是k内核模式
     -lhf 表示后面跟上GRUB头文件
     -o 表示输出的映像文件名
     -f 表示输入文件列表
     例如:lmoskrlimg -m k -lhf grubhead.bin -o kernel.img -f file1.bin file2.bin file3.bin file4.bin

4)现在我们映像文件打包好了,那么我们该准备虚拟机了,方便用来调试运行我们写的操作系统,那使用什么虚拟机最方便呢?

  • virtualbox,官网下载windows版本的就可以

5)接下来我们手工生产硬盘,为什么需要硬盘呢?

  • 没有硬盘的话虚拟机不知道去哪里加载数据

6)我们需要去买一个实际硬盘吗?

  • 大可不必,linux中万事万物皆文件。直接生产个文件来代替硬盘。

7)手工生产硬盘的详细步骤是怎样的?

  • dd命令先生产个文件

     
     dd bs=512 if=/dev/zero of=hd.img count=204800
     
     ;bs:表示块大小,这里是512字节
     ;if:表示输入文件,/dev/zero就是Linux下专门返回0数据的设备文件,读取它就返回0
     ;of:表示输出文件,即我们的硬盘文件。
     ;count:表示输出多少块
  • 给这个文件(也可以叫虚拟硬盘)建立一定格式。

    • 把文件变为linux下的回环设备,麻痹linux让它以为这是个实际盘而不是文件

       
       sudo losetup /dev/loop0 hd.img (注意这里要是不空闲的话用losetup去找一块空的,显示1-7 那说明8是空的)
    • 给我们这个假硬盘建个文件系统

       
       sudo mkfs.ext4 -q /dev/loop0  
  • 把hd.img文件当中块设备挂载到事先建立的hdisk目录下。

     
     sudo mount -o loop ./hd.img ./hdisk/ ;挂载硬盘文件
     sudo mkdir ./hdisk/boot/ ;建立boot目录

    到这里我们可以看到hdisk目录下多了一个boot目录

  • 借助linux已有的GRUB安装程序来开始安装GRUB

     
     第一步挂载虚拟硬盘文件为loop0回环设备
     sudo losetup /dev/loop0 hd.img
     sudo mount -o loop ./hd.img ./hdisk/ ;挂载硬盘文件
     第二步安装GRUB
     sudo grub-install --boot-directory=./hdisk/boot/ --force --allow-floppy /dev/loop0
     ;--boot-directory 指向先前我们在虚拟硬盘中建立的boot目录。
     ;--force --allow-floppy :指向我们的虚拟硬盘设备文件/dev/loop0

    现在/hdisk/boot/目录下多了一个grub目录,那就是安装成功了。

  • 在/hdisk/boot/grub下面建一个grub.cfg配置文件,GRUB就是靠它去找我们操作系统映像文件的。

     
     menuentry 'HelloOS' {
     insmod part_msdos
     insmod ext2
     set root='hd0' #我们的硬盘只有一个分区所以是'hd0'
     multiboot2 /boot/HelloOS.eki #加载boot目录下的HelloOS.eki文件
     boot #引导启动
     }
     set timeout_style=menu
     if [ "${timeout}" = 0 ]; then
      set timeout=10 #等待10秒钟自动启动
     fi
  • 现在这个虚拟硬盘的格式是linux才认识的,virtualbox认识的是vdi格式的,所以要转换一下

     
     VBoxManage convertfromraw ./hd.img --format VDI ./hd.vdi
     ;convertfromraw 指向原始格式文件
     ;--format VDI 表示转换成虚拟需要的VDI格式
  • 用window和linux文件传输工具把hd.vdi文件传到windows

     

     

  • 接下来在windows打卡virtualbox,新建虚拟机,建的时候选择使用已有硬盘然后把这个hd.vdi导进去,启动操作系统就可以了。

    •   

       

       

 

 

 

 

 

 

posted on   Love&Share  阅读(224)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示