一、环境

编译环境: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压缩库的压缩软件
  1. sudo apt install make gcc-arm-linux-gnueabihf gcc bison flex libssl-dev dpkg-dev lzop

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

二、下载内核源码

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

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

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

三、编译内核

  1. 清理项目工程

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

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

    1. # 默认编译内核和设备树
    2. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8
    3. # 编译内核
    4. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage
    5. # 编译设备树
    6. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
  4. 编译生成deb

    也可以直接通过软件包的形式,直接安装内核

    直接执行 make_deb.sh 文件进行编译

    1. ./make_deb.sh
  5. 生成文件的路径

    zImage:/arch/arm/boot/目录下

    dtb:/arch/arm/boot/dts目录下

四、烧写内核与设备树

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

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

  2. 进入uboot中配置网络

    1. setenv ipaddr 192.168.30.156
    2. setenv gatewayip 192.168.30.1
    3. setenv netmask 255.255.255.0
    4. setenv serverip 192.168.30.99
    5. setenv ethaddr 00:01:12:13:14:15
    6. saveenv

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

  3. 下载zImage文件

    1. tftp 80800000 zImage
  4. 下载.dtb文件

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

    1. bootz 80800000 - 83000000
  6. 验证是否成功

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

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

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

    1. vim make_deb.sh

    如下图所示:

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

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

    1. dpkg -l | grep stm-r1

  4. 卸载当前内核

    1. 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

    1. 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. 添加软链接

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

    1. sudo reboot
    2. cat /proc/version

野火 STM32MP157 开发板内核和设备树的编译烧写的更多相关文章

  1. 迅为4412开发板Linux设备树的镜像烧写和源码简单优化教程

    1 烧写:   烧写和4412默认镜像的烧写类似,使用fastboot. 先更新uboot,用4412默认uboot更新支持设备树的uboot 用支持设备树的uboot烧写. 进入支持设备树的uboo ...

  2. MDK972-EK开发板裸调试设置和裸机程序烧写(转)

    硬件平台:MDK972-EK开发板编译调试软件:KEIL uVision4仿真工具:JLINK V7/V8   本例子从串口输出信息,如图:       KEIL uVision4调试设置如图所示: ...

  3. TFTP启动内核、设备树,NFS启动FS

    一.软硬件平台 1.开发板:创龙AM3359核心板,网口采用RMII形式. 2.UBOOT版本:U-Boot-2016.05,采用FDT和DM. 3.交换芯片MARVELL的88E6321. 二.问题 ...

  4. QtCreator设置野火iMx6开发板提供的qt交叉编译套件

    在Ubuntu18 QtCreator上添加野火iMx6开发板的Qt交叉编译环境PC:Ubuntu18.04QtCreator: 4.8.2交叉编译环境:野火提供的 5-编译工具链->qt交叉编 ...

  5. 基于tiny4412的Linux内核移植 -- 设备树的展开

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  6. 基于tiny4412的Linux内核移植 -- 设备树的展开【转】

    转自:https://www.cnblogs.com/pengdonglin137/p/5248114.html#_lab2_3_1 阅读目录(Content) 作者信息 平台简介 摘要 正文 一.根 ...

  7. [嵌入式开发板]iTOP-4412以模块的方式编译驱动

    本文转自迅为:http://www.topeetboard.com 大家好,本章节我们将向大家讲解如何在 linux 下实现以模块的方式加载内核驱动.我们以内核里面蜂鸣器的 驱动为例来讲解. 1)首先 ...

  8. ubuntu上设备树的编译

    由DTS文件生成DTB 文件,DTB是U-BOOT用来传递给LINUX内核的参数的一种文件形式. DTB:device tree blob 1,在内核中寻找:arch/arm/boot/dts/dig ...

  9. 4418开发板Android源码整体&单独编译

    内核缺省文件配置之后,Android 目录,运行一键编译脚本“build_android.sh”,如下图所示.注意:本篇文章基于iTOP-4418开发板,编译 Android 必须保证给 Ubuntu ...

随机推荐

  1. [网鼎杯2018]Unfinish-1|SQL注入|二次注入

    1.进入题目之后只有一个登录界面,检查源代码信息并没有发现有用的信息,尝试万能密码登录也不行,结果如下: 2.进行目录扫描,发现了注册界面:register.php,结果如下: 3.那就访问注册界面, ...

  2. 历时2月,动态线程池 DynamicTp 发布里程碑版本 V1.0.8

    关于 DynamicTp DynamicTp 是一个基于配置中心实现的轻量级动态线程池管理工具,主要功能可以总结为动态调参.通知报警.运行监控.三方包线程池管理等几大类. 经过多个版本迭代,目前最新版 ...

  3. 【Prometheus+Grafana系列】监控MySQL服务

    前言 前面的一篇文章已经介绍了 docker-compose 搭建 Prometheus + Grafana 服务.当时实现了监控服务器指标数据,是通过 node_exporter.Prometheu ...

  4. Sentinel控制台1.8.3修改源码,修改配置后推送到Nacos

    目录 1. 接着上一篇 2. 思路 3. 下载Sentinel源码 4. 看Gateway里面读取的配置信息 5. 修改Sentinel控制台源码 6. 熔断规则测试 7. 限流规则测试 8. 打包使 ...

  5. 简单创建一个SpringCloud2021.0.3项目(三)

    目录 1. 项目说明 1. 版本 2. 用到组件 3. 功能 2. 上俩篇教程 3. Gateway集成sentinel,网关层做熔断降级 1. 超时熔断降级 2. 异常熔断 3. 集成sentine ...

  6. .NET 7 性能改进 -- 至今为止最快的.NET平台

    2022年8月31日 Stephen Toub 发布的关于 .NET 7 性能改进的博客, 核心主题是 .NET 7 速度很快. 这篇博客非常的长,我尝试将它拷贝到Word 里,拷贝的时间都花了几分钟 ...

  7. 牛客练习赛99—C

    数的和与积 https://ac.nowcoder.com/acm/contest/34330/C 思路: 2和4是不可以的,除了3意外其他的都可以用三项解决,其中一项为1,剩余两项分别设为x,y.  ...

  8. 01_Linux基础-部署-VMware-Xshell-Xftp-内核-安迪比尔定理

    01_Linux基础-部署-VMware-Xshell-Xftp-内核-安迪比尔定理 博客:https://blog.csdn.net/cpen_web CentOS开源 免费 --- CentOS是 ...

  9. Openstack之各组件命令

    openstack 组件命令 Glance组件操作(镜像服务组件) #环境配置: source /etc/keystone/admin-openrc.sh #查看镜像列表: glance image- ...

  10. C语言怎么给函数添加形参的默认值

    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/p/16637890.html 如果不是机缘巧合,当年转到C++ ...