Rockchip RK3399 - 移植ubuntu 20.04.4根文件系统

----------------------------------------------------------------------------------------------------------------------------

开发板    :NanoPC-T4开发板eMMC    :16GBLPDDR3 :4GB显示屏    :15.6英寸HDMI接口显示屏u-boot      :uboot 2023.04linux        :6.3----------------------------------------------------------------------------------------------------------------------------

在上一篇文章中,我们介绍了通过busybox构建根文件系统,但是我们在使用的过程中有个致命的问题,就是缺少各种命令以及各种开发环境,比如python,jdk、mysql啊。比如我们需要使用python开发环境,那么我们就得自己去下载python源码编译,然后移植到开发板中。那我们就开始想,我们是不是像centos、ubuntu这些文件系统一样,直接通过apt、yum命令搞定这些安装呢?

幸运的是,我们搜索网上资料发现,ubuntu针对不同的CPU架构提供相应的ubuntu base根文件系统,目前提供的架构有amd64、arm64、armhf、i386、s390x、ppc64。因此我们可以直接构建基于ubuntu base的根文件系统。

一、ubuntu base

ubuntu base是用于为特定需求创建自定义映像的最小rootfs,是ubuntu可以运行的最小环境。

1.1 下载源码

下载ubuntu-base的方式有很多,我们可以从官方的地址:ttp://cdimage.ubuntu.com/ubuntu-base/releases。

也可以其它镜像地址下载,如清华源:https://mirrors.tuna.tsinghua.edu.cn/ubuntu-cdimage/ubuntu-base/releases/。

根据需要,下载自己对应的发行版本,这里我们就已20.04为例;

Rockchip RK3399 - 移植ubuntu 20.04.4根文件系统_第1张图片

进入到对应的版本目录后,根据我们的CPU类型,选择对应的文件下载,这里,我们使用的是RK3399,64位的CPU,我们选择arm64的版本;

Rockchip RK3399 - 移植ubuntu 20.04.4根文件系统_第2张图片

在宿主机ubuntu命令行运行如下命令,开始下载文件:

root@zhengyang:/work/sambashare/rk3399# wget https://mirrors.tuna.tsinghua.edu.cn/ubuntu-cdimage/ubuntu-base/releases/20.04/release/ubuntu-base-20.04.4-base-arm64.tar.gz
root@zhengyang:/work/sambashare/rk3399# ll ubuntu-base-20.04.4-base-arm64.tar.gz
-rw-r--r-- 1 root root 26228459 Feb 22  2022 ubuntu-base-20.04.4-base-arm64.tar.gz

下载完成后,在宿主机上选择建立一个rootfs/ubuntu目录,将下载的文件ubuntu-base-20.04.4-base-arm64.tar.gz解压到该目录下;

root@zhengyang:/work/sambashare/rk3399# mkdir -p rootfs/ubuntu
root@zhengyang:/work/sambashare/rk3399# sudo tar -xpvf ubuntu-base-20.04.4-base-arm64.tar.gz -C rootfs/ubuntu/
root@zhengyang:/work/sambashare/rk3399# cd rootfs/ubuntu/
root@zhengyang:/work/sambashare/rk3399/rootfs/ubuntu# ls
bin  boot  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

需要注意的是:解压后的文件,需要保留ubuntu-base中的文件权限及所有者,解压时需要root权限或者sudo操作,且使用-p参数保留权限;

1.2 配置
1.2.1 安装qemu

qemu-user-static是一个仿真器,可以选取arm64配置文件仿真开发板运行环境,然后挂载下载的ubuntu-base文件,从而构建ubuntu文件系统。

root@zhengyang:/work/sambashare/rk3399/rootfs/ubuntu# sudo apt-get install qemu-user-static

由于下载的ubuntu-base是aarch64架构的,因此需要拷贝qemu-aarch64-static到ubuntu/usr/bin/下;

root@zhengyang:/work/sambashare/rk3399/rootfs/ubuntu# sudo cp /usr/bin/qemu-aarch64-static ./usr/bin/
1.2.2 设置软件源

什么是源?其实吧它就像苹果和案桌的软件应用商店一样,为Linux用户提供软件下载及更新服务的。Linux家族有三个软件源系统:

  • yum源,使用这种软件管理器的主要是:redhat,centos;
  • apt源,使用这种软件管理器的主要是:ubuntu;
  • pacman源,使用这种软件管理器的主要是:archlinux还有新近崛起的manjaro;

uzbuntu是外国人开发的系统,默认使用的也是国外的源,但是从国内FQ下载国外的软件(插件)源太慢。其实国内也有很多的镜像源,比如说阿里源,网易源,清华源,中科大源(推荐,不限速),兰州大源等。

