一、环境编译环境: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_starhttps://github.com/Embedfire/ebf_linux_kernel.git
注意: STM32MP157 内核源码对应的是 ebf_4.19_star 分支,因为网络原因有时下载会很慢,也可以通过其他仓库路径进行下载,不过可能出现下载不完整现象,导致无法编译 。三、编译内核
- 清理项目工程
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
- 设置默认配置文件
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- stm32mp157_ebf_defconfig
- 编译 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
- 编译生成deb也可以直接通过软件包的形式,直接安装内核直接执行
make_deb.sh
文件进行编译
./make_deb.sh
- 生成文件的路径zImage:/arch/arm/boot/目录下dtb:/arch/arm/boot/dts目录下
- 将zImage和.dtb文件放入tftp服务器中,不会的朋友可以看Linux安装配置 tftp 服务器
- 进入uboot中配置网络
setenv ipaddr 192.168.30.156setenv gatewayip 192.168.30.1setenv netmask 255.255.255.0setenv serverip 192.168.30.99setenv ethaddr 00:01:12:13:14:15saveenv
** 配置完成后可以通过ping
命令查看网络是否连接,下图中表示连接成功
文章插图
- 下载zImage文件
tftp 80800000 zImage
- 下载.dtb文件
tftp 83000000 stm32mp157a-basic.dtb
- 启动加载zImage和dtb文件
bootz 80800000 - 83000000
- 验证是否成功毫无疑问,验证失败,提示错误
Bad Linux ARM zImage magic!
,这个应该是STM32MP157这块开发板的分区问题导致的,目前只能尝试后面几种方式烧写,后续我研究明白了在更新,有知道的大佬可以给个解决思路
- 内核安装包的执行过程,直接查看
make_deb.sh
文件
vim make_deb.sh
【野火 STM32MP157 开发板内核和设备树的编译烧写】如下图所示:
文章插图
- 第 4 行:指定编译好的内核放置位置
- 第 5 行:编译出来的目标是针对 ARM 体系结构的内核
- 第 6 行:对于 deb-pkg 目标,允许覆盖 deb-pkg 部署的常规启发式
- 第 7 行:使用内核配置选项“LOCALVERSION”为常规内核版本附加一个唯一的后缀 。
- 第 10 行:指定交叉编译器
- 第 12 行:生成配置文件
- 第 15 行:编译文件进行打包
- 编译
./make_deb.sh
- 查看当前内核
dpkg -l | grep stm-r1
经验总结扩展阅读
- 以开发之名 | bilibili会员购让IP在眼前动起来
- 驱动开发:内核封装WSK网络通信接口
- C# Interlocked 类
- 京东云开发者|IoT运维 - 如何部署一套高可用K8S集群
- [Android开发学iOS系列] Auto Layout
- springboot项目整合-注册功能模块开发
- 一个实用的 vite + vue3 组件库脚手架工具,提升开发效率
- 开发商垫付首付违法吗
- 京东云开发者|关于“React 和 Vue 该用哪个”我真的栓Q
- 支持JDK19虚拟线程的web框架,之二:完整开发一个支持虚拟线程的quarkus应用