【玩泰山派】4、制作ubuntu镜像-(3)在arm虚拟机中构建arm64 的Ubuntu rootfs(18.04和22.04都有)
文章目录
前言
上文已经起了一个arm的debian虚拟机,现在要在这个debian虚拟机中期构建arm64 的Ubuntu rootfs。
构建arm64 的Ubuntu18.04 rootfs步骤
下面的步骤都是在debian虚拟机中操作的
下载ubuntu18.04 arm64 base image
下载地址:ubuntu cdimg ,选择下载 ubuntu-base-18.04.5-base-arm64.tar.gz。
- wget http://cdimage.ubuntu.com/ubuntu-base/releases/18.04/release/ubuntu-base-18.04-base-arm64.tar.gz
创建temp目录,解压文件到temp
- mkdir temp
- tar -xvf ubuntu-base-18.04.5-base-arm64.tar.gz -C temp
拷贝dns域名解析文件
- cp -b /etc/resolv.conf temp/etc/resolv.conf
准备chroot脚本,并执行
vim rootfs-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 chroot ${2}
}
function umnt() {
echo "UNMOUNTING"
sudo umount ${2}/proc
sudo umount ${2}/sys
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 +x rootfs-mount.sh
bash rootfs-mount.sh -m temp
- 执行完这个后,就已经chroot到这个temp目录了
更新及安装一些包(预制自己需要的功能)
这里我是部分参考泰山派官方文档去安装,但是我只安装了一部分,免得rootfs太臃肿,之后有需要可以再安装
apt-get update
apt-get install ssh
apt-get install ethtool
apt-get install rsyslog
apt-get install bash-completion
apt-get install htop
apt-get install net-tools
apt-get install wireless-tools
apt-get install network-manager
apt-get install iputils-ping
apt-get install vim #语言包
apt-get install language-pack-en-base #这个必须要否则无法生成/etc/network/interfaces配网文件
apt-get install ifupdown
# ping
apt-get install inetutils-ping #串口
# wifi
apt-get install wpasupplicant
apt install kmod
添加用户及设置密码
- useradd -s '/bin/bash' -m -G adm,sudo lckfb
- passwd lckfb
修改完自己的根文件系统就可以exit退出chroot了,然后再执行下脚本。
- bash rootfs-mount.sh -u temp
这里指出泰山派官方文档的小错误,他创建了lckfb用户,但是改密码时使用的passwd tspi

制作根文件系统
制作自己的根文件系统,大小依据自己的根文件系统而定,注意依据 temp 文件夹的大小来修改 count 值,因为我们这里的大小为3.5G所以count=5000*bs=1M保证大于我们的temp
mkdir rootfs
dd if=/dev/zero of=linuxroot.img bs=1M count=6000
mkfs.ext4 linuxroot.img
sudo mount linuxroot.img rootfs/
sudo cp -rfp temp/* rootfs/
sudo umount rootfs/
e2fsck -p -f linuxroot.img
resize2fs -M linuxroot.img
这样 linuxroot.img 就是最终的根文件系统映像文件了。
构建arm64 的Ubuntu22.04 rootfs
泰山派官方文档中做的镜像是ubuntu 18.04,但是这个版本比较老,其中的源中有一些新包都不支持,没法直接apt安装。比如python3-libgpiod包在ubuntu 18.04中一直装不上。所有这里做一个新一点的版本Ubuntu22.04。
制作步骤和ubuntu 18.04基本一样,只是需要去官方下载ubuntu22.04 arm64 base image就ok了,下载地址下面给出
下载ubuntu22.04 arm64 base image
- https://cdimage.ubuntu.com/ubuntu-base/releases/22.04/release/ubuntu-base-22.04-base-arm64.tar.gz
其余步骤(同ubuntu 18.04)
替换ubuntu22.04 apt源
使用阿里云的源,比较快,而且要选ubuntu22.04(jammy) arm64的,选错了有坑,会有很多包没有。这里是ds查的,比较给力,这里贴出一版。实测非常ok。注意,不同ubuntu版本的源也不一样,根据实际的版本去搜索,这里是ubuntu22.04的
修改 /etc/apt/sources.list文件
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy-updates main restricted universe multiverse
# deb httprors.aliyun.com/ubuntu-ports/ jammy-proposed main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy-backports main restricted universe multiverse
遗留坑点(做出的完整镜像没有wifi网卡)
我使用上面的步骤制作出了ubuntu的rootfs,然后利用制作buildroot镜像的其他部分去执行./build.sh updateimg去打包可以烧录到sd中的完整镜像update.img,结果打包出来的镜像没有wlan0的wifi网卡设备。。。。这里不知道泰山派官方文档上是不是忽略了相关步骤,他们给出的ubuntu的镜像wifi网络是ok。或者是我参考文档的姿势不对或者遗漏了哪里。。。。。
下一个文档就自己琢磨着添加wifi驱动。
新
上面制作的镜像没有适配Rockchip的一些库,比如:mpp,libdrm等,导致无法使用Rockchip的硬件加速,使用gstreamer或者浏览器性能极差。还需要参考文档去添加对应的库。
可以参考官方制作debian镜像的脚本,但是更好是参考鲁班猫的ubuntu制作文档,包可以适配:https://github.com/LubanCat/ubuntu。鲁班猫的文档写非常完善,之后可以多参考
参考
更多推荐
所有评论(0)