香橙派Zero3 全志H618设备树插件编译

基本信息

全志H618
SDK: 香橙派官方提供SDK
虚拟机: Ubuntu22.04
整体的SDK文件夹名称为:orangepi-build-next
SDK中Linux内核路径:orangepi-build-next/kernel/orange-pi-5.4-sun50iw9

编译环境指定

首先需要指定交叉编译器:
在SDK中的toolchains文件夹中含有很多编译器:
在这里插入图片描述
对于H618使用的交叉编译器是gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu
所以首先导出环境变量,用来后续编译的时候可以直接执行编译器指令:

export PATH=$PATH:/home/wakkk/H618/orangepi-build-next/toolchains/gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu/bin

注意里面的部分地址需要修改为你的地址!!!

设备树编译指令

make dtbs ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu-

无论对于Linux内核的编译还是modules还是dts的编译都需要指定ARCH 和CROSS_COMPILE环境变量
之后在修改好设备树之后就可以执行这个指令来编译了

设备树插件示例编写demo

为什么是编写插件而不是直接改写设备树呢?一个是对于原始版本的设备树很多人都去修改过,但是修改的部分无论如何都是无法正常加载,还有就是很多时候都是不建议修改原始设备树的,而且使用插件还是更为方便的。
本次的demo仅仅是加入一个简单的节点,并没有实际的功能,仅仅是验证整个编译的流程,以及可能踩坑的地方。

建立文件

我们在这个设备树插件的专用文件夹中编写新的插件:

/home/wakkk/H618/orangepi-build-next/kernel/orange-pi-5.4-sun50iw9/arch/arm64/boot/dts/sunxi/overlay

sunxi中是原始的设备树文件
而overlay中是设备树插件的文件
在overlay文件夹中我们新建一个文件: wakkk.dts

/dts-v1/;
/plugin/;

/ {
    fragment@0 {
        target-path = "/";
        __overlay__ {

            wakkk_node {
                compatible = "wakkk,orangepi-zero-3";
                status = "okay";
            };

        };
    };
};

新建了一个节点,名称为“wakkk_node”

为了使得这个设备树插件能够正常编译,我们需要修改overlay文件夹中的Makefile

# SPDX-License-Identifier: GPL-2.0
dtbo-$(CONFIG_ARCH_SUNXI) += \
	sun50i-h616-ph-i2c1.dtbo \
	sun50i-h616-ph-i2c2.dtbo \
	sun50i-h616-ph-i2c3.dtbo \
	sun50i-h616-ph-i2c4.dtbo \
	sun50i-h616-pi-i2c0.dtbo \
	sun50i-h616-pi-i2c1.dtbo \
	sun50i-h616-pi-i2c2.dtbo \
	sun50i-h616-ph-pwm12.dtbo \
	sun50i-h616-ph-pwm34.dtbo \
	sun50i-h616-pi-pwm1.dtbo \
	sun50i-h616-pi-pwm2.dtbo \
	sun50i-h616-pi-pwm3.dtbo \
	sun50i-h616-pi-pwm4.dtbo \
	sun50i-h616-ph-uart2.dtbo \
	sun50i-h616-pi-uart2.dtbo \
	sun50i-h616-pi-uart3.dtbo \
	sun50i-h616-pi-uart4.dtbo \
	sun50i-h616-ph-uart5.dtbo \
	sun50i-h616-powerkey.dtbo \
	sun50i-h616-usb0-host.dtbo \
	sun50i-h616-spi0-spidev.dtbo \
	sun50i-h616-spi1-cs0-spidev.dtbo \
	sun50i-h616-spi1-cs1-spidev.dtbo \
	sun50i-h616-spi1-cs0-cs1-spidev.dtbo \
	sun50i-h616-disable-leds.dtbo \
	sun50i-h616-disable-uart0.dtbo \
	sun50i-h616-zero2w-disable-led.dtbo \
	wakkk.dtbo

targets += $(dtbo-y) $(scr-y) $(dtbotxt-y)

always		:= $(dtbo-y) $(scr-y) $(dtbotxt-y)
clean-files	:= *.dtbo *.scr

就是在dtbo-$(CONFIG_ARCH_SUNXI) +=中加入了刚放的wakkk.dtbo
这样就可以在编译之后生成wakkk.dtbo了

随后,我们在kernel主目录下进行编译:(注意一定要首先导出编译器环境变量,对于每个终端都是)

make dtbs ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu-

编译之后我们便可以看见产生的wakkk.dtbo
在这里插入图片描述
我们将编译好的dtbo文件传入开发板中,并放入文件夹:

cp /root/wakkk/wakkk.dtbo /boot/dtb/sunxi/overlay/sun50i-h616-wakkk.dtbo

注意,这里面将dtbo文件名称加入了一个sun50i-h616前缀,后续会有说明,若无这个前缀则无法正常加载。
放入开发板中的/boot/dtb/sunxi/overlay/文件夹下即可,这个文件夹还有默认编译好的dtbo文件: 可见都是sun50i-h616开头
在这里插入图片描述
但是仅仅是放进去但是无法正常加载,我们还需要修改文件:/boot/orangepiEnv.txt
我们只需要在overlays中加入"wakkk"即可

root@orangepizero3:/boot# cat orangepiEnv.txt
verbosity=1
bootlogo=false
console=both
disp_mode=1080p60
fb0_width=1920
fb0_height=1080
debug_uart=ttyAS0
overlay_prefix=sun50i-h616
rootdev=UUID=097c0934-864c-4961-9bf6-4ab53f3c5f5a
rootfstype=ext4
overlays=spi1-cs1-spidev wakkk
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u

注意两个地方:
第一个:overlay_prefix这个表示仅仅是识别前缀为sun50i-h616的设备树插件,所以如果设备树插件不是这个前缀则无法加载,即使后面的overlays已经设置也没有效果。
第二个: overlays这个表示仅仅加载名称含有spi1cs1-spidevwakkk的设备树插件,可见对于overlays文件夹中的设备树插件并不是全部加载的,这里有一个进一步筛选的流程。
这样,首先经过前缀的筛选,再经过名称的筛选,我们可以正常加载自己的设备树插件。
PS:对于orangepi config 命令实现对于系统的配置也是通过修改这个文件实现的,也就是对于很多外设例如IIC SPI等等,很多并不是默认加载的,在设置中开启之后于是在这个文件中“使能”对应的设备树插件,从而实现外设的加载控制。

重启开发板 查看加载状态

若一切配置正常,重启后我们可以看见我们编写的节点:“wakkk_node”
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值