第一个i节点块的第一个i节点对应的是根节点,因为这个节点的izone[0]为0x027e!!!
41ed是文件类型
0x19294是根节点对应的内存i节点地址,izone[0]是0x0274
0x1fc50是根目录的buffer_head指针,既缓冲头指针,根目录的块号为0x027e,数据所在的高速缓冲区地址是0x003f400。
下面是根目录文件的内容,大小是0xb0,每个目录项是一行既16个字节,头两个字节是i节点号,剩下的14个字节是文件名。
0x002e0001 0x00000000 0x00000000 0x00000000
0001表示i节点号,2e既“.”,表示上一级目录。
0x2e2e0001 0x00000000 0x00000000 0x00000000
0001表示i节点号,2e2e既“..”,表示当前目录。
0x69620002 0x0000006e 0x00000000 0x00000000
0002是i节点号,62既“b”,69既“i”,6e既“n”,既文件bin。
0x65640003 0x00000076 0x00000000 0x00000000
0003是节点号,64,65,76代表dev,下面要用到
void mount_root(void)
{
int i,free;
struct super_block * p;
struct m_inode * mi;
if (32 != sizeof (struct d_inode))
panic("bad i-node size");
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;
}
if (!(p=read_super(ROOT_DEV))) 上篇
panic("Unable to mount root");
if (!(mi=iget(ROOT_DEV,ROOT_INO))) 下篇
panic("Unable to read root i-node");
mi->i_count += 3 ; /* NOTE! it is logically used 4 times, not 1 */
p->s_isup = p->s_imount = mi;
current->pwd = mi;
current->root = mi;
free=0;
i=p->s_nzones;
while (-- i >= 0)
if (!set_bit(i&8191,p->s_zmap[i>>13]->b_data))
free++;
printk("%d/%d free blocks\n\r",free,p->s_nzones);
free=0;
i=p->s_ninodes+1;
while (-- i >= 0)
if (!set_bit(i&8191,p->s_imap[i>>13]->b_data))
free++;
printk("%d/%d free inodes\n\r",free,p->s_ninodes);
}