1、到ubuntu官网获取 ubuntu-base-18.04.5-base-arm64.tar.gz
2、将获取的文件拷贝到ubuntu虚拟机,新建目录,并解压。
3、将该镜像文件挂载到一个空的文件夹上,然后将ubuntu_rootfs的文件复制到该空文件夹中
4、复制完后用e2fsck修复及检测镜像文件系统,resize2fs 减小镜像文件的大小
前言
国产瑞芯微RK3568开发板的配置参数,让人眼前一亮,性价比很高。
但官方基于buildroot搭建的软生态并不理想,个人也比较喜欢ubuntu官方的操作界面,所以就查阅文献,构建ubuntu文件系统,最终成功在开发板上跑了起来!喜悦!撒花~~~
在这个过程中,踩坑无数,在此做个记录,便于日后继续完善。
实验环境:
开发板:迅为RK3568
文件系统:ubuntu-base-18.04.5-base-arm64
一、使用ubuntu-base构建根文件系统
1、到ubuntu官网获取 ubuntu-base-18.04.5-base-arm64.tar.gz
下载地址:ubuntu-base-18.04.5-base-arm64.tar.gz
2、将获取的文件拷贝到ubuntu虚拟机,新建目录,并解压。
mkdir ubuntu_rootfs
sudo tar -xpf ubuntu-base-18.04.5-base-arm64.tar.gz -C ubuntu_rootfs/
3、安装qemu-user-static
qemu-user-static是一个仿真器,可以选取arm64配置文件仿真开发板运行环境,然后挂载下载的ubuntu-base文件,从而构建ubuntu文件系统。
sudo apt install qemu-user-static
由于下载的ubuntu-base是aarch64架构的,因此需要拷贝qemu-aarch64-static到ubuntu_rootfs/usr/bin/下。
sudo cp /usr/bin/qemu-aarch64-static ubuntu_rootfs/usr/bin
4、设置软件源
需要注意的是,这里要用 ARM 源,不能复制我们本机的源。
sudo vim ./ubuntu_rootfs/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
将原文删除,然后替换内容。
5、配置DNS
为了可以联网更新软件,我们拷贝本机的dns配置文件到根文件系统
sudo cp /etc/resolv.conf ubuntu_rootfs/etc/resolv.conf
然后在/etc/resolv.conf文件中添加dns
sudo vim ./ubuntu_rootfs/etc/resolv.conf
添加内容如下
nameserver 8.8.8.8
nameserver 114.114.114.114
6、挂载ubuntu-base文件系统
编写挂载脚本
#!/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
增加脚本执行权限
sudo chmod +x mount.sh
挂载文件系统
bash mount.sh -m ubuntu_rootfs/
卸载文件系统
bash mount.sh -u ubuntu_rootfs/
注意:
挂载后,就进入到了开发板仿真环境,可以安装软件,更改系统配置;
文件系统构建完成后,输入 exit ,退出仿真环境,然后运行脚本,卸载ubuntu_base文件系统;
最后,打包镜像。
7、安装必要软件
apt-get update
apt-get install net-tools
apt-get install ethtool
apt-get install ifupdown
apt-get install psmisc
apt-get install nfs-common
apt-get install htop
apt-get install vim
apt-get install rsyslog
apt-get install iputils-ping
apt-get install language-pack-en-base
apt-get install sudo
apt-get install network-manager
8、安装桌面环境
apt-get install ubuntu-desktop
9、修改root用户密码
为了方便,我们可以把密码也设置为root。
10、添加新用户
这里需要输入用户的一些信息,也可以直接回车保留默认值即可。
11、新用户使用sudo命令
默认情况下新用户是不能使用 sudo 命令的,我们需要修改/etc/sudoers 文件。
/etc/sudoers 文件默认是只读的,因此需要先修改此文件的写权限,使用如下命令:
chmod u+w /etc/sudoers
然后使用 vim 打开/etc/sudoers,找到“root ALL=(ALL:ALL) ALL”这一行,在这一行下面添加:
vim /etc/sudoers
ssismm ALL=(ALL:ALL) ALL
修改完成以后保存退出,重新恢复/etc/sudoers 的只读属性,使用如下命令:
chmod u-w /etc/sudoers
12、设置主机名称和IP
echo "rk3568" > /etc/hostname
echo "127.0.0.1 localhost" >> /etc/hosts
echo "127.0.0.1 rk3568" >> /etc/hosts
13、配置DHCP
我们配置一下网络 DHCP,这样系统启动以后就会自动设置好网络。
RK3568默认有两个网卡。
网卡eth0:
echo auto eth0 > /etc/network/interfaces.d/eth0
echo iface eth0 inet dhcp >> /etc/network/interfaces.d/eth0
网卡eth1:
echo auto eth1 > /etc/network/interfaces.d/eth1
echo iface eth1 inet dhcp >> /etc/network/interfaces.d/eth1
在实际测试中网口必须接入网线系统才能正常启动,就是在不联网的情况下,每次开机都要等待很久,卡在网络连接上5分钟,这里我们可以修改下面这个文件:
vim /lib/systemd/system/networking.service
将里面的TimeoutStartSec=5min 修改为:
TimeoutStartSec=10sec
14、修改系统重启默认等待时间
重启开发板的时候,如果有进程没有结束,系统就会等待,默认等待时间很长,导致重启速度慢。
我们可以修改默认等待时间:
vim /etc/systemd/system.conf
找到这几行:
#DefaultTimeoutStartSec=90s
#DefaultTimeoutStopSec=90s
#DefaultTRestartSec=100ms
解除注释并将 DefaultTimeoutStopSec=90s 改为:
DefaultTimeoutStopSec=1s
保存退出。
15、设置开机免密登录到图形界面
我们使用以下命令修改 50-ubuntu.conf 文件:
vim /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf
在文件末尾加入以下内容,添加完成如下图所示:
greeter-show-manual-login=true
all-guest=false
修改完成后保存退出,然后输入以下命令修改 gdm-autologin 文件内容,修改完成如下图所示:
vim /etc/pam.d/gdm-autologin
接着输入以下命令修改 gdm-password 文件内容,修改完成如下图所示:
vim /etc/pam.d/gdm-password
然后输入以下命令修改/root/.profile 文件:
vim /root/.profile
将文件最后一行改为以下内容,修改完成如下图所示:
tty -s && mesg n || true
然后输入以下命令修改 custom.conf 文件:
vim /etc/gdm3/custom.conf
到文件末尾添加以下内容,添加完成如下图所示:
[daemon]
AutomaticLoginEnable=true
AutomaticLogin=root
TimedLoginEnable=true
TimedLogin=root
TimedLoginDelay=10
16、禁用系统休眠
查看:
sudo systemctl status sleep.target
禁用:
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
至此,我们构建的文件系统,就可以开启root用户免密登录可视界面了!
二、打包镜像文件
1、创建空镜像文件,大小为6144MB
dd if=/dev/zero of=ubuntu_rootfs.img bs=1M count=6144
2、将该文件格式化成ext4文件系统
mkfs.ext4 ubuntu_rootfs.img
3、将该镜像文件挂载到一个空的文件夹上,然后将ubuntu_rootfs的文件复制到该空文件夹中
mkdir ubuntu_base_rootfs
sudo mount ubuntu_rootfs.img ubuntu_base_rootfs
sudo cp -rfp ubuntu_rootfs/* ubuntu_base_rootfs/
4、复制完后用e2fsck修复及检测镜像文件系统,resize2fs 减小镜像文件的大小
sudo umount ubuntu_base_rootfs/
e2fsck -p -f ubuntu_rootfs.img
resize2fs -M ubuntu_rootfs.img
最终,我们得到了文件系统镜像文件,大小4.9GB
三、将文件系统烧录到开发板
为了简便,先在开发板上烧录官方提供的buildroot镜像,然后再单独烧录文件系统。
至此,大功告成!此处应该有掌声!!!撒花~~~