STM32MP257移植ubuntu根文件系统

摘要

近期,买到STM32MP257(米尔科技),但发现并未提供ubuntu的系统镜像,由于项目开发需求,需要移植ubuntu系统,现对ubuntu系统的移植做一个总结笔记,此笔记为阶段性笔记,以便后续对项目开发进行整理总结和修正。

前言

准备阶段

开发板:STM32MP257(米尔科技,开发板链接附在文章后面)

根文件系统:ubuntu18.04

文件系统:ubuntu-base-18.04.5-base-arm64

1、到ubuntu官网获取 ubuntu-base-18.04.5-base-arm64.tar.gz

STM32MP257架构为arm64位,因此需要下载ubuntu-arm64的ubuntu-base

下载地址:Ubuntu Base 18.04.5 LTS (Bionic Beaver)

2、将获取的文件拷贝到ubuntu虚拟机,新建目录,并解压。

这里使用的是ubuntu18.04的虚拟机制作ubuntu18.04根文件系统,其他版本的ubuntu应该也可以(暂未尝试其他版本的ubuntu)

新建一个文件夹用来存放一些文件,将下载好的ubuntu-arm64的ubuntu-base放入文件夹中。

mkdir ubuntu

 然后新建文件夹,解压ubuntu-arm64的ubuntu-base到新建的文件夹中

mkdir ubuntu_rootfs
sudo tar -xpf ubuntu-base-18.04.5-base-arm64.tar.gz -C ubuntu_rootfs/

3、安装qemu-user-static

qemu-user-static是一个仿真器,可以选取arm64配置文件仿真开发板运行环境,然后挂载下载的ubuntu-base文件,从而构建ubuntu文件系统。我查看过米尔提供的系统,为aarch64架构,因此这里使用aarch64架构的配置文件。

sudo apt install qemu-user-static
sudo cp /usr/bin/qemu-aarch64-static ubuntu_rootfs/usr/bin
4、设置软件源

这里要用 ARM 源,不能复制我们本机的源。

sudo vim ./ubuntu_rootfs/etc/apt/sources.list

将原文删除,然后替换内容。

deb http://mirrors.huaweicloud.com/ubuntu-ports/ bionic main multiverse restricted universe
deb http://mirrors.huaweicloud.com/ubuntu-ports/ bionic-backports main multiverse restricted universe
deb http://mirrors.huaweicloud.com/ubuntu-ports/ bionic-proposed main multiverse restricted universe
deb http://mirrors.huaweicloud.com/ubuntu-ports/ bionic-security main multiverse restricted universe
deb http://mirrors.huaweicloud.com/ubuntu-ports/ bionic-updates main multiverse restricted universe
deb-src http://mirrors.huaweicloud.com/ubuntu-ports/ bionic main multiverse restricted universe
deb-src http://mirrors.huaweicloud.com/ubuntu-ports/ bionic-backports main multiverse restricted universe
deb-src http://mirrors.huaweicloud.com/ubuntu-ports/ bionic-proposed main multiverse restricted universe
deb-src http://mirrors.huaweicloud.com/ubuntu-ports/ bionic-security main multiverse restricted universe
deb-src http://mirrors.huaweicloud.com/ubuntu-ports/ bionic-updates main multiverse restricted universe
5、配置DNS
sudo cp /etc/resolv.conf ubuntu_rootfs/etc/resolv.conf
sudo vim ./ubuntu_rootfs/etc/resolv.conf

在/ubuntu_rootfs/etc/resolv.conf中添加内容如下

nameserver 8.8.8.8
nameserver 114.114.114.114
6、编写挂载脚本并挂载
touch mount.sh
vim  mount.sh

在mount.sh中添加以下内容

