4

野火 STM32MP157 开发板内核和设备树的编译烧写 - 浇筑菜鸟

 1 year ago
source link: https://www.cnblogs.com/jzcn/p/16849855.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

编译环境: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

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

2406897-20221103095802916-1418721514.png

二、下载内核源码

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_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命令查看网络是否连接,下图中表示连接成功
    2406897-20221102095926990-1625176759.png

  3. 下载zImage文件

    tftp 80800000 zImage
    
  4. 下载.dtb文件

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

    bootz 80800000 - 83000000
    
  6. 验证是否成功
    毫无疑问,验证失败,提示错误 Bad Linux ARM zImage magic!,这个应该是STM32MP157这块开发板的分区问题导致的,目前只能尝试后面几种方式烧写,后续我研究明白了在更新,有知道的大佬可以给个解决思路

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

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

    vim make_deb.sh
    

    如下图所示:

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

    dpkg -l | grep stm-r1
    

    2406897-20221103094956939-299307581.png

  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 命令查看内核是否安装成功,如下图所示
    2406897-20221103100131561-587195790.png

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

  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
    

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK