鲁班猫4驱动实验环境搭建
1.1 搭建编译环境与获取源码
安装相关库和工具搭建编译环境
sudo apt update
sudo apt install gcc make git bc libssl-dev liblz4-tool device-tree-
compiler bison flex u-boot-tools gcc-aarch64-linux-gnu
查看板卡内核版本
uname -a
获取内核源码:
方式一:野火github仓库
rk356x板卡:
git clone -b stable-4.19-rk356x https://github.com/LubanCat/kernel.git
rk3588板卡:
git clone -b develop-5.10 https://github.com/LubanCat/kernel.git
方式二:野火提供的网盘资料
# 安装 7z 压缩工具
sudo apt install p7zip-full
# 创建 LubanCat_SDK 目录
mkdir /linux/LubanCat_SDK
# 将下载的 SDK 源码移动到 LubanCat_SDK 目录下
mv LubanCat_RK3588_Linux_SDK_xxx.7z ~/linux/LubanCat_SDK
# 进入 LubanCat_SDK 目录
cd ~/linux/LubanCat_SDK
# 解压 SDK 压缩包
7z x LubanCat_RK356x_Linux_SDK_xxx.7z
# 检出.repo 目录下的 git 仓库
.repo/repo/repo sync -l
# 进入内核目录
cd kernel
# 更新内核
git pull
# 也可以将 SDK 全部更新
# 将所有的源码仓库同步到最新版本
cd ../ && .repo/repo/repo sync -c
最后一步同步出错,可跳过
1.2编译内核
rk3588
安装交叉编译工具
# 获取编译工具链
git clone https://github.com/LubanCat/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.git
# 导出环境变量,需要根据实际指定编译工具链的绝对路径
export PATH=/root/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin:$PATH
# 查看编译工具链,如果 COLLECT_LTO_WRAPPER 变量为指定的路径,即配置成功
aarch64-linux-gnu-gcc -v
编译内核
# 清除之前生成的所有文件和配置
make mrproper
# 加载 lubancat_linux_rk3588_defconfig 配置文件,rk3588 系列均是该配置文件
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- lubancat_linux_rk3588_defconfig
# 编译内核,指定交叉编译工具,使用 8 线程进行编译,线程可根据电脑性能自行确定
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j8
1.3内核驱动
野火驱动教程源码获取,与kernel放置在同一目录下
# 从 github 获取
git clone https://github.com/LubanCat/lubancat_rk_code_storage
Makefile内容
KERNEL_DIR=/home/ma/linux/LubanCat_SDK/kernel/
ARCH=arm64
CROSS_COMPILE=aarch64-linux-gnu-
export ARCH CROSS_COMPILE
obj-m := hellomodule.o
all:
$(MAKE) -C $(KERNEL_DIR) M=$(CURDIR) modules
.PHONE:clean
clean:
$(MAKE) -C $(KERNEL_DIR) M=$(CURDIR) clean
编译
make
加载内核驱动
复制驱动文件到/home/cat/ma/
scp hellomodule.ko cat@192.168.31.129:/home/cat/ma/
安装卸载内核驱动
cd /home/cat/ma/
# 加载内核模块
sudo insmod hellomodule.ko
# 查看当前加载的内核模块
lsmod
# 卸载内核模块
sudo rmmod hellomodule.ko
1.4 加载编译设备树
主要文件介绍
dtc:编译设备树源文件的工具,位置在/scripts/dtc/dtc
.dts:设备树源文件,位置在/arch/arm64/boot/dts/rockchip
.dtsi:设备树源文件的包含文件
.dtb:二进制的设备树文件
编译设备树
方式一:使用dtc编译
# 编译 dts 为 dtb
kernel/scripts/dtc/dtc -I dts -O dtb -o xxx.dtb xxx.dts
# 也可以下载 dtc 工具进行编译
sudo apt install device-tree-compiler
dtc -I dts -O dtb -o xxx.dtb xxx.dts
方式二:使用内核脚本编译:
# 加载配置文件
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- lubancat_linux_rk3588_defconfig
# 使用 dtbs 参数单独编译设备树
make ARCH=arm64 -j4 CROSS_COMPILE=aarch64-linux-gnu- dtbs
加载设备树
替换 板卡/boot/dtb/ 目录下的设备树文件
使用ls命令确定板卡使用的设备树文件
ls -l /boot/
rk-kernel.dtb 链接到了 dtb/rk3588-lubancat-4.dtb,替换rk3588-lubancat-4.dtb文件
查看设备树文件是否加载成功
ls /proc/device-tree
1.5 设备树插件
文件格式:dtbo
编译设备树插件:
方式一:使用dtc工具
kernel/scripts/dtc/dtc -I dts -O dtb -o xxx.dtbo xxx.dts
方式二:内核脚本编译
将自己的设备树插件添加到内核源码 arch/arm64/
boot/dts/rockchip/overlays 目 录 下, 并 修 改 arch/arm64/boot/dts/rockchip/
overlays/Makefile 文件,添加编译选项
加载设备树插件
使用scp将dtbo文件拷贝到开发板/boot/dtb/overlays/目录下,
设备树插件的配置文件也进行了软连接,方便不同板卡的配置文件进行加载,执行以下命令确认系统实际加载的配置文件
ls -l /boot/uEnv/
当前系统实际加载的配置文件为/boot/uEnv/uEnvLubanCat2.txt,将设备树插件写入 uEnvLubanCat2.txt,格式为“dtoverlay=< 设备树插件路径 >“
执行 reboot 命令重启系统
重启后可以在“/proc/device-tree”或者“/sys/firmware/devicetree/base/”目录下找到设备节点同名的文件夹,证明设备树插件已经加载成功。