VEYE IMAGING Forum
    • Categories
    • Tags
    • Recent
    • Popular
    • Users
    • WIKI
    • veye.cc
    • Register
    • Login

    经验分享:如何为树莓派交叉编译特定版本的支持v4l2的.ko以及.dtb

    Scheduled Pinned Locked Moved VEYE MIPI camera
    2 Posts 2 Posters 1.3k Views 1 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • R Offline
      RuiMin Huang
      last edited by

      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-dev
      
      sudo 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
      

      从下面的连接下载源码

      Github源码链接

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

      2 给源代码打补丁

      以下动作在虚拟机中进行,打补丁

      进入到第一个需要打补丁的地方

      cd /home/book/RPi/linux-oldstable_20211201
      
      cd ./drivers/media/i2c/
      

      先删掉要被替换的文件

      rm -rf ./Kconfig
      rm -rf ./Makefile
      

      将以下文件copy到虚拟机中

      继续拷贝文件

      进入到第二个需要打补丁的地方

      cd /home/book/RPi/linux-oldstable_20211201
      
      cd ./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.dtbo
      

      3 开始编译源码

      首先是编译准备

      cd /home/book/RPi/linux-oldstable_20211201
      
      KERNEL=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_20211201
      
      make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
      

      接着是开始编译内核,模块,设备树

      cd /home/book/RPi/linux-oldstable_20211201
      
      make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs -j4
      

      4 将编译结果导出

      导出模块文件

      cd /home/book/RPi/linux-oldstable_20211201
      
      cd ./drivers/media/i2c/
      

      以下为需要导出的文件

      导出设备树二进制文件

      cd /home/book/RPi/linux-oldstable_20211201
      
      cd ./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/release
      
      sudo ./install_driver.sh veyecam2m
      
      dmesg
      

      此时,重新开机还不能用,只有内核,以及驱动模块,还有设备树二进制文件都替换掉了,才有用,也就是下一步

      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/ext4
      

      6 虚拟机,主机弹出TF卡,插入到树莓派

      到这一步,即完成IMX385的V4L2的移植了

      dmesg
      

      1 Reply Last reply Reply Quote 0
      • veye_xummV Offline
        veye_xumm
        last edited by

        非常棒,谢谢你的无私分享~

        Questions will be answered as soon as possible, please be patient.
        如果你使用中文,请直接用中文提问。
        May the force be with YOU. (This is the translation of the mysterious Chinese symbol above.)

        1 Reply Last reply Reply Quote 0

        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
        • First post
          Last post