RK356X/RK3588构建Ubuntu20.04根文件系统
文章目录
- 前言
- 一、官网下载ubuntu-base
- 二、挂载并构建文件系统
- 2.1、配置构建文件系统环境
- 2.2、编写挂载脚本mount.sh并安装相关工具
- 2.3、轻量级的桌面环境 lubuntu-desktop
- 2.4、卸载一些不必要的软件
- 2.5、添加用户
- 2.6 、允许root用户登录桌面
- 2.7、串口自动登录
- 2.8、添加分区释放的系统服务(重要)
- 三、制作文件系统rootfs分区固件
- 3.1、创建一个空镜像文件
- 3.2、将镜像文件挂载到空文件
- 3.3、修复及检测镜像文件系统
前言
很多厂商没有吧文件系统的构建方法开源出来,只是提供了一个rootfs.img的固件包,这不利于我们做二次开发,本文章实现一个自己构建的文件系统,并移植到RK的平台上使用
一、官网下载ubuntu-base
http://cdimage.ubuntu.com/ubuntu-base/releases/
本文章使用的是:buntu-base-20.04.5-base-arm64.tar.gz
解压:
mkdir ubuntu_rootfs
tar -zxvf ubuntu-base-20.04.5-base-arm64.tar.gz -C ubuntu_rootfs
二、挂载并构建文件系统
2.1、配置构建文件系统环境
配置网络配置
cp /etc/resolv.conf ubuntu_rootfs/etc/
配置仿真开发环境
sudo apt install qemu-user-static
sudo cp /usr/bin/qemu-aarch64-static ubuntu_rootfs/usr/bin/
更换软件源
sudo vim ubuntu_rootfs/etc/apt/sources.list
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
2.2、编写挂载脚本mount.sh并安装相关工具
挂载根文件系统运行需要的设备和目录
#!/bin/bash
function mnt() {echo "MOUNTING"sudo mount -t proc /proc ${2}procsudo mount -t sysfs /sys ${2}syssudo mount -o bind /dev ${2}dev#sudo mount -t devpts -o gid=5,mode=620 devpts ${2}dev/ptssudo mount -o bind /dev/pts ${2}dev/ptssudo chroot ${2}
}
function umnt() {echo "UNMOUNTING"sudo umount ${2}procsudo umount ${2}syssudo umount ${2}dev/ptssudo umount ${2}dev
}
if [ "$1" == "-m" ] && [ -n "$2" ];
thenmnt $1 $2
elif [ "$1" == "-u" ] && [ -n "$2" ];
thenumnt $1 $2
elseecho ""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
添加执行权限并挂载文件系统
sudo chmod +x mount.sh
./mount.sh -m ubuntu_rootfs/
挂载之后,开始安装文件系统中必要的一些软件
apt update
apt upgrade
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
安装的过程中会让你选择地区和时区

亚洲地区选择:6,Asia
中国时区选择:70,Shanghai
等待编译完成即可

