linux0.11 minix1.0文件系统 下篇 根节点的 buffer_head结构,根节点内容

linux0.11 minix1.0文件系统 下篇 根节点的 buffer_head结构,根节点内容_第1张图片

第一个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);
}



你可能感兴趣的:(linux0.11 minix1.0文件系统 下篇 根节点的 buffer_head结构,根节点内容)