当前位置: 首页 > news >正文

[Linux]从零开始的STM32MP157移植Ubuntu根文件系统教程

一、前言

        在前面的教程中,教了大家如何使用Busybox与buildroot构建自己的根文件系统并且在STM32MP157开发板上正常运行。那么除了这两种根文件系统以外,我们能不能使用别的根文件系统呢?我们在虚拟机中使用的Ubuntu系统能不能作为STM32MP157的跟文件系统呢?当然,答案是肯定的,我们可以将Ubuntu系统移植到STM32MP157上,只是移植的不是完整的系统,是一个基础的根文件系统,那么本次教程就来教大家如何往STM32MP157上移植一个Ubuntu系统,如果你准备好了,就让我们开始吧!

二、谁适合本次教程

        本次教程同样涉及到根文件系统的移植,是一些比较上层的操作,在这之前,仍然需要大家移植好Linux内核,毕竟我们的根文件系统的启动是建立在LInux内核之上的。除此之外,还需要大家有根文件系统移植的经验,如果你还不会移植和启动根文件系统可以看下面的教程:

Busybox根文件系统移植:[Linux]从零开始的STM32MP157 Busybox根文件系统构建_stm32mp构建根文件系统-CSDN博客

Buildroot根文件系统构建:[Linux]从零开始的STM32MP157 Buildroot根文件系统构建-CSDN博客

当我们能够构建根文件系统并且正常运行起来以后,就可以进行下一步了。

三、Ubuntu-Base根文件系统移植

        我们现在移植的Ubuntu系统是一个Ubuntu的基础版即Ubuntu-Base,这个系统不像完整的Ubuntu系统那样有分区表与完整的软件包,Ubuntu-Base只有最基本的根文件系统与最基本的软件包,这也让Ubuntu-Base非常精简,大小与我们之前构建个Busybox、Buildroot差不多。并且,Ubuntu官方已经帮我们将Ubuntu系统构建好了,我们并不需要将重点放在构建上,我们只需要下载对应版本的压缩包然后解压即可使用Ubuntu-Base系统。

        移植的首要步骤就是先将Ubuntu官方构建好的Ubuntu-Base系统下载下来,这里我们需要通过自己Linux内核的版本来判断我们应该下载哪个版本的Ubuntu-Base系统。我们可以在Linux内核启动时看到Linux内核的版本:

可以看到我这里Linux内核的版本是5.4.31,我们需要找到一个能够支持这个内核版本的Ubuntu-Base系统。具体每个Ubuntu系统对应的Linux内核版本如下表所示:

Ubuntu版本       内核版本
ubuntu12.04      3.2.0-23-generic
ubuntu12.04.1    3.2.0-29-generic
ubuntu12.04.2    3.5.0-23-generic
ubuntu12.04.3    3.8.0-29-generic
ubuntu12.04.4    3.11.0-15-generic
ubuntu12.04.5    3.13.0-32-generic
ubuntu14.04      3.13.0-24-generic
ubuntu14.04.1    3.13.0-32-generic
ubuntu14.04.2    3.16.0-30-generic
ubuntu14.04.3    3.19.0-25-generic
ubuntu14.04.4    4.2.0-27-generic
ubuntu14.04.5    4.2.0-31-generic
ubuntu14.04.6    4.4.0-142-generic
ubuntu16.04      4.4.0-21-generic
ubuntu16.04.1    4.4.0-31-generic
ubuntu16.04.2    4.8.0-36-generic
ubuntu16.04.3    4.10.0-28-generic
ubuntu16.04.4    4.13.0-36-generic
ubuntu16.04.5    4.15.0-29-generic
ubuntu16.04.6    4.15.0-45-generic
ubuntu16.04.7    4.15.0-112-generic
ubuntu18.04      4.15.0-20-generic
ubuntu18.04.1    4.15.0-29-generic
ubuntu18.04.2    4.18.0-15-generic
ubuntu18.04.3    5.0.0-23-generic
ubuntu18.04.4    5.3.0-28-generic
ubuntu18.04.5    5.4.0-42-generic
ubuntu20.04      5.4.0-26-generic
ubuntu20.04.1    5.4.0-42-generic
ubuntu20.04.2    5.8.0-41-generic
ubuntu20.04.3    5.11.0-27-generic
ubuntu20.04.4    5.13.0-30-generic
ubuntu20.04.5    5.15.0-46-generic
ubuntu22.04      5.15.0-25-generic
ubuntu22.04.1    5.15.0-43-generic
ubuntu22.04.2    5.19.0-32-generic
ubuntu22.04.3    6.2.0-26-generic 
ubuntu22.04.4    6.5.0-18-generic
ubuntu24.04      6.8.0-31-generic

这里可以看到,对于我们的5.4.31内核Ubuntu20.04是可以完美支持的。Ubuntu18.04使用的是5.3内核,虽然版本低了一些,但是经过测试也可以完美启动。上面正式版系统对应的Linux内核的版本号对于Ubuntu-Base版同样适用,这样,我们需要下载的Ubuntu版本就很明确了,我们需要下载Ubuntu-Base20.04版本。

这里下载的话,我们使用阿里云的镜像站,打开下面链接即可来到Ubuntu-Base的下载专区:

阿里云Ubuntu-Base下载:ubuntu-cdimage-ubuntu-base安装包下载_开源镜像站-阿里云

