1 /** 2 * @file MBR.h 3 * @author fslongjin (longjin@RinGoTek.cn) 4 * @brief MBR分区表 5 * @version 0.1 6 * @date 2022-04-19 7 * 8 * @copyright Copyright (c) 2022 9 * 10 */ 11 #pragma once 12 #include <common/glib.h> 13 #include <common/blk_types.h> 14 15 #define MBR_MAX_AHCI_CTRL_NUM 4 // 系统支持的最大的ahci控制器数量 16 #define MBR_MAX_AHCI_PORT_NUM 32 // 系统支持的每个ahci控制器对应的MBR磁盘数量(对应ahci磁盘号) 17 18 /** 19 * @brief MBR硬盘分区表项的结构 20 * 21 */ 22 struct MBR_disk_partition_table_entry_t 23 { 24 uint8_t flags; // 引导标志符,标记此分区为活动分区 25 uint8_t starting_head; // 起始磁头号 26 uint16_t starting_sector : 6, // 起始扇区号 27 starting_cylinder : 10; // 起始柱面号 28 uint8_t type; // 分区类型ID 29 uint8_t ending_head; // 结束磁头号 30 31 uint16_t ending_sector : 6, // 结束扇区号 32 ending_cylinder : 10; // 结束柱面号 33 34 uint32_t starting_LBA; // 起始逻辑扇区 35 uint32_t total_sectors; // 分区占用的磁盘扇区数 36 37 } __attribute__((packed)); 38 39 /** 40 * @brief MBR磁盘分区表结构体 41 * 42 */ 43 struct MBR_disk_partition_table_t 44 { 45 uint8_t reserved[446]; 46 struct MBR_disk_partition_table_entry_t DPTE[4]; // 磁盘分区表项 47 uint16_t BS_TrailSig; 48 } __attribute__((packed)); 49 50 extern struct MBR_disk_partition_table_t MBR_partition_tables[MBR_MAX_AHCI_CTRL_NUM][MBR_MAX_AHCI_PORT_NUM]; // 导出全局的MBR磁盘分区表 51 52 /** 53 * @brief 读取磁盘的分区表 54 * 55 * @param ahci_ctrl_num ahci控制器编号 56 * @param ahci_port_num ahci端口编号 57 * @param buf 输出缓冲区(512字节) 58 */ 59 int MBR_read_partition_table(struct blk_gendisk* gd, void *buf);