泰山派开发之—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。

相关推荐
Sapphire~6 小时前
Linux-07 ubuntu 的 chrome 启动不了
linux·chrome·ubuntu
伤不起bb6 小时前
NoSQL 之 Redis 配置与优化
linux·运维·数据库·redis·nosql
广东数字化转型6 小时前
nginx怎么使用nginx-rtmp-module模块实现直播间功能
linux·运维·nginx
啵啵学习6 小时前
Linux 里 su 和 sudo 命令这两个有什么不一样?
linux·运维·服务器·单片机·ubuntu·centos·嵌入式
半桔7 小时前
【Linux手册】冯诺依曼体系结构
linux·缓存·职场和发展·系统架构
网硕互联的小客服7 小时前
如何利用Elastic Stack(ELK)进行安全日志分析
linux·服务器·网络·安全
冰橙子id8 小时前
linux——磁盘和文件系统管理
linux·运维·服务器
无聊的小坏坏9 小时前
环境变量深度解析:从配置到内核的全链路指南
linux·bash
才鲸嵌入式9 小时前
01 Ubuntu20.04下编译QEMU8.2.4,交叉编译32位ARM程序,运行ARM程序的方法
linux·c语言·单片机·嵌入式·arm·qemu·虚拟机
FREEDOM_X9 小时前
新版NANO下载烧录过程
ubuntu·机器人