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

【u-boot】u-boot支持的文件系统

一、概览

u-boot支持的文件系统如下:

img

二、源码剖析

(1)strcut fstype_info

文件系统相关的操作代码实现在对应名称的名录中,对于u-boot来说,实现了一个上层接口:fs.c。在该文件中使用strcut fstype_info描述一个文件系统的实例和操作接口:

struct fstype_info {int fstype;char *name;/** Is it legal to pass NULL as .probe()'s  fs_dev_desc parameter? This* should be false in most cases. For "virtual" filesystems which* aren't based on a U-Boot block device (e.g. sandbox), this can be* set to true. This should also be true for the dumm entry at the end* of fstypes[], since that is essentially a "virtual" (non-existent)* filesystem.*/bool null_dev_desc_ok;int (*probe)(struct blk_desc *fs_dev_desc,disk_partition_t *fs_partition);int (*ls)(const char *dirname);int (*exists)(const char *filename);int (*size)(const char *filename, loff_t *size);int (*read)(const char *filename, void *buf, loff_t offset,loff_t len, loff_t *actread);int (*write)(const char *filename, void *buf, loff_t offset,loff_t len, loff_t *actwrite);void (*close)(void);int (*uuid)(char *uuid_str);/** Open a directory stream.  On success return 0 and directory* stream pointer via 'dirsp'.  On error, return -errno.  See* fs_opendir().*/int (*opendir)(const char *filename, struct fs_dir_stream **dirsp);/** Read next entry from directory stream.  On success return 0* and directory entry pointer via 'dentp'.  On error return* -errno.  See fs_readdir().*/int (*readdir)(struct fs_dir_stream *dirs, struct fs_dirent **dentp);/* see fs_closedir() */void (*closedir)(struct fs_dir_stream *dirs);
};

上述结构体各字段含义如下:

(1)int fstype;:整数ID,用来识别文件系统类型(例如FS_TYPE_FAT/FS_TYPE_EXT等)。fstypes[]中按此字段匹配/查找。

(2)char *name;:可读字符串名(通常是静态字符串字面量)。建议驱动把常量字符串指针放在这里(不要在注册后free),因为fstypes[]是静态表,名字应有静态生命周期。

(3)bool null_dev_desc_ok;:指示当fs_dev_descstruct blk_desc *)为NULL时,probe()是否仍然可以被调用并执行。对于基于块设备的真实文件系统(sd/mmc/usb),通常不允许设置为NULL。对于“虚拟”文件系统(例如sandbox /hostfs/某些内存/虚拟后端),可以设为true,允许无块设备上下文。源码里对这个字段有注释说明。

(4)probe():用来“识别 / 打开 / 初始化”指定设备上的该种文件系统。文件系统层会遍历fstypes[],并调用每个info->probe()来检测是否为该文件系统。如果probe()返回“0 表示识别成功”时,fs层将接受该类型并把它标记为当前文件系统。->probe()的调用发生在两个函数中:fs_set_blk_dev()fs_set_blk_dev_with_part()

(4-1)fs_set_blk_dev() 根据指定的设备和分区信息,自动探测可用的文件系统类型,并准备好全局文件系统环境(fs_type, fs_dev_desc, fs_partition)以供后续读写操作使用。换句话说,这是文件系统层在调用fs_read()fs_ls()之前必须执行的“挂载”动作。

int fs_set_blk_dev(const char *ifname, const char *dev_part_str, int fstype)
{struct fstype_info *info;int part, i;
#ifdef CONFIG_NEEDS_MANUAL_RELOCstatic int relocated;if (!relocated) {for (i = 0, info = fstypes; i < ARRAY_SIZE(fstypes);i++, info++) {info->name += gd->reloc_off;info->probe += gd->reloc_off;info->close += gd->reloc_off;info->ls += gd->reloc_off;info->read += gd->reloc_off;info->
http://www.dtcms.com/a/509205.html

相关文章:

  • 杭州职工业能力建设网站青岛seo全网营销
  • 哪家公司网站建设好点wordpress下载主题模板
  • 【强化学习】RLMT强制 CoT提升训练效果
  • 左Shift键失灵解决办法
  • 如何确定网站建设空间wordpress安装到本地
  • 建设网站使用的工具wordpress single模板
  • 网站域名注册费用哔哩哔哩网页入口
  • 承德市外贸网站建设网站如何建设推广
  • SVN 关于 ! 的解决
  • 如何优化自己的网站哪些建材网站可以做宣传
  • 黎平网站开发辽宁网站建设价格
  • dotnet-sdk-5.0.400-linux-x64.tar.gz 安装教程(Linux 手动安装 .NET 5.0.400 SDK 步骤)
  • 中医基础知识和核心知识
  • 校园文化宣传主题网站的建设唯美古风ppt模板
  • 珠海建网站的网络公司打开网站搜索
  • 上海营销型网站建设wap网站模板下载
  • 数字货币:从“虚拟金库”到法定货币的进化
  • 做博物馆网站最重要性企业网站营销案例
  • 企业网络搭建案例seo排名优化价格
  • 输入n个整数,输出其中最小的k个
  • 广州市增城区建设局网站是什么赣州市经开区住房和建设局网站
  • 网站导航条设计苏州网站建设渠道
  • 做网上夫妻去哪个网站如何分析竞争对手网站
  • 金华自助建站抖音免费推广网站
  • php的网站怎么做的成都区块链网站开发
  • 深圳网站建设专家网站怎么集成支付宝
  • 免费建手机网站网站安全检测腾讯
  • 《 Linux 点滴漫谈: 三 》掌控终端:让 Shell 成为你的系统魔杖
  • LangGraph 记忆系统实战:反馈循环 + 动态 Prompt 让 AI 持续学习
  • 如何用手机制作网站版面设计的原则