经验分享:如何为树莓派交叉编译特定版本的支持v4l2的.ko以及.dtb
-
0 背景
我在以前一个版本的64bit树莓派系统上,搭建了很多环境,现在,这个64bit的树莓派系统需要接入IMX385,目前只有v4l2这种方案(64bit的树莓派系统删除了一些库,树莓派原生相机也就不支持)。
但悲催的是,目前veye在Github提供的源码,只支持内核版本为5.10.92-v8+的树莓派,也就是只支持比较新版本的树莓派进行,然而我的树莓派系统内核版本为5.10.63-v8+,veye官方的源码也就不支持。
解决方法一:更换内核版本为5.10.92-v8+的树莓派系统,但有点不太现实,我搭建了很多环境,特别是很多深度学习的推理环境,这样再折腾明显不现实。
解决方法二:交叉编译一个支持5.10.63-v8+的.ko以及.dtb,这个工作量会少很多,接下来就开始。
1 准备工作
开发环境准备,在虚拟机Ubuntu18.04中操作
sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-devsudo apt install crossbuild-essential-arm64确认自己的树莓派上的piOS版本,以下动作在树莓派上面完成
uname -r
cd /home/pi/ko_dev cp /usr/share/doc/raspberrypi-bootloader/changelog.Debian.gz ./ vi changelog.Debian
从下面的连接下载源码

将获取到的源码放虚拟机上

2 给源代码打补丁
以下动作在虚拟机中进行,打补丁
进入到第一个需要打补丁的地方
cd /home/book/RPi/linux-oldstable_20211201cd ./drivers/media/i2c/先删掉要被替换的文件
rm -rf ./Kconfig rm -rf ./Makefile将以下文件copy到虚拟机中

继续拷贝文件

进入到第二个需要打补丁的地方
cd /home/book/RPi/linux-oldstable_20211201cd ./arch/arm/boot/dts/overlays删除需要被替换的文件
rm -rf ./Makefile拷贝文件

其中要去替换的Makefile中是多了以下内容
csimx307-dual-cm4.dtbo\ csimx307.dtbo\ cssc132-dual-cm4.dtbo\ cssc132.dtbo\ veye327-dual-cm4.dtbo\ veye327.dtbo\ veyecam2m-dual-cm4.dtbo\ veyecam2m.dtbo3 开始编译源码
首先是编译准备
cd /home/book/RPi/linux-oldstable_20211201KERNEL=kernel8 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfi然后是增加编译选项
5.10版本kernel的路径是Device Drivers --> Multimedia Support --> Media ancillary drivers --> Camera sensor devices
cd /home/book/RPi/linux-oldstable_20211201make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
接着是开始编译内核,模块,设备树
cd /home/book/RPi/linux-oldstable_20211201make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs -j44 将编译结果导出
导出模块文件
cd /home/book/RPi/linux-oldstable_20211201cd ./drivers/media/i2c/以下为需要导出的文件

导出设备树二进制文件
cd /home/book/RPi/linux-oldstable_20211201cd ./arch/arm/boot/dts/overlays以下为需要导出的二进制文件

最终导出的驱动模块文件,设备树二进制文件,放在PC的下列文件夹中

需要将最终导出的文件放到树莓派的Veye V4L2源码的路径下
cd /home/pi/Veye_Camera_V4L2/raspberrypi_v4l2-main/release/driver_bin/5.10.63-v8+
然后通过脚本在树莓派上安装驱动模块以及设备树二进制文件
cd /home/pi/Veye_Camera_V4L2/raspberrypi_v4l2-main/releasesudo ./install_driver.sh veyecam2mdmesg
此时,重新开机还不能用,只有内核,以及驱动模块,还有设备树二进制文件都替换掉了,才有用,也就是下一步
5 将编译结果导出到TF卡
首先查看tf卡是否正常插入
lsblk然后,建立挂载目录
cd /home/book/RPi mkdir mnt mkdir mnt/fat32 mkdir mnt/ext4挂载文件
cd /home/book/RPi sudo mount /dev/sdb1 ./mnt/fat32 sudo mount /dev/sdb2 ./mnt/ext4安装驱动模块到TF卡
cd /home/book/RPi/linux-oldstable_20211201 sudo env PATH=$PATH make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=../mnt/ext4 modules_install备份原版kernel
cd /home/book/RPi/mnt/fat32 cp ./kernel8.img ./kernel8_bak.img安装kernel,以及设备树二进制文件到TF卡
cd /home/book/RPi/linux-oldstable_20211201 sudo cp arch/arm64/boot/Image ../mnt/fat32/kernel8.img -f sudo cp arch/arm64/boot/dts/broadcom/*.dtb ../mnt/fat32/ -f sudo cp arch/arm64/boot/dts/overlays/*.dtb* ../mnt/fat32/overlays/ -f sudo cp arch/arm64/boot/dts/overlays/README ../mnt/fat32/overlays/ -f卸载挂载的TF卡
cd /home/book/RPi/linux-oldstable_20211201 sudo umount ../mnt/fat32 sudo umount ../mnt/ext46 虚拟机,主机弹出TF卡,插入到树莓派
到这一步,即完成IMX385的V4L2的移植了

dmesg


-
非常棒,谢谢你的无私分享~
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login