在OS的文件系统中,需要预先将磁盘格式化为FAT32,从而进行相应的底层操作。然而对于VMware玩家而言,无法像操作物理硬盘一样直接进行格式化分区,因此需要间接进行相关的方法。
一、准备工作
- 一个虚拟机中的操作系统,本文选用了ubuntu。
- 虚拟机中磁盘格式化工具,本文选用了gparted。
- 实现OS和磁盘操作OS的磁盘共享操作,参考链接。由于实现OS的硬盘操作命令是基于IDE接口,因此磁盘类型和VMware配置文件也要相应的改成IDE,注意两个虚拟机的节点要设置为一致,配置文件修改的部分也需要一致。
二、磁盘格式化
- 执行命令
sudo gparted
- 创建分区表
- 创建分区
执行操作即可。
三、原文的一些bug
- timer.c中没有对变量jiffies清零,导致timer的打印无限触发,调整:
void do_timer(void * data)
{
struct timer_list * tmp = container_of(list_next(&timer_list_head.list),struct timer_list,list);
while((!list_is_empty(&timer_list_head.list)) && (tmp->expire_jiffies <= jiffies))
{
del_timer(tmp);
tmp->func(tmp->data);
tmp = container_of(list_next(&timer_list_head.list),struct timer_list,list);
jiffies = 0;//add
}
color_printk(RED,WHITE,"(HPET:%ld)",jiffies);
}
- schedule中需要屏蔽中断,否则会卡死在disk_handler中,估计是因为哪里死锁了。
void schedule()
{
struct task_struct *tsk = NULL;
cli();
...
sti();
}