U-BOOT介绍以及disk模块源码分析(下)

本文深入解析了U-BOOT中的disk模块,重点分析了Part_dos.c文件中的dos分区信息处理,包括打印分区信息、测试dos块、获取分区信息等函数。此外,还介绍了Part_iso.c和Part_mac.c中ISO和Mac分区的测试及信息获取方法。这些功能对于理解和调试U-BOOT在不同分区系统中的工作至关重要。
摘要由CSDN通过智能技术生成

Part_dos.c文件:

……

static void print_one_part (dos_partition_t *p, int ext_part_sector, int part_num)

{    //打印一个分区信息

    ……

    printf ("%5d/t/t%10d/t%10d/t%2x%s/n",

        part_num, lba_start, lba_size, p->sys_ind,

        (is_extended (p->sys_ind) ? " Extd" : ""));

}

 

static int test_block_type(unsigned char *buffer)

{    //测试块类型

    if((buffer[DOS_PART_MAGIC_OFFSET + 0] != 0x55) ||

        (buffer[DOS_PART_MAGIC_OFFSET + 1] != 0xaa) ) {

        return (-1);

    }   //不是dos

    if(strncmp(&buffer[DOS_PBR_FSTYPE_OFFSET],"FAT",3)==0)

        return DOS_PBR; /* is PBR */

    return DOS_MBR;     /* Is MBR */

}

 

int test_part_dos (block_dev_desc_t *dev_desc)

{    //测试是否为dos

    unsigned char buffer[DEFAULT_SECTOR_SIZE];

    if ((dev_desc->block_read(dev_desc->dev, 0, 1, (ulong *) buffer) != 1) ||

        (buffer[DOS_PART_MAGIC_OFFSET + 0] != 0x55) ||

        (buffer[DOS_PART_MAGIC_OFFSET + 1] != 0xaa) ) {

        return (-1);

    }

    return (0);

}

 

static void print_partition_extended (block_dev_desc_t *dev_desc, int ext_part_sector, int relative, int part_num)

{    //输出与其扩展分区表有关的分区信息

    ……

    //输出所有主要/逻辑分区

    pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET);

    for (i = 0; i < 4; i++, pt++) { //文件系统不显示MBR以外的分区

        if ((pt->sys_ind != 0) &&

            (ext_part_sector == 0 || !is_extended (pt->sys_ind)) ) {

            print_one_part (pt, ext_part_sector, part_num);

        }

        /* Reverse engr the fdisk part# assignment rule! */

        if ((ext_part_sector == 0) ||

            (pt->sys_ind != 0 && !is_extended (pt->sys_ind)) ) {

            part_num++;

        }

    }

    //处理扩展分区

    pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET);

    for (i = 0; i < 4; i++, pt++) {

        if (is_extended (pt->sys_ind)) {

            int lba_start = le32_to_int (pt->start4) + relative;

 

            print_partition_extended (dev_desc, lba_start,

                          ext_part_sector == 0  ? lba_start

                                    : relative,

                          part_num);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值