进入以后,就可以看到下面的界面了:

然后我们点击“releases”:

当我们进入“releases”后,就可以看到许多的Ubuntu-Base的发布版本:

我们往下滑找到20.04:

这里的版本都是Ubuntu20.04,我们随便进入一个即可,不过为了避免问题,直接选“20.04”是肯定没错的,进入以后,可以看到以下文件夹:

我们再次进入“releases”:

进入以后,就可以看到许多已经被构建好的,并且支持许多不同架构的Ubuntu-Base20.04系统:

因为我们的STM32MP157是arm32位架构的,所以我们这里需要选择armhf版本:

点击了以后,过一会儿浏览器就会出现下载了:

我们需要将我们下载到的这个压缩包拷贝到Ubuntu虚拟机中,这里不管大家使用什么方法,只要能将这个压缩包拷贝过去即可。

完成以后如图所示,我将其放到了NFS目录下:

这里我们需要新建一个文件夹来存放我们的Ubuntu-Base系统,直接使用下面的命令即可:

mkdir ubuntu

然后将我们的Ubuntu-Base移动到我们新建的文件夹中,使用下方的命令:

mv ubuntu-base-20.04.1-base-armhf.tar.gz ubuntu

完成以后如图所示:

随后,我们使用下方的命令解压这个压缩包:

tar -xvf ubuntu-base-20.04.1-base-armhf.tar.gz

解压完成以后,我们可以看到,我们的ubuntu文件夹中多了许多文件:

这些文件想必大家已经很熟悉了,这不就是和我们之前构建的Busybox、Buildroot差不多的嘛。Ubuntu-Base就可以理解为一个被构建好的Ubuntu根文件系统。

解压完成以后,我们将原本的压缩包删掉,这样我们就得到了一个纯净Ubuntu根文件系统:

这样,我们根文件系统就准备好了,但是为了确保我们根文件系统能够正常启动,我们还需要修改一下Uboot中的“bootargs”环境变量。进入Uboot后,我们直接使用下面的命令配置“bootargs”环境变量:

setenv bootargs 'console=ttySTM0,115200 root=/dev/nfs nfsroot=192.168.1.100:/home/chulingxiao/linux/nfs/ubuntu,proto=tcp rw ip=192.168.1.106:192.168.1.100:192.168.1.1:255.255.255.0::eth0:off'

这里同样是使用nfs挂载根文件系统,大家将命令中根文件系统的路径替换为自己Ubuntu根文件系统即可。命令中每个变量的意思在根文件系统挂载中已经讲得很清楚了,可以看Busybox与Buildroot的构建教程,里面都讲了如何挂载根文件系统并且命令中每个变量的意思。

完成上面的步骤以后,我们使用下面的命令来保存环境变量:

saveenv

环境变量保存完成以后,我们直接使用“boot”命令启动Linux内核:

等内核启动完成以后,我们就可以看到,我们的Ubuntu-Base系统已经成功启动起来了。

在这个根文件系统中,我们仍然可以使用“ls”,“cd”等基础命令。

四、结语

        本篇教程中的Ubuntu系统移植部分,正点原子并没有提及,也就没有对应的教程,但是整体看来,本篇文章中的所有操作可以说是非常入门的,我也相信大家能够完整的将Ubuntu-Base系统移植到STM32MP157上,最后,感谢大家的观看!

 

http://www.lqws.cn/news/552151.html

相关文章:

  • 华为云Flexus+DeepSeek征文|基于Dify构建文本/图像/视频生成工作流
  • linux面试常考
  • 【linux】Vm虚拟机ubuntu的接口ip掉了
  • scrapy+django+pyecharts+mysql 实现西安游客行为分析系统大屏_用户画像_空间分析_路线智能推荐
  • Minio入门+适配器模式(实战教程)
  • 鸿蒙5:布局组件
  • libxlsxwriter: 一个轻量级的跨平台的C++操作Excel的开源库
  • HTML表格中<tfoot>标签用法详解
  • 设计模式(策略,工厂,单例,享元,门面)+模板方法
  • 【数据挖掘】贝叶斯分类学习—NaiveBayes
  • git 挑选:git cherry-pick
  • GO 语言学习 之 函数
  • 为何需要防爆平板?它究竟有何能耐?
  • UniApp Vue3 模式下实现页面跳转的全面指南
  • 【笔记】 Docker目录迁移脚本
  • Python 数据分析与可视化 Day 10 - 数据合并与连接
  • 掌握 MySQL 的基石:全面解读数据类型及其影响
  • Swift Moya自定义插件打印日志
  • 【Bluedroid】蓝牙启动之BTM_reset_complete源码解析
  • GitHub Actions 实现 AWS ECS 服务的多集群安全重启方案
  • 《剖开WebAssembly 2.0:C++/Rust内存管理困局与破局》
  • 移动端日志平台EMAS
  • 接口自动化测试框架详解
  • 领域驱动设计(DDD)【22】之限定建模技术
  • 现代串口通讯UI框架性能对比
  • 【数据标注师】目标跟踪标注
  • 【MySQL数据库 | 第十篇】DCL语句----用户管理+权限控制
  • 商业秘密中经营信息的法律保护探析——以客户名册为例
  • ZooKeeper深度面试指南二
  • SpringMVC系列(七)(Restful架构风格(下))(完结篇)