需要注意的是,这里要用ARM源,不能复制我们本机的源。

root@zhengyang:/work/sambashare/rk3399/rootfs/ubuntu# sudo vim ./etc/apt/sources.list

这里我们选择华为国内下载源,这里需要把原内容删除,全部替换为:

deb http://mirrors.huaweicloud.com/ubuntu-ports/ focal main multiverse restricted universe
deb http://mirrors.huaweicloud.com/ubuntu-ports/ focal-backports main multiverse restricted universe
deb http://mirrors.huaweicloud.com/ubuntu-ports/ focal-proposed main multiverse restricted universe
deb http://mirrors.huaweicloud.com/ubuntu-ports/ focal-security main multiverse restricted universe
deb http://mirrors.huaweicloud.com/ubuntu-ports/ focal-updates main multiverse restricted universe
deb-src http://mirrors.huaweicloud.com/ubuntu-ports/ focal main multiverse restricted universe
deb-src http://mirrors.huaweicloud.com/ubuntu-ports/ focal-backports main multiverse restricted universe
deb-src http://mirrors.huaweicloud.com/ubuntu-ports/ focal-proposed main multiverse restricted universe
deb-src http://mirrors.huaweicloud.com/ubuntu-ports/ focal-security main multiverse restricted universe
deb-src http://mirrors.huaweicloud.com/ubuntu-ports/ focal-updates main multiverse restricted universe

如要用于其他版本,把focal换成其他版本代号即可: 22.04:jammy;20.04:focal;18.04:bionic;16.04:xenial;14.04:trusty。

需要下载失败,尝试更换下载源。

其他源,比如清华源:

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-proposed main restricted universe multiverse

163源:

deb http://mirrors.163.com/ubuntu-ports/ focal main restricted universe multiverse
deb http://mirrors.163.com/ubuntu-ports/ focal-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu-ports/ focal-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu-ports/ focal-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu-ports/ focal-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu-ports/ focal main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu-ports/ focal-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu-ports/ focal-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu-ports/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu-ports/ focal-backports main restricted universe multiverse
1.2.3 配置DNS

为了可以联网更新软件,我们拷贝本机的dns配置文件到根文件系统;

root@zhengyang:/work/sambashare/rk3399/rootfs/ubuntu# sudo cp /etc/resolv.conf ./etc/resolv.conf

然后在/etc/resolv.conf文件中添加dns:

root@zhengyang:/work/sambashare/rk3399/rootfs/ubuntu# sudo vim ./etc/resolv.conf

添加内容如下:

nameserver 8.8.8.8
nameserver 114.114.114.114
1.3 挂载/卸载ubuntu-base文件系统

在rootfs目录下创建挂载脚本mnt_ubuntu.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

增加脚本执行权限:

root@zhengyang:/work/sambashare/rk3399/rootfs# sudo chmod +x mnt_ubuntu.sh
1.3.1 挂载文件系统

执行如下命令将会挂载ubunru-base文件系统;

root@zhengyang:/work/sambashare/rk3399/rootfs# ./mnt_ubuntu.sh -m ubuntu/

执行该命令实际上就是执行:

sudo mount -t proc /proc ubuntu/proc
sudo mount -t sysfs /sys ubuntu/sys
sudo mount -o bind /dev ubuntu/dev
sudo mount -o bind /dev/pts ubuntu/dev/pts
sudo chroot ubuntu/

(1) proc文件系统是指一类虚拟文件系统,它不是从磁盘上的分区中读取数据,而是通过内核在内存中动态生成的。proc文件系统通常用于提供有关系统内核和进程信息的接口,例如系统内存使用情况、硬件设备信息等。在Linux系统中挂载proc文件系统的命令格式如下:

mount -t proc [选项] /proc [挂载点]

其中,-t proc 参数表示将要挂载的文件系统类型是proc 文件系统;/proc 表示要挂载的proc文件系统的挂载点;ubuntu/proc 表示挂载点在当前目录下的一个名为 ubuntu 的子目录中的proc子目录。通过这个命令,可以将proc文件系统挂载到指定的挂载点,以便访问其中包含的有关系统内核和进程信息的接口。

(2) mount -y sysfs命令和mount -t proc同理;

(3) mount -o bind命令将前一个目录挂载到后一个目录上,所有对后一个目录的访问其实都是对前一个目录的访问;

