【RK3588 开发笔记——Ubuntu系统的制作与使用】

本篇文档SDK 基于RK3588_LINUX_SDK_RELEASE_202205 内核版本为kernel 5.10,uboot、kernel等镜像文件自行准备,此文档只针对Ubuntu根文件系统进行介绍。

一、制作Ubuntu根文件系统(rootfs.img)

根文件系统的制作需要在虚拟机中完成,本篇文档是基于Windows 10 的VMware Workstation Pro 中Ubuntu 18.04 ,各位自行搭建虚拟机环境。

1.准备工作

首先在虚拟机环境下打开命令行,所有步骤均在命令行中完成。
在虚拟机中安装模拟器qemu , 执行以下命令

sudo apt-get install qemu-user-static

下载和解压 ubuntu-core 可以在ubuntu cdimg 中下载(本文准备制作Ubuntu 20.04版本,如需其他版本自行修改超链接中版本号即可打开相应网站)
下载完成后创建根文件系统文件夹并解压,执行如下命令

mkdir binary
sudo tar -xpf ubuntu-base-XXXXX.tar.gz -C binary //对应压缩包名称自行修改

2.修改最小文件系统

修改网络配置(DNS),执行如下命令:

sudo cp -b /etc/resolv.conf binary/etc/resolv.conf
如果网络接口正常,但无法使用网络,有可能是这里的DNS没有配置正确

模拟运行arm64架构(二选一)

//适用于arm32位架构
sudo cp /usr/bin/qemu-arm-static ubuntu-rootfs/usr/bin/
//适用于aarch64即arm64架构
sudo cp /usr/bin/qemu-aarch64-static ubuntu-rootfs/usr/bin/

镜像源修改(可选操作)
使下载速度更快,这里添加国内镜像,本文使用阿里云镜像源,如需要其他镜像可自行搜索添加,直接替换binary/etc/apt/sources.list中的内容即可。
以下为Ubuntu 20.04版本,如果是Ubuntu 22.04版本,需将下文的focal全部替换为jammy。

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://mirrors.aliyun.com/ubuntu-ports/ focal main restricted
# deb-src http://mirrors.aliyun.com/ubuntu-ports/ focal main restricted
 
## Major bug fix updates produced after the final release of the
## distribution.
deb http://mirrors.aliyun.com/ubuntu-ports/ focal-updates main restricted
# deb-src http://mirrors.aliyun.com/ubuntu-ports/ focal-updates main restricted
 
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://mirrors.aliyun.com/ubuntu-ports/ focal universe
# deb-src http://mirrors.aliyun.com/ubuntu-ports/ focal universe
deb http://mirrors.aliyun.com/ubuntu-ports/ focal-updates universe
# deb-src http://mirrors.aliyun.com/ubuntu-ports/ focal-updates universe
 
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://mirrors.aliyun.com/ubuntu-ports/ focal multiverse
# deb-src http://mirrors.aliyun.com/ubuntu-ports/ focal multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ focal-updates multiverse
# deb-src http://mirrors.aliyun.com/ubuntu-ports/ focal-updates multiverse
 
## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://mirrors.aliyun.com/ubuntu-ports/ focal-backports main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu-ports/ focal-backports main restricted universe multiverse
 
## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu focal partner
# deb-src http://archive.canonical.com/ubuntu focal partner
 
deb http://mirrors.aliyun.com/ubuntu-ports/ focal-security main restricted
# deb-src http://mirrors.aliyun.com/ubuntu-ports/ focal-security main restricted
deb http://mirrors.aliyun.com/ubuntu-ports/ focal-security universe
# deb-src http://mirrors.aliyun.com/ubuntu-ports/ focal-security universe
deb http://mirrors.aliyun.com/ubuntu-ports/ focal-security multiverse
# deb-src http://mirrors.aliyun.com/ubuntu-ports/ focal-security multiverse

添加一个挂载脚本 mount.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
}
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
fi

添加执行权限,执行如下命令:

chmod +x mount.sh

3.更新安装其他功能

首先挂载文件系统,执行如下命令:(注意,路径结尾的“/”不能少)

./mount.sh -m binary/

进入文件系统,执行如下命令:

sudo chroot binary

更新最小系统中原有功能,执行如下命令:

apt update
apt upgrade -y

安装 systemd,否则无法开机,执行如下命令:

apt install -y systemd

安装一些必要的软件,以下仅供参考,如有其他需求,自行安装。执行如下命令:

apt install apt-utils dialog vim sudo ssh rsync udev htop rsyslog bash-completion net-tools iputils-ping ifupdown ethtool wireless-tools network-manager bluetooth* bluez* blueman*

