一、环境

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

    如下图所示:

    • 第 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

野火 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. 使用idea remote 开发体验

    本地使用idea开发最不好的一个体验就是打开稍大的工程就非常的卡,怎么调参数都没用,现在idea推出了idea remote就赶紧来体验下. 使用方式 除了idea不需要额外下载什么包,但是因为rem ...

  2. PicGo+GitHub 图床搭建

    前言 用GitHub搭建图床,在很久之前我就有了解,但由于市面上有挺多免费的图床,比如我之前一直在用的 路过图床,所以一直懒得动手搭建GitHub图床.一直到前两天我在完善博客的相册时,发现 路过图床 ...

  3. C# 数组 深拷贝 和 数组传参

    前言 C#中引用类型无法使用const,因此传参的时候使用引用类型,一定要注意是否会改变其值.下面介绍几种 数组的 深拷贝方法. 前提 下面的测试代码有一些前提, sw为Stopwatch nForT ...

  4. Html飞机大战(八):子弹的移动和管理

    好家伙,这应该是这个小游戏最难的几个点之一了 现在我们要做出子弹射击的效果我们应该如何处理? 1.首先我们要确定几个变量和方法的关系 变量: 子弹  bullet  弹夹(用来装子弹的东西)bulle ...

  5. 第三十七篇:JS基础(this)

    好家伙, 解析器(浏览器)在调用函数是每次都会响函数内部传递进一个隐含的参数, 这个隐含参数就是this,this指向的是一个对象,由浏览器传过来 这个对象我们成为函数执行的上下文对象 根据函数的调用 ...

  6. 从 Linux 内核角度探秘 JDK NIO 文件读写本质

    1. 前言 笔者在 <从 Linux 内核角度看 IO 模型的演变>一文中曾对 Socket 文件在内核中的相关数据结构为大家做了详尽的阐述. 又在此基础之上介绍了针对 socket 文件 ...

  7. 面试突击84:Spring 有几种事务隔离级别?

    Spring 中的事务隔离级别和数据库中的事务隔离级别稍有不同,以 MySQL 为例,MySQL 的 InnoDB 引擎中的事务隔离级别有 4 种,而 Spring 中却包含了 5 种事务隔离级别. ...

  8. 凭借SpringBoot整合Neo4j,我理清了《雷神》中错综复杂的人物关系

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是Hydra. 虽然距离中秋放假还要熬过漫长的两天,不过也有个好消息,今天是<雷神4>上线Disney+流媒体的日子 ...

  9. scheduler打印状态到日志

    编辑脚本和目录 # 如下步骤每个proxysql节点都需要操作 [root@ss30 opt]# mkdir -p /opt/proxysql/log [root@ss30 opt]# vim /op ...

  10. 现有rabbitmq集群添加新节点,移除旧节点(可以作为rabbitmq集群迁移使用)

    原有集群安装步骤:https://www.cnblogs.com/sanduzxcvbnm/p/15797788.html 1.拉取镜像 集群中新节点需要执行 docker pull rabbitmq ...