(4) chroot ubuntu/命令把根目录换成指定的目的目录,此时根目录就变成了ubunru-base所在目录的;用ll可以看到文件系统也有变化,此终端里的根文件系统已经切换到ubuntu目录里的根文件系统,就像进入了一个新系统,所以这也叫作是模拟运行根文件系统;

我们可以在在命令行安装软件,更改系统配置;

root@zhengyang:/# ll
total 56
drwxr-xr-x  17 root root 4096 May 29 15:18 ./
drwxr-xr-x  17 root root 4096 May 29 15:18 ../
lrwxrwxrwx   1 root root    7 Feb 21  2022 bin -> usr/bin/
drwxr-xr-x   2 root root 4096 Apr 15  2020 boot/
drwxr-xr-x  18 root root 4300 May 30 10:54 dev/
drwxr-xr-x  30 root root 4096 May 29 15:30 etc/
drwxr-xr-x   2 root root 4096 Apr 15  2020 home/
lrwxrwxrwx   1 root root    7 Feb 21  2022 lib -> usr/lib/
drwxr-xr-x   2 root root 4096 Feb 21  2022 media/
drwxr-xr-x   2 root root 4096 Feb 21  2022 mnt/
drwxr-xr-x   2 root root 4096 Feb 21  2022 opt/
dr-xr-xr-x 366 root root    0 May 30 11:19 proc/
drwx------   2 root root 4096 May 29 15:38 root/
drwxr-xr-x   4 root root 4096 Feb 21  2022 run/
lrwxrwxrwx   1 root root    8 Feb 21  2022 sbin -> usr/sbin/
drwxr-xr-x   2 root root 4096 Feb 21  2022 srv/
dr-xr-xr-x  13 root root    0 May 30 10:54 sys/
drwxrwxrwt   2 root root 4096 Feb 21  2022 tmp/
drwxr-xr-x  10 root root 4096 Feb 21  2022 usr/
drwxr-xr-x  11 root root 4096 Feb 21  2022 var/

文件系统配置完成,输入 exit ,然后运行脚本卸载文件系统;

1.3.2 卸载文件系统

执行如下命令卸载文件系统:

root@zhengyang:/work/sambashare/rk3399/rootfs# ./mnt_ubuntu.sh -u ubuntu/

实际上就是把之前挂载的全部卸载掉。

1.4 安装软件以及桌面环境等
1.4.1 安装必要软件

默认下,ubuntu-base基本没安装什么工具,如果要正常使用,我们可以根据需要安装,以下基本的几个建议都进行安装;

root@zhengyang:/# apt-get update                #更新一下软件包的数据库
root@zhengyang:/# apt-get install net-tools
root@zhengyang:/# apt-get install ethtool
root@zhengyang:/# apt-get install ifupdown
root@zhengyang:/# apt-get install psmisc
root@zhengyang:/# apt-get install nfs-common
root@zhengyang:/# apt-get install htop
root@zhengyang:/# apt-get install vim
root@zhengyang:/# apt-get install rsyslog
root@zhengyang:/# apt-get install iputils-ping
root@zhengyang:/# apt-get install language-pack-en-base
root@zhengyang:/# apt-get install sudo
root@zhengyang:/# apt-get install network-manager systemd
root@zhengyang:/# apt install iputils-ping
root@zhengyang:/# apt install openssh-sftp-server

如果出现如下问题:

root@zhengyang:/# apt-get install net-tools
E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.
root@zhengyang:/# sudo dpkg --configure -a
1.4.2 安装桌面环境

ubuntu官方考虑到使用者的不同需求,提供各种不同的发行板。虽然发布了几种版本的ubuntu系统,但是他们的核心系统是一模一样的,可以这么说不同发行版的ubuntu的区别在于:桌面环境的不同和预设安装的软件的不同;

(1) ubuntu:ubuntu是主要的发行版,它使用GNOME这个桌面环境,相依的虚拟套件是ubuntu-desktop;

(2) kubuntu:采用以功能强大闻名的KDE当成桌面环境,功能众多以及华丽桌面配置为其卖点,相依的虚拟套件是kubuntu-desktop;

(3) xubuntu:采用了比较轻量级的桌面环境Xfce,所以这个版本的诉求是针对比较老旧的电脑。Xfce的设计理念是减少使用的系统资源,并且成为一套完整可用的桌面环境。功能来说,虽没有像ubuntu与kubuntu功能众多,但也具备基本文书、上网与影音等功能。相依的虚拟套件是xubuntu-desktop;

