您的位置:首页 > 理论基础

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

2022-03-25 17:24 1076 查看

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导进去,启动操作系统就可以了。

      [ul]   

       

       

    [/ul]

     

     

     

     

     

     

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: 
    相关文章推荐