i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT、4G模块、CAN、RS485等接口一应俱全。H264、VP8视频硬编码,H.264、H.265、VP8、VP9视频硬解码,并提供相关历程,支持8路PDM接口、5路SAI接口、2路Speaker。系统支持Android9.0(支持获取root限)Linux4.14.78+Qt5.10.1、Yocto、Ubuntu20、Debian9系统。适用于智能充电桩,物联网,工业控制,医疗,智能交通等,可用于任何通用工业和物联网应用、
【公众号】迅为电子
【粉丝群】258811263(加群获取驱动文档+例程)
第七十九章 Ubuntu20文件系统
作为 linux 开发平台,imx8MM开发板也可以移植 ubuntu 系统。Ubuntu Base 是用于为特定需求创建自定义映像的最小 rootfs。 Ubuntu Base 致力于为板级支持包(BSP)、受限制或集成环境中的应用创建适当的最小环境, 作为应用或 Linux 容器(如 LXC 或 Docker) 演示映像的基础。Ubuntu 移植比较简单, ubuntu 官方提供了制作好的根文件系统, 我们只需要配置下相关内容即可放到板子上运行。 本章我们构建的是 ubuntu20.04 系统。
79.1 Ubuntu-base 获取
首先我们打开终端, 切换到 root 模式。 如下图所示:
然后使用命令“mkdir ubuntu-base” 创建该文件夹, 并使用命令“cd ubuntu-base/” 进入该文件夹, 我们本章移植过程均在此文件内操作。 如下图所示:
Ubuntu 官方针对不同的 CPU 架构提供相应的 ubuntu base 根文件系统,有 amd64(64 位 X86)、 armhf、i386(32 位 X86)、 powerpc、 ppc64el 等系统的。我们可以先下载到 Windows 计算机内,网站如下。
http://cdimage.ubuntu.com/ubuntu-base/releases/20.04/release/
找到 ubuntu-base-20.04.1-base-arm64.tar.gz, 点击下载即可, 如下图所示:
这个压缩包在我们的资料“iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\09_i.MX8MM开发板Ubuntu文件系统构建资料\Ubuntu官方源码” 目录下会有提供。 如下图:
然后我们使用 SSH 工具传输到刚刚的目录。或者我们可以在该目录下使用以下命令直接下载,如下图所示,下载之后可以看到压缩包。
mkdir rootfs
cd rootfs/
wget http://cdimage.ubuntu.com/ubuntu-base/releases/20.04/release/ubuntu-base-20.04.1-base-arm64.tar.gz
79.2 Ubuntu-base 构建
79.2.1 解压 Ubuntu-base
我们使用命令“tar -xvf ubuntu-base-20.04.1-base-arm64.tar.gz”,如下temp图所示:
解压完成之后就是根文件系统, 使用命令“ls” 查看目录。
输入以下命令删除压缩包
rm -rf ubuntu-base-20.04.1-base-arm64.tar.gz
79.2.2 安装 Qemu-User-Static 工具
QEMU 是专门模拟不同机器架构的软件, 在 ubuntu 中对其支持良好, 若需要挂载 ubuntu armhf 版本的文件,必须安装 qemu-user-static 工具。
首先 Ubuntu 下使用命令“apt-get install qemu-user-static” 安装, 安装过程中按 y 继续。 如下图所示:
这一步骤是将 qemu-user-static 安装到了 pc 的 ubuntu 上, 然后使用命令“cp /usr/bin/qemu-aarch64-static ./usr/bin/”,拷贝 qemu-arm-static 到刚刚解压出来的目录。 如下图所示
79.2.3 设置软件源
Ubuntu 安装软件是通过名 apt-get 从网上下载安装的。 我们需要指定软件源。为了制作成功的根文件系统能够联网, 可以直接拷贝本机的 dns 配置文件到根文件系统的相应位置,使用命令“cp /etc/resolv.conf ./etc/resolv.conf” ,如下图所示:
然后修改根文件系统软件源, 使用命令,如下图所示:
sed -i 's/ports\.ubuntu\.com/mirrors\.tuna\.tsinghua\.edu\.cn/g' ./etc/apt/sources.list
echo "nameserver 114.114.114.114" > ./etc/resolv.conf
79.2.4 挂载根文件系统并 Chroot
1) 首先在本机挂载刚刚下载好的文件系统, 需要挂载 proc, sys, dev, dev/pts 等文件系统。 使用命令“vi mount.sh” 添加挂载脚本。 如下图所示:
挂载过程的脚本 mount.sh 内容如下, 修改完保存退出。
#!/bin/bash
function 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 -B /dev/pts ${2}dev/pts
sudo chroot ${2}
}
function 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
输入以下命令赋予权限
chmod a+x mount.sh
然后使用命令“./mount.sh -m rootfs/” 运行挂载。看到用户名切换到了root则成功了。
如果想要退出,则输入exit,然后输入“./mount.sh -u rootfs/”,如下图所示:
79.2.5 定制ubuntu系统
由于 ubuntu base 是一个最小根文件系统,很多命令和软件都没有,因此我们需要先安装一下常用的命令和软件。
我们输入以下命令挂载
./mount.sh -m rootfs/
然后安装软件包,输入以下命令:
apt update
apt upgrade
apt install sudo
apt install language-pack-en-base
apt install vim
apt install net-tools
apt install ethtool
apt install ifupdown
apt install iputils-ping
apt install rsyslog
apt install htop
设置root密码:
passwd
修改hostname
echo iMX8MM > /etc/hostname
设置串⼝:
systemctl enable getty@ttymxc1.service
退出:
exit
卸载:
./mount.sh -u rootfs/-u
79.2.6 打包rootfs
输入以下命令打包
tar -zcvf ubuntu_20.04_imx8mm_ubuntu_rootfs_base.tar.gz rootfs/
79.2.7 编译镜像
将Linux源码下rootfs目录下的rootfs文件系统删除
然后将ubuntu_20.04_imx8mm_ubuntu_rootfs_base.tar.gz压缩包拷贝到Linux源码根目录下,如下图所示
然后解压,输入以下命令,此时ubuntu文件系统替换了原来的文件系统
tar -vxf ubuntu_20.04_imx8mm_ubuntu_rootfs_base.tar.gz
然后按照编译章节,编译镜像,然后烧写镜像即可。
79.2.8 测试ubuntu20
将Ubuntu20镜像烧写进开发板,系统启动以后如下图所示: