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


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

      •   

     

     

     

     

     

  • 相关阅读:
    闭包 与 装饰器
    Linux常用命令 (二)
    day1 linux常用命令(一)
    📎 .xib
    📎 Emoji 前端转换
    📎 钉钉微应用( 新启项目Weex H5 )
    📎 ROR:常用GEM
    📎 AndroidNative【ING...】
    🆕 ror方法
    安装centos7
  • 原文地址:https://www.cnblogs.com/YXBLOGXYY/p/16055805.html
Copyright © 2020-2023  润新知