初始
安装根文件系统
// 该函数属于系统初始化操作的一部分。函数首先初始化文件表数组file_table[]和超级块表(数组)
// 然后读取根文件系统超级块,并取得文件系统根i节点。最后统计并显示出根文件系统上的可用资源
// (空闲块数和空闲i节点数)。该函数会在系统开机进行初始化设置时被调用。
void mount_root(void)
{
int i,free;
struct super_block * p;
struct m_inode * mi;
// 若磁盘i节点结构不是32字节,则出错停机。该判断用于防止修改代码时出现不一致情况。
if (32 != sizeof (struct d_inode))
panic("bad i-node size");
// 首先初始化文件表数组(共64项,即系统同时只能打开64个文件)和超级块表。这里将所有文件
// 结构中的引用计数设置为0(表示空闲),并发超级块表中各项结构的设备字段初始化为0(也
// 表示空闲)。如果根文件系统所在设备是软盘的话,就提示“插入根文件系统盘,并按回车键”,
// 并等待按键。
for(i=0;i<NR_FILE;i++)
file_table[i].f_count=0; // 初始化文件表
if (MAJOR(ROOT_DEV) == 2) {
printk("Insert root floppy and press ENTER"); // 提示插入根文件系统盘
wait_for_keypress();
}
for(p = &super_block[0] ; p < &super_block[NR_SUPER] ; p++) {
p->s_dev = 0;
p->s_lock = 0;
p->s_wait = NULL;
}
void wait_for_keypress(void)
{
sleep_if_empty(&tty_table[0].secondary);
}
参考
https://blog.csdn.net/ac_dao_di/article/details/54606790