正点原子STM32MP257开发板移植ubuntu24.04根文件系统(带桌面版)
本篇主要内容
- 效果展示:
- 一、环境准备
- 二、移植步骤
- 1.下载、解压rootfs
- 2.ubuntu虚拟机安装qemu-user-static
- 3.根文件系统换软件源
- 4.安装必要软件
- 5.配置串口登录
- 6.设置root账户、主机名
- 7.网络配置
- 8.安装桌面环境
- 三、打包、烧写rootfs
- 1.创建一个4GB的ext4并格式化
- 2.拷贝根文件系统到ubuntu2404_rootfs.ext4
- 四、烧录ubuntu2404_rootfs
- 1.烧录测试
效果展示:
一、环境准备
✅虚拟机:ubuntu24.04
✅开发板:正点原子STM32MP257
✅根文件系统:ubuntu-base-24.04.2-base-arm64.tar.gz
二、移植步骤
1.下载、解压rootfs
wget https://cdimage.ubuntu.com/ubuntu-base/releases/24.04/release/ubuntu-base-24.04.2-base-arm64.tar.gz
mkdir ubuntu2404_rootfs
tar -xvf ubuntu-base-24.04.2-base-arm64.tar.gz -C ubuntu2404_rootfs
2.ubuntu虚拟机安装qemu-user-static
⚠️这里是在ubuntu虚拟机安装qemu,qemu是一个提供虚拟环境的工具,类似模拟器。在这里主要是在后续ubuntu虚拟机临时挂载我们制作的rootfs时,可以运行rootfs里的命令进行一些配置,这些命令都是aarch64架构的。安装后,可以看到有多种架构的qemu,这里我们用到的是aarch64。
关于aarch64和arm64什么区别?查阅资料后据说都是一个意思,指同一个架构,只是说法不同,aarch64比arm64更正式
apt-get install qemu-user-static
# 拷贝aarch64架构的qemu到rootfs中
cp /usr/bin/qemu-aarch64-static ubuntu2404_rootfs/usr/bin
3.根文件系统换软件源
⚠️ubuntu24.04更换软件源的配置文件不再是/etc/apt/source.list,而是/etc/apt/source.list.d/ubuntu.sources,并且修改方式也改变了,具体修改如下。
vi ubuntu2404_rootfs/etc/apt/sources.list.d/ubuntu.sources
⚠️更换好软件源后,在执行apt update之前,需要先安装ssl相关的证书,才可以访问上面的软件源。由于此时在rootfs里还无法安装软件,这里得先拷贝虚拟机中的证书到rootfs。
sudo cp -r /etc/ssl/ ubuntu2404_rootfs/etc/ # 直接拷贝整个ssl目录到根文件系统的etc目录
sudo chmod 777 ubuntu2404_rootfs/ # 这里需要给根文件系统加上权限,否则更新以及后续会报错
⚠️接着,进行apt update前,需要先临时挂载到这个rootfs,使用里面的apt进行,前面安装的虚拟环境qemu在这里就发挥作用了。这里的挂载命令比较多,我们通过一个简单的脚本来做比较方便,具体路径不唯一,需要根据实际确定。
#!/bin/bash
echo "MOUNTING"
sudo mount -t proc /proc ~/ubuntu2404_rootfs/proc
sudo mount -t sysfs /sys ~/ubuntu2404_rootfs/sys
sudo mount -o bind /dev ~/ubuntu2404_rootfs/dev
sudo mount -o bind /dev/pts ~/ubuntu2404_rootfs/dev/pts
sudo chroot ~/ubuntu2404_rootfs
#!/bin/bashecho "UNMOUNTING"
sudo umount ~/ubuntu2404_rootfs/proc
sudo umount ~/ubuntu2404_rootfs/sys
sudo umount ~/ubuntu2404_rootfs/dev/pts
sudo umount ~/ubuntu2404_rootfs/dev
⚠️执行mount.sh脚本,可以看到以下的界面,就成功挂载到了正在制作的rootfs中,后续的更新、安装软件,配置串口等操作均在这里执行。
4.安装必要软件
⚠️安装前先更新源,可以看到源更换成了阿里云的,也就是上面配置的
apt update
⚠️再下载必要的一些软件,以下命令安装的时候,需要选择一些信息,随意即可。
apt-get install -y sudo language-pack-en-base ssh net-tools ethtool ifupdown iputils-ping htop vim bash-completion systemd # 其余按需添加
5.配置串口登录
⚠️配置文件路径:sudo vi ubuntu2404_rootfs/lib/systemd/system/serial-getty@.service。这是一个Linux系统管理串行控制台的服务,具体配置文件的含义可见下图注释(注释为UP查阅资料后自行添加,仅供参考,可能有误)
⚠️第一处修改:BindsTo=dev-%i
⚠️第二处修改:ExecStart=-/sbin/agetty -a root --keep-baud 115200,38400,9600 %I $TERM
6.设置root账户、主机名
⚠️主机名的设置也可以省略,在后续安装好桌面环境后,初次登录会有设置的界面。这里是设置完,后面登录后的串口终端就是这样的:
root@Alientek-STM32MP257:~#
⚠️将上面的主机名绑定到本地回环地址,名称必须和上面对应
7.网络配置
# 没有这个文件就创建,内容如下
vi etc/netplan/50-cloud-init.yaml
network:version: 2ethernets:end0:dhcp4: trueend1:dhcp4: false
8.安装桌面环境
⚠️ubuntu的桌面环境一般有以下几种:gnome、xfce和KDE等。我们使用的ubuntu虚拟机一般都是gnome,而如果想要比较轻量级的,可以考虑xfce。这里我们安装的是gnome。大小大概需要3G,安装时间比较久,不想要桌面环境的这一步可以略过。
sudo apt install ubuntu-gnome-desktop
⚠️安装完桌面环境,rootfs简单的配置就完成了,可以看到此时的大小大概是3.4G
三、打包、烧写rootfs
1.创建一个4GB的ext4并格式化
dd if=/dev/zero of=ubuntu2404_rootfs.ext4 bs=1M count=4096
mkfs.ext4 ubuntu2404_rootfs.ext4
2.拷贝根文件系统到ubuntu2404_rootfs.ext4
# 挂载ubuntu2404_rootfs.ext4到虚拟机
mkdir mount_point # 创建一个目录作为挂载点
sudo mount ubuntu2404_rootfs.ext4 mount_point/
⚠️注意看是拷贝到mount_point这个目录,上面将ext4挂载到的这个目录。拷贝时间比较久,需要稍等一会。
# 拷贝根文件系统所以内容到挂载点目录
sudo cp -arv ubuntu2404_rootfs/* mount_point/
⚠️拷贝完,卸载ubuntu2404_rootfs.ext4,使用ST的烧写工具烧录即可。
四、烧录ubuntu2404_rootfs
1.烧录测试
⚠️这里我们可以复制官方提供的出厂系统固件包里的tsv文件,将最后要烧写的根文件系统改成前面制作的ubuntu2404_rootfs.ext4,并将这个文件放到E:\【正点原子】STM32MP257开发板\【正点原子】STM32MP257开发板(A盘)-基础资料\08、系统镜像\01、出厂系统镜像\01、STM32CubeProg烧录固件包
这个目录下。
⚠️接着就可以打开STM32CubeProgram烧写了,完成后就可以得到同款ubuntu24.04了。当然,这仅是简单移植ubuntu的根文件系统,可能会有不少bug出现。
⚠️等待烧写完成,串口登录开发板,就可以看到以下结果了。同时接上屏幕,可以登录到桌面,第一次登录会有个初始化向导,也会重新让填写主机名、用户名。
⚠️插上键盘和鼠标,填写完用户名和一些信息,就可以看到下图的效果了。