泰山派开发之—Ubuntu20.04根文件系统制作

本节以 Ubuntu 20.04 为例,详细介绍 Ubuntu 根文件系统的制作流程,涵盖系统安装、网络配置、用户管理、打包镜像及调试等内容。其他版本的根文件系统制作流程与此类似,可参考本指南进行移植。

准备工作

安装qemu模拟器

由于泰山派的RK3566为ARM内核,而我们的PC机通常为X86,为了能够在 x86 机器上构建在ARM上跑的Ubuntu根文件系统,需要安装 QEMU 模拟器。

bash 复制代码
sudo apt-get install qemu-user-static

下载并解压 Ubuntu 20.04 根文件系统

下载 Ubuntu 官方提供的 rootfs 版本,下载链接如下:

复制代码
https://cdimage.ubuntu.com/ubuntu-base/releases/20.04/release/ubuntu-base-20.04.1-base-arm64.tar.gz

下载完成后,执行如下命令创建目录并解压

bash 复制代码
mkdir ubuntu20_04
tar -xpf ubuntu-base-20.04.1-base-arm64.tar.gz -C ubuntu20_04/

复制wifi固件

由于我们新创建的根文件系统中并没有包含wifi的固件,因此需要我们手动将相关文件复制进来

首先进入到kernel目录下,执行如下命令,进入菜单页

bash 复制代码
make arch=ARM64 menuconfig

在其中找到wifi相关的设置

从上图可以看到,当前跟WiFi相关的文件是存放在vendor目录下的,我们在SDK的buildroot目录下找到相关文件,并复制到ubuntu根文件目录下

bash 复制代码
#cp -r -p external/rkwifibt/firmware/broadcom/all/wifi/ ubuntu20_04/lib/firmware/
mkdir ubuntu20_04/vendor
cp -r buildroot/output/rockchip_rk3566/target/system ubuntu20_04/vendor

安装模块

之后,我们进入kernel目录,编译模块并将其安装到ubuntu根文件目录中

bash 复制代码
make ARCH=arm64 modules_install INSTALL_MOD_PATH=../ubuntu20_04

准备网络和qemu

执行如下命令,将网络相关文件和qemu相关文件复制到ubuntu根文件目录中

bash 复制代码
cp -b /etc/resolv.conf ubuntu20_04/etc/resolv.conf
cp /usr/bin/qemu-aarch64-static ubuntu20_04/usr/bin/

创建脚本

之后我们创建进入根文件目录的脚本文件,并赋予其执行权限

bash 复制代码
touch rootfs-mount.sh
sudo chmod +x rootfs_mount.sh

将如下内容复制到我们创建的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

修改根文件系统

执行如下命令,进入根文件目录

bash 复制代码
sudo bash rootfs_mount.sh -m ubuntu20_04

更新并安装功能包

在虚拟环境中安装系统更新

bash 复制代码
apt-get update
apt-get upgrade

之后根据自己的需要,安装相关的的功能包

bash 复制代码
apt-get install sudo git ssh ethtool rsyslog bash-completion htop net-tools wireless-tools network-manager iputils-ping

apt-get install ffmpeg vim language-pack-en-base ifupdown inetutils-ping cutecom audacity v4l-utils cheese chromium-browser wpasupplicant

配置网络

执行如下命令,编辑/etc/network/interfaces文件

bash 复制代码
vim /etc/network/interfaces

在/etc/network/interfaces文件中添加如下内容

复制代码
source-directory /etc/network/interfaces.d #以太网
auto eth0
iface eth0 inet dhcp
#wifi
auto wlan0
iface wlan0 inet dhcp
#wpa-conf /etc/wpa_config.conf

配置DNS

执行如下命令,编辑/etc/resolv.conf文件

bash 复制代码
vim /etc/resolv.conf

在/etc/resolv.conf文件中添加如下内容

复制代码
nameserver 8.8.8.8
nameserver 114.114.114.114

用户设置

执行如下命令,添加自定义用户,其中zxfeng是我们的用户名

bash 复制代码
useradd -s '/bin/bash' -m -G adm,sudo zxfeng

执行如下命令,给zxfeng用户和root用户设置密码

bash 复制代码
passwd zxfeng
#12345678
passwd root
#root

退出根文件系统

以上设置完成后,执行如下命令,退出根文件系统

bash 复制代码
exit

制作rootfs镜像

查看目录大小

首先执行如下命令,查看我们的ubuntu20_04的大小

bash 复制代码
sudo du -h --max-depth=1

可以看到当前它的大小为1.9G

制作镜像

执行如下命令,将我们制作的根文件系统打包为linuxroot.img镜像

bash 复制代码
mkdir rootfs
dd if=/dev/zero of=linuxroot.img bs=1M count=8000
mkfs.ext4 linuxroot.img
sudo mount linuxroot.img rootfs/
sudo rsync -aAX --exclude={"/proc/*","/sys/*","/dev/*","/run/*"} /home/SDK/tspi/ubuntu20_04/ rootfs/
#sudo cp -rfp /home/SDK/tspi/ubuntu20_04/* rootfs/
sudo umount rootfs/
e2fsck -p -f linuxroot.img
resize2fs -M linuxroot.img

其中需满足 bs*count>我们的ubuntu20_04目录大小。由于bs=1M且ubuntu20_04的大小为1.9G。为保险起见,我这里设置count=6000,远大于1900。

rootfs替换

制作完成后,我们将rockdev目录下的rootfs.img替换为我们前面生成的linuxroot.img。

镜像烧录

打包镜像

类似地,执行如下命令,将所有镜像打包进update.img

bash 复制代码
./build.sh updateimg

镜像下载

镜像打包完成后,我们可以使用upgrade_tool进行镜像的下载

上板测试

镜像烧录完成后,我们使用串口连接开发板,测试系统是否能够正常使用

执行如下命令,查看内核版本以及文件系统

bash 复制代码
uname -r
lsb_release -a
#cat /etc/issue

可以看到当前已经为Ubuntu20.04了。

其它问题

hostname修改

使用vim编辑/etc/hostname文件

bash 复制代码
vi /etc/hostname

将其中内容改为自己想要设置的名称,并reboot重启系统,即可看到当前的hostname已被修改

小结

在本节中,我们以 Ubuntu 20.04 为例,详细介绍 Ubuntu 根文件系统的制作流程。并成功在泰山派上移植Ubuntu20.04。

相关推荐
无名的小三轮29 分钟前
RedHatLinux(2025.3.22)
linux
FreakStudio1 小时前
一文速通 Python 并行计算:05 Python 多线程编程-线程的定时运行
单片机·嵌入式·多线程·面向对象·并行计算·电子diy
myloveasuka1 小时前
[Linux]在vim中批量注释与批量取消注释
linux·vim
pingxiaozhao1 小时前
linux系统中fstab 各字段详细说明
linux
Learn-Share_HY2 小时前
[Python]如何利用Flask搭建一個Web服務器,並透過Ngrok訪問來實現LINE Bot功能?
linux·人工智能·python·ubuntu·flask·ollama·ngrok
字节程序员3 小时前
Jenkins 持续集成:Linux 系统 两台机器互相免密登录
linux·软件测试·ci/cd·jenkins
试水年华3 小时前
鸿蒙Next-集成HmRouter的路由模式
linux·运维·服务器·华为·harmonyos·ark-ts语言
Bigger3 小时前
Mac 命令行及 Linux 使用指南与示例
linux·前端·命令行
Karl_wei4 小时前
Flutter Linux应用初探
linux·前端·flutter
IT缺脑干4 小时前
CentOS 7 挂载与卸载文件系统
linux·运维·centos