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为例;

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

在宿主机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远程桌面的解决方案

后面我又尝试安装了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' ...
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Rockchip RK3566是一款由Rockchip推出的高性能应用处理器,其集成了四核ARM Cortex-A55 CPU和ARM Mali-G52 GPU。在移植U-Boot 2023.04时,我们需要考虑以下几个方面的工作: 1. 了解RK3566芯片的硬件架构和技术规格,包括处理器核心、内存控制器、外设接口等。这将有助于理解U-Boot如何与硬件交互,并进行相应的配置。 2. 下载并准备U-Boot 2023.04的源代码。在Rockchip官方网站或开源社区中可以找到最新的U-Boot源代码。将其下载并解压到开发机上。 3. 设置交叉编译环境。因为U-Boot是一个跨平台的项目,所以需要配置适合RK3566的交叉编译器,确保能够正确编译U-Boot源代码。 4. 配置U-Boot。根据RK3566的硬件架构和技术规格,需要进行相应的配置,包括处理器、内存、外设等设置。这些设置在U-Boot的配置文件中进行,可以根据需求进行修改。 5. 编译U-Boot。在配置好U-Boot后,使用交叉编译器编译U-Boot源代码。编译完成后,将生成的U-Boot二进制文件烧录到RK3566的启动设备上,如eMMC或SD卡。 6. 测试U-Boot。将准备好的启动设备插入RK3566开发板中,根据开发板的启动方式,进入U-Boot命令行界面。在命令行界面中可以进行各种操作和调试,如加载内核、启动操作系统等。 7. 调试和优化。在移植和测试U-Boot过程中,可能会出现一些问题和不稳定的情况。需要通过调试和优化来解决这些问题,确保U-Boot的正常运行和稳定性。 总之,移植U-Boot 2023.04到Rockchip RK3566需要了解芯片的硬件架构和技术规格,配置和编译U-Boot源代码,进行测试和调试。这样可以确保U-Boot能够与RK3566正常交互,并为后续的操作系统加载和启动提供基础支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Graceful_scenery

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值