按需制 定文件系统
一键编译ubuntu22.04文件系统镜像
1 安装依赖软件
#安装依赖软件
sudo apt-get install git ssh make gcc libssl-dev liblz4-tool expect g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support qemu-user-static live-build bison flex fakeroot cmake gcc-multilib g++-multilib unzip device-tree-compiler ncurses-dev python-is-python3 python-dev-is-python3 -y
2 解压根文件系统
可在SDK中直接运行build_ubuntu.sh
脚本 可直接将ubuntu22.04文件系统编译完成,如果需要自行编辑内核模块请参照2.8安装开发板驱动进行内容的修改
tip
完成此步骤后即可编译成功,无需进行对ubuntu文件系统进行手动编译中的内容。
对ubuntu文件系统进行手动编译
tip
此内容为开发者准备,如需自行定制文件系统,请按需对以下内容进行修改编译。
1 环境准备
1.1 下载ubuntu base
此处使用北京外国语大学镜像站加速下载,注意选择根据开发板架构选择arm64或其他架构。
wget https://mirrors.bfsu.edu.cn/ubuntu-cdimage/ubuntu-base/releases/22.04.2/release/ubuntu-base-22.04.2-base-arm64.tar.gz
1.2 安装依赖软件
#安装依赖软件
sudo apt-get install git ssh make gcc libssl-dev liblz4-tool expect g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support qemu-user-static live-build bison flex fakeroot cmake gcc-multilib g++-multilib unzip device-tree-compiler ncurses-dev python-is-python3 python-dev-is-python3 -y
1.3 解压根文件系统
# 创建一个文件夹存放根文件系统
mkdir ubuntu_rootfs
# 解压到文件夹
sudo tar -xvf ubuntu-base-22.04-base-arm64.tar.gz -C ubuntu_rootfs/
1.4 配置根文件系统
1.配置根文件系统的网络、软件源等
# 配置网络,复制本机 resolv.conf 文件
sudo cp /etc/resolv.conf <SDK>/ubuntu_rootfs/etc/resolv.conf
sudo echo "nameserver 8.8.8.8" >> <SDK>/ubuntu_rootfs/etc/resolv.conf
sudo echo "nameserver 114.114.114.114" >> <SDK>/ubuntu_rootfs/etc/resolv.conf
2.更换软件源,此处选择北京外国语大学镜像站
# 编辑根文件系统中的软件源配置文件
sudo vim <SDK>/ubuntu_rootfs/etc/apt/sources.list
以下是Ubuntu 22.04 版本的镜像,请注意删除根文件系统 <SDK>/ubuntu_rootfs/etc/apt/sources.list
文件中原有的内容。
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb http://mirrors.bfsu.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
# deb-src http://mirrors.bfsu.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
deb http://mirrors.bfsu.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
# deb-src http://mirrors.bfsu.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb http://mirrors.bfsu.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
# deb-src http://mirrors.bfsu.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
# deb http://mirrors.bfsu.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse
# # deb-src http://mirrors.bfsu.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse
deb http://ports.ubuntu.com/ubuntu-ports/ jammy-security main restricted universe multiverse
# deb-src http://ports.ubuntu.com/ubuntu-ports/ jammy-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb http://mirrors.bfsu.edu.cn/ubuntu-ports/ jammy-proposed main restricted universe multiverse
# # deb-src http://mirrors.bfsu.edu.cn/ubuntu-ports/ jammy-proposed main restricted universe multiverse
3.配置仿真开发板运行环境
X86 架构下的Ubuntu 系统默认不支持Arm架构,可以通过安装 qemu-user-static
实现仿真运行,从而构建 ubuntu 文件系统。
# 拷贝 qemu-aarch64-static 到 ubuntu_rootfs/usr/bin/ 目录下。
sudo cp /usr/bin/qemu-aarch64-static <SDK>/ubuntu_rootfs/usr/bin/
1.5 挂载根文件系统
首先编写挂载脚本 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
# 挂载文件系统
./mount.sh -m ubuntu_rootfs/
# 进入根文件系统
sudo chroot ubuntu_rootfs/
warning
danger
不得在未卸载文件系统时再次挂载文件系统,会导致虚拟环境崩溃!!!
在后续完成根文件系统构建,并退出后,必须卸载文件系统,否则后续在构造镜像时会报错!!!
# 卸载文件系统
./mount.sh -u ubuntu_rootfs/
2 构建根文件系统
+++
2.1 为根文件系统安装必要软件
此处请确保你构建根文件系统的环境有网络连接
# 更新软件
apt update
apt upgrade -y
mv /var/lib/dpkg/info/ /var/lib/dpkg/info_old/
mkdir /var/lib/dpkg/info
apt-get update
apt-get install
# 必要工具
apt install vim bash-completion net-tools iputils-ping ifupdown ethtool ssh rsync udev htop rsyslog curl openssh-server apt-utils dialog nfs-common psmisc language-pack-en-base sudo kmod apt-transport-https gcc g++ make cmake fdisk -y
以下内容可选择安装
# 开发工具
apt install ninja-build build-essential ffmpeg libopencv-dev libv4l-dev v4l-utils yavta -y