安装过程中命令行提示选择时,按需求选择即可。
配置系统时区,执行如下命令:

apt install locales tzdata
亚洲地区选择:6,Asia
中国时区选择:70,Shanghai
如有其他需求,自行选择。

配置系统文字编码

dpkg-reconfigure locales
勾选中文环境与英文环境
en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
注意:上下箭头可移动,按空格选择

安装图形环境,此过程耗时较长,执行如下命令:(如想安装其他图形环境,可自行替换,切记不可安装多个图形环境)

apt install ubuntu-desktop //其他可选xubuntu-desktop lubuntu-desktop等
提示选择桌面管理器时,可以选gdm

安装中英文语言包与输入法(可选)

# 英文环境
apt install language-pack-en-base 
apt install language-pack-gnome-en-base 
 
# 中文环境
apt install language-pack-zh-hans-base 
apt install language-pack-gnome-zh-hans-base
 
# 中文输入法
apt install ibus-table-wubi ibus-pinyin ibus-sunpinyin

设置开机默认切换到图形界面,执行如下命令:

systemctl set-default graphical.target

设置主机名,增加用户,修改账户密码,执行如下命令:

# 主机名
echo "ubuntu" > /etc/hostname
# 主机IP地址
echo "127.0.0.1 localhost" >> /etc/hosts
echo "127.0.0.1 ubuntu" >> /etc/hosts
echo "127.0.0.1 localhost ubuntu" >> /etc/hosts
# 添加用户
useradd -s '/bin/bash' -m -G adm,sudo ubuntu
# 设置密码
passwd ubuntu
passwd root

修改开机检测网络时间,避免开机卡住,执行如下命令:

//修改下面这个文件
vim /lib/systemd/system/networking.service
//将里面的TimeoutStartSec=5min修改为
TimeoutStartSec=1sec

设置串口调试时,使用root 权限登录,执行如下命令:

vim /lib/systemd/system/serial-getty\@.service
# 替换ExecStart这行
ExecStart=-/sbin/agetty --autologin root --noclear %I $TERM

设置界面的自动登录(可选)

vim /etc/gdm3/custom.conf
# 修改下面的内容,ubuntu即账户名
[daemon]
AutomaticLoginEnable=true
AutomaticLogin=ubuntu
TimedLoginEnable=true
TimedLogin=ubuntu
TimedLoginDelay=10

4.适配RK3588 LINUX SDK

RGA适配