(4) lubuntu:采用了比Xfce更轻量的桌面环境Lxde,是自从10.04之后才新增的版本。这个版本的诉求是针对小笔电、效能较差的电脑或追求快速的使用者。虽然精简,但仍然符合大多数使用者对于桌面的要求。同样具备文书处理、上网和影音,更特别的是,它已经内建了几乎所有播放需要使用到的解码器,可直接播放mp3及rmvb等格式的档案,相依的虛擬套件是lubuntu-desktop;

(5) edubuntu:是ubuntu的教育分支版。它主要的诉求是教育使用,所以里面有很多精心挑选的教育相关套件,和一些小游戏等。而为了可以让教师们快速安装到电脑教室或安装到老旧的电脑里,它还使用了LTSP技术,可以让老师们在短短的一个小时内建立整个电脑教师环境。使用GNOME桌面环境相依的虚拟套件是edubuntu-desktop;使用KDE桌面环境相依的虚拟套件是edubuntu-desktop-kde;

LTSP (Linux Terminal Server Project)的发展目的是提供多个工作站只负责显示,实际软体和计算在伺服器上面,也叫做thin-clients机制。它的好处是工作站可以使用很老旧的电脑,因为工作站只用来当XTerminal,所以一切资源都放在伺服器上。这个方式可以让维修成本和管理成本减少很多,所以特别适合公司和学校使用;

这我们选择一个虚拟套件安装,这里我最初的虚拟套件是ubuntu-desktop;

root@zhengyang:/# apt-get install ubuntu-desktop

需要注意:安装之后桌面环境在开发板运行起来后,CPU占用率相对较高,这下图是我当时使用火狐浏览器打开视频的CPU占用情况,在RK3399上性能不咋样,因此如果不是必要尽量不要安装桌面环境环境,可以考虑采用安装x11vnc远程桌面的解决方案

Rockchip RK3399 - 移植ubuntu 20.04.4根文件系统_第3张图片

后面我又尝试安装了xubuntu,安装过程中有几点需要注意:

  • 语言布局我选的Chinese - Hanyu Pinyin (altgr);
  • 显示管理器(它们提供图形登录并处理用户身份验证)我选择的是lightdm;可以通过cat /etc/X11/default-display-manager命令查看安装的哪一个;

后面介绍的流程都是针对ubuntu的,当然对xubuntu、lubuntu等基本都是适用的(如果有差异,请自行更正)。

1.4.3 安装ubuntu-restricted-extras

ubuntu-restricted-extras是一个包含各种基本软件,如Flash插件、unrar、gstreamer、mp4、ubuntu中的chromium浏览器的编解码器等的软件包。

由于这些软件不是开源软件,并且其中一些涉及软件专利,因此ubuntu默认情况下不会安装它们。你必须使用multiverse仓库,它是ubuntu 专门为用户提供非开源软件而创建的仓库。

由于ubuntu-restrcited-extras软件包在multiverse仓库中,因此你应验证系统上已启用 multiverse仓库:

root@zhengyang:/# sudo add-apt-repository multiverse

然后你可以使用以下命令安装:

root@zhengyang:/# sudo apt install ubuntu-restricted-extras

安装完成后,由于新安装的媒体编解码器,你应该可以播放MP3和其他媒体格式了。

在kubuntu、lubuntu 和 xubuntu 都有此软件包,并有各自不同的名称。它们本应使用相同的名字,但不幸的是并不是。

在 kubuntu 上,使用以下命令:

sudo apt install kubuntu-restricted-extras

在 lubuntu 上,使用:

sudo apt install lubuntu-restricted-extras

在 xubuntu 上,你应该使用:

sudo apt install xubuntu-restricted-extras

在kubuntu、lubuntu 下安装我没有测试,但是在xubuntu下安装发现找不到安装包,可以考虑安装ubuntu-restricted-extras试试。

注意:如果有看视频的诉求,这个一定要安装,不然是无法观看视频的,浏览器也是无法打开视频。

1.5 系统设置
1.5.1 修改root用户密码

为了方便, 这里我直接将密码设置为123456;

root@zhengyang:/# passwd root
New password:
Retype new password:
passwd: password updated successfully
1.5.2 新增用户

新增用户,这个根据具体的情况,嵌入式的环境下,我们可以不用新增,直接使用root的用户就行了,如果要新增,执行如下的步骤:

root@zhengyang:/# adduser zhengyang
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LC_TIME = "en_DK.UTF-8",
        LANG = "zh_CN.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
Adding user `zhengyang' ...
Adding new group `zhengyang' (1000) ...
Adding new user `zhengyang' (1000) with group `zhengyang' ...
Creating home directory `/home/zhengyang' ...

你可能感兴趣的:(RockChip,RK3399,ubuntu,linux,运维,服务器)