#!/bin/bash
mnt() {
	echo "MOUNTING"
	sudo mount -t proc /proc ${2}proc
	sudo mount -t sysfs /sys ${2}sys
	sudo mount -o bind /dev ${2}dev
	sudo mount -o bind /dev/pts ${2}dev/pts
	sudo chroot ${2}
}
umnt() {
	echo "UNMOUNTING"
	sudo umount ${2}proc
	sudo umount ${2}sys
	sudo umount ${2}dev/pts
	sudo umount ${2}dev
}
 
if [ "$1" == "-m" ] && [ -n "$2" ] ;
then
	mnt $1 $2
elif [ "$1" == "-u" ] && [ -n "$2" ];
then
	umnt $1 $2
else
	echo ""
	echo "Either 1'st, 2'nd or both parameters were missing"
	echo ""
	echo "1'st parameter can be one of these: -m(mount) OR -u(umount)"
	echo "2'nd parameter is the full path of rootfs directory(with trailing '/')"
	echo ""
	echo "For example: ch-mount -m /media/sdcard/"
	echo ""
	echo 1st parameter : ${1}
	echo 2nd parameter : ${2}
fi

 保存退出以后,增加脚本执行权限

sudo chmod +x mount.sh

挂载文件系统

bash mount.sh -m ubuntu_rootfs/

7、配置ubuntu根文件系统

接下来需要在ubuntu根文件系统搭建一些基础环境

apt-get update
apt install -y sudo language-pack-en-base ssh net-tools ethtool ifupdown iputils-ping htop vim bash-completion systemd

安装完成以后,设置root密码

passwd root

密码自己设置,设置完成密码后,需要设置主机名称(STM32MP257)和本机IP

echo "STM32MP257" > /etc/hostname
echo "127.0.0.1 localhost" >> /etc/hosts
echo "127.0.0.1 STM32MP257" >> /etc/hosts

 配置DHCP

echo auto eth0 > /etc/network/interfaces.d/eth0
echo iface eth0 inet dhcp >> /etc/network/interfaces.d/eth0

配置串口自动登录

vim /lib/systemd/system/serial-getty\@.service

修改BindsTo:将dev-%i.device改成dev-%i;

修改ExecStart:将-/sbin/agetty –keep-baud 115200,38400,9600 %I $TERM改成-/sbin/agetty -a root –keep-baud 115200,38400,9600 %I $TERM(如果-/sbin/agetty后面有-o参数,记得删掉,确保改完之后是一样的)

注:这里不确定开发板可以带动什么桌面,STM32MP157移植时,带桌面的根文件系统移植不进去,因此这里不安装桌面。

退出根文件系统

exit

卸载文件系统

bash mount.sh -u ubuntu_rootfs/
8、打包镜像文件

创建空的镜像文件

dd if=/dev/zero of=ubuntu_rootfs.ext4 bs=1M count=1000

将该文件格式化成ext4文件系统

mkfs.ext4 ubuntu_rootfs.ext4

 将该镜像文件挂载到一个空的文件夹上,然后将ubuntu_rootfs的文件复制到该空文件夹中

mkdir ubuntu_base_rootfs
sudo mount ubuntu_rootfs.ext4 ubuntu_base_rootfs
sudo cp -rfp ubuntu_rootfs/* ubuntu_base_rootfs/
sudo umount ubuntu_base_rootfs/
9、烧录SD卡

将rootfs的后面替换为制作好的镜像格式

将制作好的镜像放置到烧录的文件夹中,进行烧录

将开发板拨码拨到0000,连接J3进行烧录

串口可以看到烧录情况

烧录完成,将拨码拨到1000

注:如果启动卡住,可以先使用emmc启动,启动完成后在切换至SD卡启动

至此,制作完成。最后,接下来会持续更新项目的其他内容,下面可以会根据项目需要配置一些驱动,编译新的内核。

如有问题,请广大朋友们指正。

未完待续……………

作者:陈 穆

物联沃分享整理
物联沃-IOTWORD物联网 » STM32MP257移植ubuntu根文件系统

发表回复