包文件在 SDK/debian/packages/‘ARCH’/rga2/*.deb
找到包文件并执行:

apt install packages/rga2/*.deb

drm-cursor适配

包文件在 SDK/debian/packages/arm64/libdrm-cursor/*.deb
找到包文件并执行:

apt install packages/libdrm-cursor/*.deb

mpp适配

包文件在 SDK/debian/packages/‘ARCH’/mpp/*.deb
找到包文件并执行:

apt insttall packages/mpp/*

gstreamer适配

直接安装gstreamer ,执行如下命令:

apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio

Wi-Fi/BT 服务适配

包文件在 SDK\debian\packages’ARCH’\rkwifibt*.deb
找到包并执行:

apt install packages/rkwifibt/*.deb

在binary目录下执行如下命令:

sudo cp -rpf SDK/debian/binary/lib/firmware binary/lib/
sudo cp -rpf SDK/debian/binary/lib/modules binary/lib
sudo ln -rsf binary/lib/firmware/ binary/system/etc/firmware
sudo ln -rsf binary/system/ binary/vendor
cd  binary
sudo install -m 0755 SDK/common/tools/armhf/brcm_patchram_plus1 usr/bin
sudo install -m 0755 SDK/common/tools/armhf/dhd_priv usr/bin
sudo install -m 0755 SDK/common/tools/armhf/rtk_hciattach usr/bin
sudo install -m 0655 SDK/external/rkwifibt/conf/* etc/
sudo install -m 0655 SDK/external/rkwifibt/bin/arm/* usr/bin
sudo install -m 0655 SDK/external/rkwifibt/scripts/* usr/bin
sudo ln -sf wifibt-util.sh  usr/bin/bt-tty
sudo ln -sf wifibt-util.sh  usr/bin/wifibt-info
sudo ln -sf wifibt-util.sh  usr/bin/wifibt-vendor
sudo ln -sf wifibt-util.sh  usr/bin/wifibt-chip
sudo ln -sf wifibt-util.sh  usr/bin/wifibt-module
sudo install -D -m 0644 SDK/external/rkwifibt/wifibt-init.service lib/systemd/system
sudo ln -rsf lib/systemd/system/wifibt-init.service etc/systemd/system/sysinit.target.wants/wifibt-init.service
sudo mkdir -p etc/generate_logs.d
cd ..
./mount.sh -m binary/
sudo chroot binary
ln -s /system/etc/firmware /vendor/etc/
echo -e '#!/bin/sh\nwifibt-info > ${1:-/tmp}/wifibt-info.txt' > etc/generate_logs.d/80-wifibt.sh
exit
./mount.sh -u binary/
sudo cp -rpf SDK/external/rkwifibt/scripts/* binary/usr/bin/

adb适配

在binary文件夹目录下执行如下指令:

sudo cp -rpf SDK/debian/binary/etc/profile.d/usbdevice.sh binary/etc/profile.d/usbdevice.sh
sudo install -m 0755 SDK/common/tools/armhf/adbd binary/usr/bin/adbd
sudo cp -rpf SDK/debian/binary/etc/profile.d/adbd.sh binary/etc/profile.d/adbd.sh
sudo install -m 0644 SDK/external/rkscript/61-usbdevice.rules binary/lib/udev/rules.d/
sudo install -m 0755 SDK/external/rkscript/usbdevice binary/usr/bin/
sudo install -D -m 0644 SDK/external/rkscript/usbdevice.service binary/lib/systemd/system/usbdevice.service
sudo ln -rsf binary/lib/systemd/system/usbdevice.service binary/etc/systemd/system/sysinit.target.wants/usbdevice.service
sudo install -m 0644 SDK/external/rkscript/*.rules binary/lib/udev/rules.d/

camera适配暂未实现,有小伙伴完成可以指教一下嘛

5.扩展文件系统分区

创建开机执行的脚本文件,执行如下命令:

vim etc/init.d/firstboot.sh

将以下内容复制进上述文件:

#!/bin/bash -e 
# resize filesystem mmcblk0p6
if [ ! -e "/usr/local/boot_flag" ] ;
then
  echo "Resizing /dev/mmcblk0p6..."
  resize2fs /dev/mmcblk0p6
  touch /usr/local/boot_flag
fi

添加可执行权限,执行如下命令:

chmod +x etc/init.d/firstboot.sh

创建服务,实现开机自动执行脚本,执行如下命令:

vim lib/systemd/system/firstboot.service

将以下内容复制到上述文件中:
(注意Before=lightdm.service 此行的服务需根据自己选择的自行修改,如选择gdm则修改为Before=gdm3.service )

#start
[Unit]
Description=Setup rockchip platform environment
Before=lightdm.service 
After=resize-helper.service
[Service]
Type=simple
ExecStart=/etc/init.d/firstboot.sh
[Install]
WantedBy=multi-user.target
#end

启动该服务,执行如下命令:

systemctl enable firstboot.service

退出根文件系统,执行如下命令:

exit

卸载挂载的根文件系统,执行如下命令:(注意,路径结尾的“/”不能少)

./mount.sh -u binary/

6.打包文件系统为镜像文件

在binary同目录下创建脚本文件mkimage.sh
dd if=/dev/zero of=“$rootfs_file” bs=1M count=6144 中6144为镜像文件大小,一般够用,如提示内存满,则扩大此数值即可。

#!/bin/bash
rootfs_dir=$1
rootfs_file=$2
rootfs_mnt="mnt"
if [ ! $rootfs_dir ] || [ ! $rootfs_file ];
then
  echo "Folder or target is empty."
  exit 0
fi
if [ -f "$rootfs_file" ]; then
  echo "-- Delete exist $rootfs_file ..."
  rm -f "$rootfs_file"
fi
echo "-- Create $rootfs_file ..."
dd if=/dev/zero of="$rootfs_file" bs=1M count=6144
sudo mkfs.ext4 -F -L linuxroot "$rootfs_file"
if [ ! -d "$rootfs_mnt" ]; then
  mkdir $rootfs_mnt
fi
echo "-- Copy data to $rootfs_file ..."
sudo mount $rootfs_file $rootfs_mnt
sudo cp -rfp $rootfs_dir/* $rootfs_mnt
sudo sync
sudo umount $rootfs_mnt
rm -r $rootfs_mnt
echo "-- Resize $rootfs_file ..."
/sbin/e2fsck -p -f "$rootfs_file"
/sbin/resize2fs -M "$rootfs_file"
echo "-- Done."

执行如下命令即可打包:

./mkimage.sh binary rootfs.img

按规则烧录rootfs.img即可

  • 28
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值