一、 编译环境
1、物理机配置:
(1)CPU:INTEL I7 6700/4核8线程/2.8GHz
(2)内存:16GB
(3)硬盘:500GB
2、操作系统:Linux ubuntu-22.04.3-desktop-amd64
二、编译步骤
步骤1 下载Ubuntu系统SDK镜像文件
目标文件名:ubuntu-base-20.04.4-base-arm64.tar.gz
下载网址:http://cdimage.ubuntu.com/ubuntu-base/releases/20.04.4/release/
步骤2 解压Ubuntu系统SDK镜像文件
(1)新建文件夹,作为目标系统文件夹
命令:sudo mkdir ubuntu_rootfs
(2)解压SDK镜像文件
命令:sudo tar -zxvf ubuntu-base-20.04.5-base-arm64.tar.gz -C ubuntu_rootfs
步骤3 配置仿真开发环境qemu
(1)在当前编译环境中安装仿真开发环境
命令:sudo apt install qemu-user-static
(2)将当前编译环境中的仿真开发环境复制到目标系统文件夹
命令:sudo cp /usr/bin/qemu-aarch64-static ubuntu_rootfs/usr/bin/
步骤4 配置网络
将当前编译环境中的网络配置文件复制到目标系统文件夹
命令:sudo cp /etc/resolv.conf ubuntu_rootfs/etc/
步骤5 更换目标系统中的软件源
(1)修改目标系统中的软件源配置文件
命令:sudo vim ubuntu_rootfs/etc/apt/sources.list
(2)添加阿里云软件源
命令:
deb http://mirrors.aliyun.com/ubuntu-ports/ focal main restricted
deb http://mirrors.aliyun.com/ubuntu-ports/ focal-updates main restricted
deb http://mirrors.aliyun.com/ubuntu-ports/ focal universe
deb http://mirrors.aliyun.com/ubuntu-ports/ focal-updates universe
deb http://mirrors.aliyun.com/ubuntu-ports/ focal multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ focal-updates multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ focal-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ focal-security main restricted
deb http://mirrors.aliyun.com/ubuntu-ports/ focal-security universe
deb http://mirrors.aliyun.com/ubuntu-ports/ focal-security multiverse
步骤6 挂载根文件系统
(1)编写挂载脚本
命令:sudo vim mount.sh
挂载脚本文件内容:
#!/bin/bash
function 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 -t devpts -o gid=5,mode=620 devpts ${2}dev/pts
sudo mount -o bind /dev/pts ${2}dev/pts
sudo chroot ${2}
}
function 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 tralling '/')"
echo ""
echo "For example: ch-mount -m /media/sdcard"
echo ""
echo 1st parameter : ${1}
echo 2nd parameter : $[2]
fi
(2)添加脚本执行权限
命令:sudo chmod +x mount.sh
(3)挂载根文件系统
命令:./mount.sh -m ubuntu_rootfs/
【备注】当完成根文件系统挂载后,后续命令将在根文件系统中执行,直至根文件系统被卸载(步骤16)
步骤7 在根文件系统中安装必要的软件
(1)更新安装软件包列表
命令:apt update
(2)更新和升级软件包
命令:apt upgrade
(3)在目标系统中安装必要的软件
命令:apt install sudo vim udev net-tools ethtool udhcpc netplan.io language-pack-en-base language-pack-zh-han* iputils-ping openssh-sftp-server ntp usbutils alsa-utils libmtp9
【备注】安装过程中会提示配置地区和时区
(1)亚洲地区选择“6,Asia”
(2)中国时区选择:70,Shanghai
(3)该步骤下,你可以根据自己的需求,安装所需要的应用软件
步骤8 桌面环境安装
安装轻量级的桌面环境 lubuntu-desktop
命令:apt install lubuntu-desktop
【备注】如果安装过程中提示缺少依赖的组件,可以使用apt命令安装该组件后,再次执行上述命令
步骤9 卸载部分不必要的软件
(1)卸载更新通知组件并清除相关配置文件
命令:apt-get remove --purge lubuntu-update-notifier
(2)卸载办公套件并清除相关配置文件
命令:apt-get remove --purge libreoffice*
步骤10 添加用户并配置权限
(1)在目标系统中添加用户
命令:adduser ubuntu
【备注】ubuntu为用户名,可以按照需要修改为任意其他名称
(2)为用户添加管理员权限
命令:adduser ubuntu sudo
(3)修改用户密码
命令:passwd ubuntu
【备注】执行命令后,需要输入2遍口令
(4)修改root用户密码
命令:passwd root
步骤11 允许root用户登录桌面
(1)修改配置文件,允许root用户登录桌面
命令:vim /etc/gdm3/custom.conf
增加的配置文件内容:
AutomaticLoginEnable = true
AutomaticLogin = ubuntu
AllowRoot=true
修改后的效果:
(2)修改配置文件,取消默认情况下不让ROOT用户登录的限制
命令:vim /etc/pam.d/gdm-password
注释掉的配置文件内容:
#auth required pam_succeed_if.so user != root quiet_success
修改后的效果:
(3)修改桌面自动登录脚本文件,将autologin-user项修改成自己的用户名
命令:vim /etc/lightdm/lightdm.conf.d/20-autologin.conf
修改后的效果:
【备注】此处的用户名需要与步骤10中添加的用户名保持一致
步骤12 串口自动登录
命令:vim /lib/systemd/system/serial-getty\@.service
修改的配置文件内容:
(1)注释:ExecStart=-/sbin/agetty -o ‘-p – \u’ --keep-baud 115200,38400,9600 %I $TERM
(2)修改:ExecStart=-/sbin/agetty --autologin root --noclear %I $TERM
修改后的效果:
步骤13 关闭自动休眠
命令:sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
步骤14 修改开机等待网络延迟时间
默认情况下,系统启动过程中会出现“A start job is running for wait for network to be Configured”的提示信息,然后开始倒计时5分钟,需要等待倒计时结束后才能继续启动系统,通过修改配置文件,将倒计时时间缩短到5秒或关闭倒计时。
命令:vim /etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service
修改的配置文件内容:
ExecStart=/usr/bin/nm-online -s -q --timeout=0
步骤15 添加分区释放的系统服务(重要)
默认情况下,rootfs分区烧录后,只有固件本身大小。通过添加系统服务,实现分区释放。
(1)修改配置文件
命令:vim etc/init.d/resize2fs.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
(2)添加配置文件执行权限
命令:chmod +x etc/init.d/resize2fs.sh
(3)创建执行上述脚本的系统服务
命令:vim lib/systemd/system/resize2fs.service
系统服务的内容:
#start
[Unit]
Description=Setup rockchip platform environment
Before=lightdm.service
After=resize-helper.service
[Service]
Type=simple
ExecStart=/etc/init.d/resize2fs.sh
[Install]
WantedBy=multi-user.target
#end
步骤16 退出并卸载根文件系统
(1)退出根文件系统
命令:exit
(2)卸载根文件系统
命令:sudo ./mount.sh -u ubuntu_rootfs/
步骤17 制作文件系统rootfs分区固件
(1)创建空镜像文件
命令:sudo dd if=/dev/zero of=ubuntu_rootfs.img bs=1M count=8192
【备注】镜像文件的大小,需要大于上述根文件系统所在文件夹ubuntu_rootfs的整体大小,可以通过du命令查看ubuntu_rootfs
文件夹的大小,然后通过设置count项的值,配置合适的镜像文件大小。
(2)将创建的镜像文件格式化为.ext4文件系统
命令:sudo mkfs.ext4 ubuntu_rootfs.img
(3)新建一个文件夹,用于挂载
命令:sudo mkdir ubuntu_base_rootfs
【备注】上述文件夹名称ubuntu_base_rootfs可以按照需要修改为任意名称
(4)为上述文件夹添加权限
命令:sudo chmod 777 ubuntu_base_rootfs
(5)将创建的空白镜像文件挂载到上述文件夹
命令:sudo mount ubuntu_rootfs.img ubuntu_base_rootfs
(6)将之前根文件系统所在文件夹内容全部复制到新建的空文件夹
命令:sudo cp -rfp ubuntu_rootfs/* ubuntu_base_rootfs/
(7)卸载镜像文件
命令:sudo umount ubuntu_base_rootfs/
(8)修复及检测镜像文件系统
命令:sudo e2fsck -p -f ubuntu_rootfs.img
(9)压缩镜像文件的大小
命令:sudo resize2fs -M ubuntu_rootfs.img
【备注】上述的2.8小节中的释放rootfs分区大小与这里减少文件大小相关。
(10)查看镜像文件的大小
命令:sudo du -sh ubuntu_rootfs.img
步骤18 后续…
可以直接将上述ubuntu_rootfs.img镜像文件,通过瑞芯微开发工具的“下载镜像”功能,单独烧录进泰山派开发板。
或者,也可以将上述镜像文件复制到之前编译好的buildroot系统的rockdev文件夹下,然后通过执行build.sh updateimg脚本,打包成统一的update.img镜像文件,通过瑞芯微开发工具的“升级固件”功能,烧录进泰山派开发板。
三、编译成果
【备注】
根据嘉立创吴工指导、网上大佬教程及本人实践总结编写,难免存在错误,请大家(佬)批评指正。
\n#学习资料#
登录 或 注册 后才可以进行评论哦!
还没有评论,抢个沙发!