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卡启动
至此,制作完成。最后,接下来会持续更新项目的其他内容,下面可以会根据项目需要配置一些驱动,编译新的内核。
如有问题,请广大朋友们指正。
未完待续……………
作者:陈 穆