Rockchip RK3399
Posted 大奥特曼打小怪兽
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rockchip RK3399相关的知识,希望对你有一定的参考价值。
在上一篇文章中,我们介绍了通过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 设置软件源
需要注意的是,这里要用ARM源,不能复制我们本机的源。
root@zhengyang:/work/sambashare/rk3399/rootfs/ubuntu# sudo vim ./etc/apt/sources.list
这里我们选择华为国内下载源,这里需要把原内容删除,全部替换为:
deb http://mirrors.huaweicloud.com/ubuntu-ports/ bionic main multiverse restricted universe deb http://mirrors.huaweicloud.com/ubuntu-ports/ bionic-backports main multiverse restricted universe deb http://mirrors.huaweicloud.com/ubuntu-ports/ bionic-proposed main multiverse restricted universe deb http://mirrors.huaweicloud.com/ubuntu-ports/ bionic-security main multiverse restricted universe deb http://mirrors.huaweicloud.com/ubuntu-ports/ bionic-updates main multiverse restricted universe deb-src http://mirrors.huaweicloud.com/ubuntu-ports/ bionic main multiverse restricted universe deb-src http://mirrors.huaweicloud.com/ubuntu-ports/ bionic-backports main multiverse restricted universe deb-src http://mirrors.huaweicloud.com/ubuntu-ports/ bionic-proposed main multiverse restricted universe deb-src http://mirrors.huaweicloud.com/ubuntu-ports/ bionic-security main multiverse restricted universe deb-src http://mirrors.huaweicloud.com/ubuntu-ports/ bionic-updates main multiverse restricted universe
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 $2proc sudo mount -t sysfs /sys $2sys sudo mount -o bind /dev $2dev sudo mount -o bind /dev/pts $2dev/pts sudo chroot $2 umnt() echo "UNMOUNTING" sudo umount $2proc sudo umount $2sys sudo umount $2dev/pts sudo umount $2dev 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/
需要注意的是:挂载后,就进入到了开发板仿真环境,可以安装软件,更改系统配置;
文件系统构建完成后,输入 exit ,退出仿真环境,然后运行脚本,卸载ubuntu_base文件系统;
1.3.2 卸载文件系统
需要运行exit命令从开发板仿真环境退出,然后执行如下命令卸载文件系统:
root@zhengyang:/work/sambashare/rk3399/rootfs# ./mnt_ubuntu.sh -u ubuntu/
1.4 软件安装
参考文章
[1] 基于ubuntu-base构建根文件系统并移植到RK3568开发板(部分转载)
[3] Ubuntu 根文件系统构建
Rockchip | Rockchip原始固件与RK固件格式
固件有两种格式:
-
原始固件(raw firmware)
-
RK固件(Rockchip firmware)
原始固件,是一种能以逐位复制的方式烧写到存储设备的固件,是存储设备的原始映像。原始固件一般烧写到 SD 卡中,但也可以烧写到 eMMC 中。 烧写原始固件有许多工具可以选用:
-
烧写 SD 卡
-
图形界面烧写工具:
-
SDCard Installer (Linux/Windows/Mac)
-
Etcher (Linux/Windows/Mac)
-
-
命令行烧写工具
-
dd (Linux)
-
-
-
烧写 eMMC
-
图形界面烧写工具:
-
AndroidTool (Windows)
-
-
命令行烧写工具:
-
upgrade_tool (Linux)
-
rkdeveloptool (Linux)
-
-
RK 固件,是以 Rockchip专有格式打包的固件,使用 Rockchip 提供的工具可以烧写到 eMMC 或者 SD 卡中。 烧写RK 固件有以下工具可以选用:
-
烧写 SD 卡
-
图形界面烧写工具:
-
SD Firmware Tool (Windows)
-
-
-
烧写 eMMC
-
图形界面烧写工具:
-
AndroidTool (Windows)
-
-
命令行烧写工具:
-
upgrade_tool (Linux)
-
-
分区映像,是分区的映像数据,用于存储设备对应分区的烧写。例如,编译 Android SDK会构建出 boot.img
、kernel.img
和system.img
等分区映像文件,kernel.img
会被写到eMMC 或 SD 卡的 “kernel” 分区。
以上是关于Rockchip RK3399的主要内容,如果未能解决你的问题,请参考以下文章
RK3399快速上手 | 03-rockchip rk3399 linux sdk的使用
RK3399快速上手 | 03-rockchip rk3399 linux sdk的使用