2.3、轻量级的桌面环境 lubuntu-desktop
嵌入式平台选择轻量级的桌面环境lubuntu-desktop安装
apt install lubuntu-desktop
2.4、卸载一些不必要的软件
apt-get remove --purge lubuntu-update-notifier
apt-get remove --purge libreoffice*
2.5、添加用户
舔加用户
adduser ubuntu
增加管理员权限
adduser ubuntu sudo
2.6 、允许root用户登录桌面
gdm3设置允许root用户登录桌面,添加AllowRoot=true
vim /etc/gdm3/custom.conf
...
# Uncomment the line below to turn on debugging
# More verbose logs
# Additionally lets the X server dump core if it crashes
#Enable=true
AllowRoot=true
vim /etc/pam.d/gdm-password
注释:#auth required pam_succeed_if.so user != root quiet_success
#%PAM-1.0
auth requisite pam_nologin.so
#auth required pam_succeed_if.so user != root quiet_success
@include common-auth
auth optional
2.7、串口自动登录
vim /lib/systemd/system/serial-getty\@.service
注释:ExecStart=-/sbin/agetty -o ‘-p – \u’ --keep-baud 115200,38400,9600 %I $TERM
修改:ExecStart=-/sbin/agetty --autologin root --noclear %I $TERM
[Service]
# The '-o' option value tells agetty to replace 'login' arguments with an
# option to preserve environment (-p), followed by '--' for safety, and then
# the entered username.
#ExecStart=-/sbin/agetty -o '-p -- \\u' --keep-baud 115200,38400,9600 %I $TERM
ExecStart=-/sbin/agetty --autologin root --noclear %I $TERM
Type=idle
Restart=always
UtmpIdentifier=%I
TTYPath=/dev/%I
TTYReset=yes
TTYVHangup=yes
KillMode=process
IgnoreSIGPIPE=no
SendSIGHUP=yes
最后关闭自动休眠
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
2.8、添加分区释放的系统服务(重要)
通过实验,rootfs分区烧录后,只有固件本身大小,需要做分区释放
vim etc/init.d/resize2fs.sh
#!/bin/bash -e
# resize filesystem mmcblk0p6
if [ ! -e "/usr/local/boot_flag" ] ;
thenecho "Resizing /dev/mmcblk0p6..."resize2fs /dev/mmcblk0p6touch /usr/local/boot_flag
fi
添加执行权限
chmod +x etc/init.d/resize2fs.sh
创建服务去运行脚本
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
#退出根文件系统
exit
#卸载挂载的根文件系统
./mount.sh -u ubuntu_rootfs/
三、制作文件系统rootfs分区固件
3.1、创建一个空镜像文件
dd if=/dev/zero of=ubuntu_rootfs.img bs=1M count=8192
将该文件格式化为ext4文件系统
mkfs.ext4 ubuntu_rootfs.img
3.2、将镜像文件挂载到空文件
mkdir ubuntu_base_rootfs
chmod 777 ubuntu_base_rootfs
mount ubuntu_rootfs.img ubuntu_base_rootfs
cp -rfp ubuntu_rootfs/* ubuntu_base_rootfs/
umount ubuntu_base_rootfs/
3.3、修复及检测镜像文件系统
修复及检测镜像文件系统
e2fsck -p -f ubuntu_rootfs.img
resize2fs减小镜像文件的大小,上述的2.8小节中的释放rootfs分区大小与这里减少文件大小相关。
resize2fs -M ubuntu_rootfs.img
查看大小
du -sh ubuntu_rootfs.img
rootfs# du -sh ubuntu_rootfs.img
5.0G ubuntu_rootfs.img
相关文章:
RK356X/RK3588构建Ubuntu20.04根文件系统
文章目录 前言一、官网下载ubuntu-base二、挂载并构建文件系统2.1、配置构建文件系统环境2.2、编写挂载脚本mount.sh并安装相关工具2.3、轻量级的桌面环境 lubuntu-desktop2.4、卸载一些不必要的软件2.5、添加用户2.6 、允许root用户登录桌面2.7、串口自动登录2.8、添加分区释放…...
本地新建项目如何推到码云上去
1.先在码云上建立一个空仓库,正常步骤就行。建立完成有readme.md. 2.然后本地建立项目文件,正常脚手架搭建VUE\REACT等。记得要项目git init一下。 3.本地改好的内容commit 一下。 4.本地文件与远端仓库建立连接。git remote add origin https://gite…...
RSAUtil 前端 JavaScript JSEncrypt 实现 RSA (长文本)加密解密
文章归档:https://www.yuque.com/u27599042/coding_star/cl4dl599pdmtllw1 依赖 import JSEncrypt from ‘jsencrypt’ pnpm i jsencryptimport {stringIsNull} from “/utils/string_utils.js”:https://www.yuque.com/u27599042/coding_star/slncupw…...
uniapp map polygons 区域填充色(fillColor)在ios显示正常,但在安卓手机显示是黑色的,怎么解决?
uniapp map polygons 区域填充色(fillColor)在ios显示正常,但在安卓手机显示是黑色的,怎么解决? <MapPage :longitude"item.centerCoord[0]" :latitude"item.centerCoord[1]":polygons"[{ points: it…...
OSCAR数据库上锁问题如何排查
关键字 oscar lock 问题描述 oscar 数据库上锁问题如何排查 解决问题思路 准备数据 create table lock_test(name varchar(10),age varchar(10));insert into lock_test values(ff,10); insert into lock_test values(yy,20); insert into lock_test values(ll,30);sessio…...
FPGA与人工智能泛谈-01
文章目录 前言一、FPGA(Field Programmable Gate Array)是什么?二、与GPU的对比1.GPU特点2. FPGA的优势三、人工智能实现的基础架构总结前言 人工智能技术的快速发展正从各个方面改变人类的生活、工作及教育等各个方面,其中人工智能算法的演进又是其中的关键一步,其中会涉及…...
【VASP】POTCAR文件
【VASP】POTCAR文件 POTCAR 文件的介绍qvasp 生成POTCARvaspkit 生成POTCAR再来认识一下各种赝势如何区分US、PAW、LDA、GGA、PW91 前言 一、4个常用的输入文件INCAR、POSCAR、POTCAR、KPOINTS INCAR: 计算任务类型是什么?怎么计算? KPOINTS: 包含了倒易…...
棒球俱乐部青少年成长体系·棒球1号位
棒球俱乐部青少年成长体系介绍 1. 培养理念 简要介绍棒球俱乐部的宗旨和培养青少年的目标 棒球俱乐部是一个致力于培养青少年棒球运动员的体育组织,其宗旨是通过提供专业的棒球训练和比赛机会,帮助青少年提高身体素质、培养团队合作精神和塑造积极向上…...
折叠式菜单怎么做编程,初学编程系统化教程初级1上线
中文编程系统化教程,不需英语基础,学习链接——入门篇课程 https://edu.csdn.net/course/detail/39036中文编程系统化教程,不需英语基础,学习链接—— 初级1课程 https://edu.csdn.net/course/detail/39061 ——————————…...
与AI对话,如何写好prompt?
玩转AIGC,优质的Prompt提示词实在是太重要了!同样的问题,换一个问法,就会得到差别迥异的答案。你是怎样和AI进行对话交流的呢?我来分享几个: 请告诉我…我想知道…对于…你有什么看法?帮我解决…...
基于YOLOv8模型和UA-DETRAC数据集的车辆目标检测系统(PyTorch+Pyside6+YOLOv8模型)
摘要:基于YOLOv8模型和UA-DETRAC数据集的车辆目标检测系统可用于日常生活中检测与定位汽车(car)、公共汽车(bus)、面包车(vans)等目标,利用深度学习算法可实现图片、视频、摄像头等方…...
0037【Edabit ★☆☆☆☆☆】【修改Bug 2】Buggy Code (Part 2)
0037【Edabit ★☆☆☆☆☆】【修改Bug 2】Buggy Code (Part 2) bugs language_fundamentals Instructions Fix the code in the code tab to pass this challenge (only syntax errors). Look at the examples below to get an idea of what the function should do. Exampl…...
【算法中的Java】— 判断语句
📒博客首页:Sonesang的博客 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 ❤️ :热爱Java与算法学习,期待一起交流! 🙏作者水平很有限,如果发现错误…...
【单例模式】饿汉式,懒汉式?JAVA如何实现单例?线程安全吗?
个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 单例设计模式 Java单例设计模式 Java单例设计模…...
Spark_SQL-DataFrame数据写出以及读写数据库(以MySQl为例)
一、数据写出 (1)SparkSQL统一API写出DataFrame数据 二、写出MySQL数据库 一、数据写出 (1)SparkSQL统一API写出DataFrame数据 统一API写法: 常见源写出: # cording:utf8from pyspark.sql import SparkSes…...
Linux进程终止
文章目录 进程退出场景进程退出码strerrorerrno浅谈进程异常exit && _exit 进程退出场景 代码运行完毕,结果正确代码运行完毕,结果不正确代码异常 进程退出码 我们写的C/C的代码,main函数每次都需要返回0,而这个return…...
0036【Edabit ★☆☆☆☆☆】【让我加油】Let‘s Fuel Up!
0036【Edabit ★☆☆☆☆☆】【让我加油 】Let’s Fuel Up! control_flow language_fundamentals numbers Instructions A vehicle needs 10 times the amount of fuel than the distance it travels. However, it must always carry a minimum of 100 fuel before setting o…...
React 中常用的几种路由跳转方式
目录 一、push跳转 1、Link组件: 二、replace跳转 三、goBack跳转(回退) 四、goForward跳转(前进) 五、 go跳转(向前或向后跳转指定步数) 一、push跳转 1、Link组件: 可以在不刷新…...
C++内存管理:其七、标准库中的allocator
首先明确一点,绝大多数情况下,是标准库中的容器使用allocator。因为容器需要频繁的申请和释放内存。 一、容器使用allocator 典型的例子: vector<int , allocator<int>> a;但是为什么我们通常的定义vector变量的方法是&#x…...
【机器学习合集】人脸表情分类任务Pytorch实现TensorBoardX的使用 ->(个人学习记录笔记)
人脸表情分类任务 注意:整个项目来自阿里云天池,下面是开发人员的联系方式,本人仅作为学习记录!!!该文章原因,学习该项目,完善注释内容,针对新版本的Pytorch进行部分代码…...
YOLO X Layout实战案例:政务公文自动识别Title/Section-header/Page-footer三级结构
YOLO X Layout实战案例:政务公文自动识别Title/Section-header/Page-footer三级结构 1. 项目背景与价值 政务公文处理是政府日常工作中的重要环节,每天都有大量的公文需要整理、归档和数字化。传统的人工处理方式效率低下,容易出错…...
2025届毕业生推荐的降重复率神器解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 如果要降低AIGC检测率,那就得着重从文本特征方面着手。首先,词汇多样…...
Kali 2025.4上部署HexStrike AI踩坑实录:从MCP连接失败到完美运行的完整排错指南
Kali 2025.4上部署HexStrike AI踩坑实录:从MCP连接失败到完美运行的完整排错指南 HexStrike AI作为新一代AI驱动的渗透测试框架,理论上只需几条命令就能完成部署。但现实往往比文档复杂得多——特别是当你在深夜赶项目,却发现MCP客户端死活连…...
AI Agent的隐私保护设计:合规前提下的用户数据使用策略
AI Agent的隐私保护设计:合规前提下的用户数据使用策略引言 各位技术同行、AI应用开发者、产品经理以及对用户数据与智能交互边界敏感的读者朋友们,大家好!我是深耕AI工程化落地与数据治理领域8年的技术博主「码海拾遗」。在过去的3年里&…...
PPOCRLabel快捷键全解析:告别鼠标点点点,提升标注效率的隐藏技巧
PPOCRLabel快捷键全解析:告别鼠标点点点,提升标注效率的隐藏技巧 当你面对上千张待标注的图片时,每次点击菜单、切换工具、调整选框的微小延迟,都会累积成惊人的时间损耗。专业标注员的秘密武器从来不是鼠标,而是那些藏…...
【花雕学编程】嵌入式 AI Agent:从云端到终端,开启物理世界智能新范式
【花雕学编程】嵌入式 AI Agent:从云端到终端,开启物理世界智能新范式 ——当 AI 不再只是屏幕里的聊天窗口,而是真正走进工厂、家庭和城市——嵌入式 AI Agent 正在重新定义“智能”的边界 引言 当下 AI 热潮的本质,是对“AI 从云…...
解锁B站4K视频下载:bilibili-downloader开源工具完全指南
解锁B站4K视频下载:bilibili-downloader开源工具完全指南 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 在数字内容爆炸的…...
终极指南:如何构建高性能Ghost渐进式Web应用(PWA)实现离线发布与快速访问
终极指南:如何构建高性能Ghost渐进式Web应用(PWA)实现离线发布与快速访问 【免费下载链接】Ghost Independent technology for modern publishing, memberships, subscriptions and newsletters. 项目地址: https://gitcode.com/gh_mirrors…...
Nginx性能优化-压缩
但很多开发者在配置nginx时容易混淆两个概念:Gzip动态压缩和Gzip静态压缩。本文将带你彻底搞懂这两者的区别、配置方法以及最佳实践。什么是Gzip动态压缩?原理: 当客户端(浏览器)发起请求时,Nginx接收到请求…...
用Python+OpenCV重构九点标定:抛弃Halcon的轻量化视觉方案
PythonOpenCV九点标定实战:从原理到嵌入式部署的全栈指南 引言:为什么选择开源方案替代Halcon? 在工业视觉领域,九点标定作为连接像素坐标与物理坐标的桥梁,直接影响着定位精度和系统稳定性。传统方案多依赖Halcon等商…...
