os_kernel_lab/related_info/lab1/lab1-boot-with-grub2-in-udisk.md

73 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 制作在真机上u盘启动的ucore lab
## 编译 ucore lab for 真机上u盘启动
请参考
https://github.com/chyyuu/ucore_lab/blob/lab1_X/labcodes_answer/lab1_result/readme.md#for-kernel-with-grub-loading-in-real-x86-machine
编译出 ucore lab1 kernel: grub_kernel
## 格式化u盘
插入u盘执行如下命令
```
df
```
可以看到
```
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda5 58492984 49662756 8830228 85% /
...
/dev/sdb1 31473632 7648 31465984 1% /media/chyyuu/MULTIBOOT
```
其中最后一个`/dev/sdb1`就是u盘的标记。
接下来启动一个shell并执行如下命令操作
```
sudo su #切换到root管理员身份
fdisk -l #查询现挂载有的存储设备记住你的u盘标记,,比如 /dev/sdb1
fdisk /dev/sdb1 #注意把sdb1换成你机器上看到的u盘标记接下来在fdisk界面操作
命令(输入 m 获取帮助)d #删除现存分区,如果有多个分区,则都删除掉
命令(输入 m 获取帮助)n #创建一个新分区,下面的操作都是用于创建新分区
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
输入 p #创建主分区
分区号 (1-4, default 1):
输入 1 #创建第一个分区
First sector (2048-62978047, default 2048):
输入 [回车] #缺省使用默认值第一个柱面
Last sector, +sectors or +size{K,M,G,T,P} (2048-62978047, default 62978047):
再次输入[回车] #缺省使用默认值作为最后一个柱面
命令(输入 m 获取帮助)a #活动分区)
命令(输入 m 获取帮助)w #将修改写入u盘并退出fdisk
#接下来又回到了shell
umount /dev/sdb1 #卸载已经挂载的分区
mkfs.vfat -F 32 -n MULTIBOOT /dev/sdb1 #将分区格式化为fat32
```
## 在u盘上安装grub2
继续执行如下命令操作
```
mkdir /media/MULTIBOOT/ #创建目录用于挂载和拷贝文件
mount /dev/sdb1 /media/MULTIBOOT/ #挂载u盘
grub-install --force --no-floppy --root-directory=/media/MULTIBOOT/ /dev/sdb1 #安装grub2
```
此时在u盘根目录下将出现`/boot/grub/`目录。现在还需在u盘`/boot/grub/`目录下创建一个启动菜单文件`grub.cfg`。
其内容如下:
```
menuentry 'ucore-lab1' {
knetbsd /boot/ucore-lab1
}
```
创建完`grub.cfg`文件后,再把编译生成的`grub_kernel`拷贝到`/media/MULTIBOOT/boot`目录下。
```
cp /YOU_DIR/ucore_lab/labcodes_answer/lab1_result/bin/grub_kernel /media/MULTIBOOT/boot
```
这时,准备工作完成了。
## 启动u盘运行ucore lab
重启机器选择u盘启动可能需要修改BIOS的启动选项可以看到grub的选项菜单点选`ucore_lab1`
就可以看到ucore lab1在真机上运行了。