以Ubuntu Base构建文件系统的示例

获取镜像:可以依据所需版本进行适当修改

wget http://cdimage.ubuntu.com/ubuntu-base/releases/22.04/release/ubuntu-base-22.04-base-arm64.tar.gz

构建基础镜像:如果不以root方式构建实际镜像中会有所属权限问题

mkdir ubuntu-rootfs
sudo chown root:root ubuntu-rootfs
sudo tar -xvf ubuntu-base-22.04-base-arm64.tar.gz -C ubuntu-rootfs

构建挂载环境:

sudo apt-get install qemu-user-static
cd ubuntu-rootfs
sudo cp /usr/bin/qemu-aarch64-static  usr/bin
sudo cp -b /etc/resolv.conf etc/
cd ../

构建挂载环境脚本:

vim ch-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 -o bind /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

进行脚本挂载:此处注意脚本中所需要的路径带/,ubuntu-rootfs/中的’/’不可省略

./ch-mount.sh -m ubuntu-rootfs/

挂载完毕后进入文件系统

首先安装基础软件包:

apt-get install \
language-pack-en-base \
sudo \
ssh \
net-tools \
network-manager \
iputils-ping \
rsyslog \
bash-completion \
htop \

设定用户组并修改密码

useradd -s '/bin/bash' -m -G adm,sudo yourusername
echo "Set password for yourusername:"
passwd yourusername
echo "Set password for root:"
passwd root

修改主机名:

echo 'ubuntu.yourusername' > /etc/hostname

配置登录的串口:注意此功能本人未验证

因为暂时未安装桌面,所以这里的配置要具体和内核中登录的串口的设备对应起来,不然对导致无法通过串口登录的问题。在 /etc/init/ 下添加或修改ttyS0.conf

start on stopped rc or RUNLEVEL=[12345]
stop on RUNLEVEL [!12345]
respawn
exec /sbin/getty -L 115200 ttyFIQ0 vt102

退出文件系统并解除挂载:同理‘/’不可省略

exit
./ch-mount -u ubuntu-rootfs\

制作容器

dd if=/dev/zero of=ubuntu-rootfs.img bs=4M count=2048
sudo mkfs.ext4 ubuntu-rootfs.img

制作镜像:

mkdir  ubuntu-mount
sudo mount ubuntu-rootfs.img ubuntu-mount/
sudo cp -rfp ubuntu-rootfs/*  ubuntu-mount/
sudo umount ubuntu-mount/
e2fsck -p -f ubuntu-rootfs.img
resize2fs -M ubuntu-rootfs.img

最终 ubuntu-rootfs.img 为三大件中的文件系统镜像

本次构建基于全志T507构建,由于涉及Android内核,最终还需要构建_apt用户,net用户来保证网络访问正常