设置工作模式与环境(上):建立计算机
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]
- 设置工作模式与环境(中):建造二级引导器
- 【Linux】设置环境变量方便进入工作目录
- STM32需要设置晶振管脚OSC_IN,OSC_OUT模式才能正常工作
- Centos环境下手动设置-网络参数配置-网络挨排错顺序-设置网卡为上网模式的设定
- Hadoop单机模式安装-(1)安装设置虚拟环境
- 设置MySQL复制时,replicate-ignore-db模式下如何正常工作
- .bashrc文件: ros工作环境设置
- 如何在Linux环境下建立Git Server并设置用户
- 正确设置网卡工作模式
- 建立Go工作环境
- java学习之旅15、16--eclipse开发环境的使用_建立java项目_运行java项目,eclipse运行程序的问题(src和bin问题)_debug模式
- Path环境变量是什么?有什么用?怎么工作?JDK,JRE,JVM,集成开发工具是什么?有什么用?怎么工作?JDK安装包文件结构?有必要设置Path环境变量?Eclipse和IDEA开发工具的运作
- WebBrowser与IE的关系,如何设置WebBrowser工作在IE9模式下?
- 工作记录--WPF自定义控件,实现一个可设置编辑模式的TextBox
- 用TP-LINK 无线网卡设置无线工作环境
- 设置MySQL复制时,replicate-ignore-db模式下如何正常工作
- Windos下用setx.exe命令行模式下永久设置系统环境变量
- 加速了土壤深根技术,建立了完善的技术体系,改变思维模式,引创造新的工作流程。。。
- 设置一个可以工作的环境
- 【Linux 环境变量】设置环境变量,用于方便进入工作目录