当前位置: 首页 > news >正文

【u-boot】u-boot的分区支持

一、源码结构解读

在u-boot源码中对分区表的支持代码实现在/disk目录中,原生目录结构如下:

img

特定芯片厂家将会开发自己的分区类型,这时候这些文件也放置到/disk目录中。

使用如下命令:

part list mmc 0

可查看具体设备的所有分区信息(包括分区类型),上述示例是查看mmc 0设备的分区类型。例如:

img

u-boot支持分区类型如下表所示:

分区类型源码文件详细描述
DOS/MBRpart_dos.c解析 DOS/MBR (Master Boot Record) 分区表。
GPTpart_efi.c解析 GPT (GUID Partition Table),即 EFI/UEFI 分区格式。
ISO (CD-ROM)part_iso.c解析 ISO 9660 分区(光盘镜像格式)。
Macpart_mac.c/part_mac.h解析 Apple Partition Map (APM)。
Amigapart_amiga.c/part_amiga.h解析 Amiga Rigid Disk Block (RDB) 分区表格式。

二、分区类型的实现

在u-boot中,当需要实现分区类型的时候,需要使用U_BOOT_PART_TYPE声明一个新的U-Boot分区类型驱动。例如dos分区类型的实现:

U_BOOT_PART_TYPE(dos) = {.name		= "DOS",.part_type	= PART_TYPE_DOS,.max_entries	= DOS_ENTRY_NUMBERS,.get_info	= part_get_info_ptr(part_get_info_dos),.print		= part_print_ptr(part_print_dos),.test		= part_test_dos,
};

U_BOOT_PART_TYPE宏的实现本质是创建struct part_driver类型的全局结构变量,并将其放置到特定段中。struct part_drvier实现如下:

struct part_driver {const char *name;int part_type;const int max_entries;	/* maximum number of entries to search *//*** get_info() - 获取有关分区的信息** @dev_desc:	Block device descriptor* @part:	Partition number (1 = first)* @info:	Returns partition information*/int (*get_info)(struct blk_desc *dev_desc, int part,disk_partition_t *info);/*** print() - 打印分区表信息** @dev_desc:	Block device descriptor*/void (*print)(struct blk_desc *dev_desc);/*** test() - Test if a device contains this partition type** @dev_desc:	Block device descriptor* @return 0 if the block device appears to contain this partition*	   type, -ve if not*/int (*test)(struct blk_desc *dev_desc);
};

在创建特定分区表驱动的时候需要填充上述结构中的组成元素。

->print回调的调用发生在执行part_print()的时候,函数调用链如下图所示:

img

->get_info回调的调用发生在执行part_get_info_by_name_option()的时候,函数调用链如下:

img

http://www.dtcms.com/a/506876.html

相关文章:

  • CG-FS-A3 风速传感器 485型 体积小巧 便捷安装 三杯式 聚碳材质
  • http和https区别如何转https
  • 国外的主要电机生产厂商
  • 英伟达公司发展历史
  • 网站首页文件名通常是无锡市建设安全监督网站
  • SQL之参数类型讲解——从基础类型到动态查询的核心逻辑
  • Linux中匿名设备和安全相关以及VFS的slab缓存对象创建
  • B.NET编写不阻塞UI线程的同步延时
  • 论文泛读:DYNAPROMPT: DYNAMIC TEST-TIME PROMPT TUNING(动态测试时调优)
  • 做 58 那样的网站北京公司网页设计
  • PyTorch实战(9)——从零开始实现Transformer
  • 18.SELInux安全性
  • Layui连线题编辑器组件(ConnectQuestion)
  • 电影网站加盟可以做么网奇seo培训官网
  • 【Linux】Socket编程TCP
  • Debian编译Qt5
  • [3-03-01].第07节:搭建服务 - 服务重构cloud-consumer-ocommon
  • Ubuntu Certbot版本查询失败?Snap安装后报错终极修复指南(通用版)
  • Kafka底层解析:可靠性与高性能原理
  • 分布式链路追踪中的上下文传播与一致性维护技术
  • 为已有nextjs项目添加supabase数据库,不再需要冗余后端
  • 网站建设怎样上传程序微信网站搭建多少钱
  • rabbitmq在微服务中配置监听开关
  • 下一代时序数据库标杆:Apache IoTDB架构演进与AIoT时代的数据战略
  • k8s中的控制器
  • Blender入门学习02
  • 动态规划的“数学之魂”:从DP推演到质因数分解——巧解「只有两个键的键盘」
  • Blender入门学习01
  • 网站开发word文档精品简历模板网站
  • WrenAI:企业级AI数据分析平台技术解析