野火 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 分支,因为网络原因有时下载会很慢,也可以通过其他仓库路径进行下载,不过可能出现下载不完整现象,导致无法编译。
三、编译内核
清理项目工程
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目录下
四、烧写内核与设备树
方式一、通过TFTp烧写zImage与.dtb文件
将zImage和.dtb文件放入tftp服务器中,不会的朋友可以看Linux安装配置 tftp 服务器
进入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命令查看网络是否连接,下图中表示连接成功

下载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
如下图所示:

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

卸载当前内核
sudo dpkg -r linux-image-4.19.94-stm-r1
安装内核
将编译生成的内核通过TFTP拷贝到开发板下,内核安装包位于ebf_linux_kernel/build_image/linux-image-4.19.94-stm-r1_1stable_armhf.debsudo dpkg -i linux-image-4.19.94-stm-r1_1stable_armhf.deb
注意:若使用 dpkg 安装内核 deb 包提示错误,删除 boot/kernel 目录下所有文件
sudo rm boot/kernel/*验证
重启开发板,使用cat /proc/version命令查看内核是否安装成功,如下图所示

方式三、直接替换内核文件
替换文件
将编译出来的 ebf_linux_kernel/arch/arm/boot/zImage 拷到板子上,替换/boot/kernel/vmlinuz-4.19.94-stm-r1 文件
注意:这里需要将zImage 文件重命名为vmlinuz-4.19.94-stm-r1 ,也可能会涉及到权限问题。添加软链接
ln -s /lib/modules/4.19.94-stm-r1 /lib/modules/4.19.94+
重启验证
sudo reboot
cat /proc/version
野火 STM32MP157 开发板内核和设备树的编译烧写的更多相关文章
- 迅为4412开发板Linux设备树的镜像烧写和源码简单优化教程
1 烧写: 烧写和4412默认镜像的烧写类似,使用fastboot. 先更新uboot,用4412默认uboot更新支持设备树的uboot 用支持设备树的uboot烧写. 进入支持设备树的uboo ...
- MDK972-EK开发板裸调试设置和裸机程序烧写(转)
硬件平台:MDK972-EK开发板编译调试软件:KEIL uVision4仿真工具:JLINK V7/V8 本例子从串口输出信息,如图: KEIL uVision4调试设置如图所示: ...
- TFTP启动内核、设备树,NFS启动FS
一.软硬件平台 1.开发板:创龙AM3359核心板,网口采用RMII形式. 2.UBOOT版本:U-Boot-2016.05,采用FDT和DM. 3.交换芯片MARVELL的88E6321. 二.问题 ...
- QtCreator设置野火iMx6开发板提供的qt交叉编译套件
在Ubuntu18 QtCreator上添加野火iMx6开发板的Qt交叉编译环境PC:Ubuntu18.04QtCreator: 4.8.2交叉编译环境:野火提供的 5-编译工具链->qt交叉编 ...
- 基于tiny4412的Linux内核移植 -- 设备树的展开
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 -- 设备树的展开【转】
转自:https://www.cnblogs.com/pengdonglin137/p/5248114.html#_lab2_3_1 阅读目录(Content) 作者信息 平台简介 摘要 正文 一.根 ...
- [嵌入式开发板]iTOP-4412以模块的方式编译驱动
本文转自迅为:http://www.topeetboard.com 大家好,本章节我们将向大家讲解如何在 linux 下实现以模块的方式加载内核驱动.我们以内核里面蜂鸣器的 驱动为例来讲解. 1)首先 ...
- ubuntu上设备树的编译
由DTS文件生成DTB 文件,DTB是U-BOOT用来传递给LINUX内核的参数的一种文件形式. DTB:device tree blob 1,在内核中寻找:arch/arm/boot/dts/dig ...
- 4418开发板Android源码整体&单独编译
内核缺省文件配置之后,Android 目录,运行一键编译脚本“build_android.sh”,如下图所示.注意:本篇文章基于iTOP-4418开发板,编译 Android 必须保证给 Ubuntu ...
随机推荐
- Android OOM 问题探究 -- 从入门到放弃
一.前言 最近客户反馈了一些OOM的问题,很早之前自己也有简单了解过OOM的知识,但时间久远,很多东西都记不清了. 现在遇到这个OOM问题,也即趁此搜索了一些资料,对OOM问题做一些探究,把资料记录于 ...
- 自动化选课(Python + selenium
前几天听到朋友说自己选课事情,突发奇想想要搞这样一个东西,但是由于各种原因只做到以下的完成度,具体的情况也会在解释的最后留下.这个只适用于曲师大的教务系统,因为用的这个系统来进行的一个调试,对于其 ...
- P5384[Cnoi2019]雪松果树 (长链剖分)
题面 一棵以 1 1 1 为根的 N N N 个节点的有根树, Q Q Q 次询问,每次问一个点 u u u 的 k k k 级兄弟有多少个(第 k k k 代祖先的第 k k k 代孩子),如果没有 ...
- [CF1526D] Kill Anton(逆序对,搜索)
题面 A N T O N \rm ANTON ANTON 的基因由 A , N , T , O \rm A,N,T,O A,N,T,O 四种碱基排列组成. A N T O N \rm ANTON AN ...
- 状态 :睡眠中,进程ID:13431,yum提示Another app is currently holding the yum lock; waiting for it to exit...
问题描述: 今天想在虚拟机上重新安装docker然后使用到yum命令报错: 解决办法: [root@localhost ~]# rm -f /var/run/yum.pid 然后重新运行刚才的yum命 ...
- 第七十四篇:Vue组件父子传值
好家伙, 1.组件之间的关系 在项目开发中,组件之间的最常见关系分为如下两种: (1)父子关系 (2)兄弟关系 2.父子之间的数据共享 (1)父->子共享数据 父组件向子组件共享数据需要使用自定 ...
- KingbaseES 命令行安装数据库
关键字: KingbaseES.Linux.x86-64 一.安装前环境准备 1.硬件环境支持 ` 金仓数据库管理系统KingbaseES支持X86.X86_64,同时支持龙芯.飞腾等国产CPU硬 ...
- 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(下)
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 华南理工大学 Python第7章课后小测-1
1.(单选)以下程序对字典进行排序,按字典键值从小到大排序,空白处的代码是( ): dt={'b':6, 'c':2, 'a':4} s=sorted(dt.items(),key=_____) p ...
- Linux 使用 Systemd 管理进程服务
转载自:https://mp.weixin.qq.com/s/e-_PUNolUm22-Uy_ZjpuEA systemd 介绍 systemd是目前Linux系统上主要的系统守护进程管理工具,由于i ...