全志设备树添加设备树之踩坑全流程

香橙派的设备树添加设备树之踩坑全流程

最近在学习使用设备树,手头用的是orangepi的板子,但是也因为这样走了不少弯路

配置环境

设备树编译在源码目录下不能直接使用 make dtbs , 否则会出现一堆选项

首相要配置一下架构

export ARCH=arm64

然后配置交叉编译工具

export CROSS_COMPILE=你的交叉编译工具路径

之后使用make dtbs就没有问题

哪里取找设备树文件源码

先编译一遍sdk后放入开发板,进入以下路径

/boot/dtb 或者 /boot/dtb-xxx

image-20240503230441075

记住该目录,进入虚拟机,进入内核源码目录,然后按该路径寻找

内核源码路径/arch/arm64/boot/dts

该文件夹有一堆芯片的设备树文件夹,找到和你开发板上在 /boot/dtb/ 下名字一样的文件夹进去

image-20240503230747399

image-20240503230836943

屎坑开始

按照网上的说法,当你修改了设备树文件后,在源码路径下使用make dtbs,只需要将将生成的dtb和开发板 /boot/dtb/xxx/xxx.dtb 替换,然后reboot就可以了。可惜的笔者并没有成功,期间做过如下测试

  • 1.修改设备树文件,make dtbs 后,与开发板上的替换,没成功
  • 2.直接编译内核,将设备树编译到内核的deb中,然后替换,没成功
  • 3.全打包,及rootfs + kernel + u-boot,没成功
  • 4.进入u-boot终端,将/boot/dtb/sunxi/下的dtb文件写入dram,然后再把镜像写入dram,bootm(理论上说,这个最应该成功),没成功

最后笔者使用覆盖设备树(Devices-tree overlays),把设备树当插件一样,随意替换就行

覆盖设备树

无论在开发板上的dtb文件夹还是在源码下的dtb文件夹,这之中都有overlay文件夹,我们只需要将编译好的dtbo文件放入其中就行

image-20240503231812822

image-20240503231831055

进入其中,修改Makefile,加入要生成的dtbo文件(我这有两个)

image-20240503231931013

在该目录下加入你的设备树文件(dts),这里不赘述设备树插件如何写,相关链接如下

[10. 设备树插件(Device Tree Overlays) — 野火]嵌入式Linux驱动开发实战指南——基于LubanCat-RK系列板卡 文档 (embedfire.com)

然后回到源码目录下,进行make dtsb

代码没问题的话,此时overlay下面应该会生成dtbo文件

将该文件传到开发板的overlay文件夹下,reboot

本来笔者以为到这应该没用问题了,开始/proc/device-tree下依然没用对应的节点生成

Env.txt

第一次注意是在野火的教程下

image-20240503232524907

以为我之前也在香橙派的 /boot/ 下见到xxxEnv.txt,会开发板上一看,果真如此

image-20240503232717796

之后去查取,果然如此,类似配置文件一样,相关链接如下

Device Tree overlays - Armbian Documentation

image-20240503233342902

上面是一些规则,其实我也是看boot.cmd文件之后才推断出这是一个配置文件,其中这个overlay_prefix插件设备树的前缀,只要满足这个前缀的dtbo文件才会被选中

根据野火的说法,还需要加入overlays选项,只有在overlays中的文件才会被加入内核

image-20240503233837353

可以选择加入多个插件设备树文件,文件和文件之前用空格隔开,去掉前缀

才会被加入内核

[外链图片转存中…(img-CuxZ029i-1714750861456)]

可以选择加入多个插件设备树文件,文件和文件之前用空格隔开,去掉前缀

然后reboot,就可以在/proc/device-tree/下看到自己的节点了

### 修改Tina设备树以适配全志处理器 在Tina系统中,设备树(Device Tree)用于描述硬件配置。对于全志系列处理器的支持,通常需要针对具体的芯片型号调整设备树文件的内容。以下是关于如何修改设备树以适配全志处理器的相关说明: #### 设备树的基础结构 设备树是一种数据结构,用来描述硬件的属性和连接关系。它通过`.dts`(源文件)和`.dtb`(二进制文件)的形式存在。在Tina Linux中,设备树的主要作用是告诉内核如何初始化和管理特定的硬件资源。 为了适配全志处理器,可能需要对以下几个方面进行修改或优化[^1]: - **中断控制器设置** 中断控制器的定义通常是设备树中的重要部分之一。例如,在某些全志芯片中,可能会使用GIC(Generic Interrupt Controller)。因此,需确认并更新对应的中断控制器节点。 - **GPIO与Pinmux配置** GPIO和Pinmux的配置直接影响外设的功能实现。例如,触摸屏驱动移植过程中提到的设备树未正确关联硬件设备的情况,可能是由于Pinmux配置不匹配引起的。可以通过查阅具体芯片的数据手册来获取正确的引脚功能分配表,并将其映射到设备树中。 - **内存布局** 不同的SoC平台具有不同的物理地址范围和支持的最大RAM容量。确保设备树中的memory节点准确反映了目标板卡的实际SDRAM参数是非常重要的。 #### 实际操作指南 假设当前使用的参考设备树为`omap4-panda.dts`和`apq8074-dragonboard.dtsi`,但由于它们并不完全适用于全志R818或其他相似型号,则应创建一个新的基于现有模板定制化版本的设备树文件[^2]。 1. 复制一份原始DTS作为工作副本: ```bash cp arch/arm/boot/dts/omap4-panda.dts arch/arm/boot/dts/sunxi-r818-custom.dts ``` 2. 编辑新复制出来的`sunxi-r818-custom.dts`文件,替换掉所有不符合实际硬件特性的字段。比如删除无关的外围组件声明或者增加必要的I/O接口支持项。 3. 调整根节点下的compatible字符串列表,使其包含对应厂商的标准标识符。例如,“allwinner,sun50i-a64”。 4. 添加任何额外所需的子节点及其属性值,特别是那些涉及特殊用途寄存器访问路径的部分。 5. 使用工具编译生成最终形式的目标DTB文件: ```makefile make ARCH=arm CROSS_COMPILE=<path_to_cross_compiler> dtbs ``` 完成上述步骤之后,记得按照既定流程将最新构建好的kernel image连同配套device tree blob一起部署至运行环境当中去测试效果。 另外需要注意的是,当遇到诸如安全启动验证错误等问题时,也需要仔细排查整个引导链路各个环节的状态标志位变化情况。因为一旦某个阶段检测失败就可能导致后续加载过程终止甚至循环重启现象发生[^4]。 最后附带一个小技巧:利用hexdump命令查看指定分区内容可以帮助我们更好地理解存储介质内部组织方式以及定位潜在异常位置[^3]: ```shell root@TinaLinux:/tmp# hexdump -C /dev/by-name/private ``` ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值