• 野火 STM32MP157 开发板内核和设备树的编译烧写


    一、环境

    编译环境:Ubuntu 版本:18.4.6
    交叉编译工具:arm-linux-gnueabihf-gcc 版本:7.4.1
    开发板:STM32MP157 pro
    烧写方式:STM32CubeProgrammer、TFTP、在线烧写

    安装工具

    • gcc-arm-linux-gnueabihf 交叉编译器
    • bison 语法分析器
    • flex 词法分析器
    • libssl-dev OpenSSL通用库
    • lzop LZO压缩库的压缩软件
    sudo apt install make gcc-arm-linux-gnueabihf gcc bison flex libssl-dev dpkg-dev lzop

    下图是我当前使用的工具版本,仅供参考

    二、下载内核源码

    GitHub仓库:https://github.com/Embedfire/ebf_linux_kernel

    git clone -b ebf_4.19_star https://github.com/Embedfire/ebf_linux_kernel.git

    注意: STM32MP157 内核源码对应的是 ebf_4.19_star 分支,因为网络原因有时下载会很慢,也可以通过其他仓库路径进行下载,不过可能出现下载不完整现象,导致无法编译。

    三、编译内核

    1. 清理项目工程

      make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
    2. 设置默认配置文件

      make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- stm32mp157_ebf_defconfig
    3. 编译 zImage 或 .dtb 文件

      # 默认编译内核和设备树
      make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8
      # 编译内核
      make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage
      # 编译设备树
      make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
    4. 编译生成deb
      也可以直接通过软件包的形式,直接安装内核
      直接执行 make_deb.sh 文件进行编译

      # 在编译之前先清理工程
      make mrproper
      # 开始编译
      ./make_deb.sh
    5. 生成文件的路径
      zImage:/arch/arm/boot/目录下
      dtb:/arch/arm/boot/dts目录下

    四、烧写内核与设备树

    方式一、通过TFTp烧写zImage与.dtb文件

    1. 将zImage和.dtb文件放入tftp服务器中,不会的朋友可以看Linux安装配置 tftp 服务器

    2. 进入uboot中配置网络

      setenv ipaddr 192.168.30.156
      setenv gatewayip 192.168.30.1
      setenv netmask 255.255.255.0
      setenv serverip 192.168.30.99
      setenv ethaddr 00:01:12:13:14:15
      saveenv

      ** 配置完成后可以通过 ping命令查看网络是否连接,下图中表示连接成功

    3. 下载zImage文件

      tftp c2000000 zImage
    4. 下载.dtb文件

      tftp c4000000 stm32mp157a-basic.dtb
    5. 启动加载zImage和dtb文件

      bootz c2000000 - c4000000
    6. 验证是否成功
      这里只是将镜像下到内存中,如果要是实现稍显,用写指令,将内存中的写内容写到emmc上即可

    方式二、通过安装包烧写内核

    1. 内核安装包的执行过程,直接查看 make_deb.sh 文件

      vim make_deb.sh

      如下图所示:

      • 第 4 行:指定编译好的内核放置位置
      • 第 5 行:编译出来的目标是针对 ARM 体系结构的内核
      • 第 6 行:对于 deb-pkg 目标,允许覆盖 deb-pkg 部署的常规启发式
      • 第 7 行:使用内核配置选项“LOCALVERSION”为常规内核版本附加一个唯一的后缀。
      • 第 10 行:指定交叉编译器
      • 第 12 行:生成配置文件
      • 第 15 行:编译文件进行打包
    2. 编译

      ./make_deb.sh
    3. 查看当前内核

      dpkg -l | grep stm-r1

    4. 卸载当前内核

      sudo dpkg -r linux-image-4.19.94-stm-r1
    5. 安装内核
      将编译生成的内核通过TFTP拷贝到开发板下,内核安装包位于 ebf_linux_kernel/build_image/linux-image-4.19.94-stm-r1_1stable_armhf.deb

      sudo dpkg -i linux-image-4.19.94-stm-r1_1stable_armhf.deb

      注意:若使用 dpkg 安装内核 deb 包提示错误,删除 boot/kernel 目录下所有文件 sudo rm boot/kernel/*

    6. 验证
      重启开发板,使用 cat /proc/version 命令查看内核是否安装成功,如下图所示

    方式三、直接替换内核文件

    1. 替换文件
      将编译出来的 ebf_linux_kernel/arch/arm/boot/zImage 拷到板子上,替换/boot/kernel/vmlinuz-4.19.94-stm-r1 文件
      注意:这里需要将zImage 文件重命名为vmlinuz-4.19.94-stm-r1 ,也可能会涉及到权限问题。

    2. 添加软链接

      ln -s /lib/modules/4.19.94-stm-r1 /lib/modules/4.19.94+
    3. 重启验证

      sudo reboot
      cat /proc/version
  • 相关阅读:
    基于 QT 实现一个 Ikun 专属桌面宠物
    风险识别和评估
    vite+vue3+ts+eslint配置问题
    uniapp视频压缩踩坑记录
    jupyter报错解决方案 : 无法将“jupyter”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
    策略模式【Java设计模式】
    解决serviceaccount用户认证挂载密文token文件失败导致pod使用anonymous用户问题
    云计算技术架构-云计算四种模式(公有云、私有云、混合云、行业云)
    GO 中的指针?
    路由vue-route的使用
  • 原文地址:https://www.cnblogs.com/jzcn/p/16849855.html