欢迎点击蓝字关注我
扫二维码回复“加群”或加入飞腾爱好者交流群
一、设备树介绍
设备树(Device Tree)也是一种描述硬件的数据结构,主要为Linux内核提供板级的硬件描述。
在早期的内核版本中(如 Linux 2.6),CPU 架构的板极硬件特性一般被硬编码在类似 arch/arm/plat-xxx和arch/arm/mach-xxx的目录中,导致内核代码量庞大且板级代码多,采用设备树后,许多硬件的细节可以直接通过它传递给内核,而不再需要在内核中进行大量的冗余编码.
设备树由一个dts文件以及可能的多个dtsi文件组成,经过编译后,生成二进制的dtb文件。
dts 文件 :描述硬件板级的设备树源文件。
dtsi 文件 :为了将 SOC 以及板级的公用硬件特性进行统一,进而简化最终的板级描述文件,一般将SOC公共特性组织成dtsi文件,dts直接或间接的包含多个dtsi(类似于C语言的include头文件),组成最终的板级描述。
dtb :即 Device Tree Blob,dts经过dtc工具编译之后得到dtb文件,dtb通过固件传递到内核。
二、E2000设备树
E2000的dts 和 dtsi 文件一般位于内核的如下目录:arch/arm64/boot/dts/phytium 。
E2000 CPU由E2000D、E2000Q和E2000S三个系列组成,针对E2000 CPU的公共特性形成描述文件pe220x.dtsi,而针对各系列 CPU的公共特性分别形成pe2202.dtsi,pe2204.dtsi和pe2201.dtsi,在各系列的CPU描述文件中,均会引用pe220x.dtsi,以包含 E2000 CPU的共有特性。
三、buildroot中修改编译
基于phytium-linux-buildroot如何修改编译设备树呢?
首先最重要的,就是要找到buildroot中的内核在哪里。
我的buildroot是按照https://gitee.com/phytium_embedded/phytium-linux-buildroot所述,在/home/york/kernel/phytium-linux-buildroot这里面制作的。
那么完成整个buildroot编译后,对应的内核位置应该是在其output/build/linux-kernel-5.10v2.0中,即对于我来说的完整内核路径为/home/york/kernel/phytium-linux-buildroot/output/build/linux-kernel-5.10v2.0。
剩下的我们就可以按照对内核的操作来操作设备树了,对于飞腾的设备树,会在内核的arch/arm64/boot/dts/phytium,即对于我的完整路径为/home/york/kernel/phytium-linux-buildroot/output/build/linux-kernel-5.10_v2.0/arch/arm64/boot/dts/phytium。
如果需要修改编译新的设备树,可以分为两步:
1.找到一个基础的dts,复制一份,在这个dts上做针对自己板子的修改。
2.在Makefile中增加一行,声明你新修改的设备树文件。
下面示例以e2000q-edu-board.dts为基础,我复制出来了一个e2000q-vpx-board-shuangRGMII.dts的文件,这个新的dts文件我就不展示改啥了,自己按需修改就好了。
之后打开Makefile,增加一行
dtb-$(CONFIG_ARCH_PHYTIUM) += e2000q-vpx-board-shuangRGMII.dtb
之后我们回到内核源码的根目录,也就是/home/york/kernel/phytium-linux-buildroot/output/build/linux-kernel-5.10_v2.0这里,直接执行
#make dtbs
就可以了。
对于我,在/home/york/kernel/phytium-linux-buildroot/output/build/linux-kernel-5.10_v2.0/arch/arm64/boot/dts/phytium中就有了e2000q-vpx-board-shuangRGMII.dtb文件。
欢迎点击“点赞、收藏、在看”,分享给更多人看到
扫二维码回复“加群”或加入飞腾爱好者交流群
往期文章
欢迎飞腾爱好者加入微信交流群。 群内大家可以在群内交流遇到的问题,分享自己的调试心得。 希望大家共建飞腾友谊!