gd->fdt_blob

gd->fdt_blob 是在 U-Boot 中用于指向设备树 blob(binary blob)的指针。设备树 blob 是一种扁平化的设备树表示,它包含了硬件设备的描述信息,这些信息在系统启动时被 U-Boot 或操作系统内核使用来初始化硬件。

 

在 U-Boot 中,fdt_blob 通常在初始化过程中被设置。如果 U-Boot 配置为使用设备树(通过 CONFIG_OF_CONTROL 标志启用),那么在启动时会调用 fdtdec_setup 函数来设置 gd->fdt_blob 的值,该值指向设备树 blob 的存储位置。

 

fdt_blob 的值可以通过不同的方式获得,具体取决于 U-Boot 的配置和构建方式。如果 U-Boot 配置为将设备树 blob 集成到其镜像文件中(通过 CONFIG_OF_EMBED 标志启用),那么 fdt_blob 将指向镜像文件中的设备树 blob 部分。如果设备树 blob 是作为单独的文件存在,那么它可能会被加载到内存的某个位置,并且 fdtcontroladdr 环境变量会被设置为该地址,从而动态指定 fdt_blob 的值。

 

在 U-Boot 的源代码中,fdt_blob 通常在 board_f.c 文件中被初始化,并且在 fdtdec_setup 函数中被设置为设备树 blob 的地址。这个地址随后被用于各种设备树操作,例如获取设备树中的节点和属性。

 

CONFIG_OF_CONTROL
CONFIG_OF_SEPARATE  fdt独立于uboot
CONFIG_OF_EMBED  fdt与uboot打包在一起
CONFIG_OF_PRIOR_STAGE fdt来源于外部地址
 

 

### 关于 `lcm_fdt_get_gpio` 函数解析 #### 函数概述 `lcm_fdt_get_gpio` 是用于从设备树 (Device Tree, DTS) 获取 GPIO 配置信息的函数。该函数主要用于初始化LCM(液晶显示器模块),并确保GPIO配置正确无误[^1]。 #### 参数列表 - **struct udevice *dev**: 设备结构体指针,指向当前正在处理的设备节点。 - **const char *propname**: 属性名称字符串,表示DTS文件中定义的具体属性名。 #### 返回值 返回一个整数类型的值,通常代表获取到的GPIO编号;如果发生错误,则返回负数作为错误码。 #### 实现细节 此功能实现依赖于FDT库来解析设备树数据,并从中提取指定属性对应的GPIO资源。具体来说: - 调用了fdt API 来访问设备树中的特定路径下的属性; - 对获得的数据进行了必要的转换和验证操作以适应硬件平台需求; - 将最终结果赋给目标变量供后续调用者使用。 ```c int lcm_fdt_get_gpio(struct udevice *dev, const char *propname){ int offset; struct fdtdec_phandle_args args; /* Get the node offset */ offset = dev_of_offset(dev); /* Parse phandle arguments from device tree */ if(fdtdec_parse_phandle_with_args(gd->fdt_blob, offset, propname, NULL, 0,&args)!= 0) return -EINVAL; /* Return gpio number or error code */ return args.args[0]; } ``` 上述代码片段展示了如何利用 FDT 库接口完成对 GPIO 的检索工作。通过传递正确的参数组合可以精确地定位所需的信息位置,并将其转化为应用程序可以直接使用的格式[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值