目录

前言

一、根文件系统是什么?

二、构建根文件系统的方法

1.debootstrap

2.builroot

3.busybox

4.ubuntu-base

三、进入主题——如何使用ubuntu-base构建根文件系统

1.在X86电脑上下载ubuntu-base

2.安装qemu-user-static

3.挂载ubuntu-base

4.打包成镜像

5.将根文件系统烧录进开发板

未完结……



前言

最近流行国产化,原来使用树莓派做的项目改为使用RK系列开发板,但是购买回来的RK系列开发板系统不好用,因此想自己动手构建一个根文件系统。


一、根文件系统是什么?

根文件系统首先是内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。根文件系统_百度百科 (baidu.com)https://baike.baidu.com/item/%E6%A0%B9%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F

引用百度百科。

二、构建根文件系统的方法

1.debootstrap

参考:

zh_CN/Debootstrap - Debian Wikihttps://wiki.debian.org/zh_CN/Debootstrap debian下为arm开发板创建基于debian或emdebian的根文件系统 - qiaoqiao2003 - 博客园 (cnblogs.com)https://www.cnblogs.com/qiaoqiao2003/p/3738552.html

这个方法尝试过,但是烧录进开发板之后提示启动不了 大概是:Failed to execute /bin/sh 具体报错忘记了,然后看了下该文件的类型居然是x86类型的,怪不得运行不了!估计是忘记了debootstrap --second-stage这个步骤,后面有空再来填坑,欢迎指正。

2.builroot

可以用RK官方的buildroot仓库构建镜像,方法简单,但出现奇怪的报错。

参考:

https://github.com/rockchip-linux/rk-rootfs-buildhttps://github.com/rockchip-linux/rk-rootfs-buildrockchip-linux/buildroot (github.com)https://github.com/rockchip-linux/buildroot在使用该方法时出现:configure: error: *** The available kernel headers are older than the requested。无解,遂放弃。

3.busybox

BusyBox 将许多具有共性的小版本的UNIX工具结合到一个单一的可执行文件。这样的集合可以替代大部分常用工具比如的GNU fileutils , shellutils等工具,BusyBox提供了一个比较完善的环境,可以适用于任何小的嵌入式系统。

可参考:[Linux]用Busybox做一个ROOTFS(根文件系统)_wangyijieonline的博客-CSDN博客https://blog.csdn.net/wangyijieonline/article/details/103181899

4.ubuntu-base

ubuntu-base是什么:Base - Ubuntu Wikihttps://wiki.ubuntu.com/Base

简单来说ubuntu-base就是一个超级精简版系统,然后你可以在里面用apt来安装你想要的东西。

三、进入主题——如何使用ubuntu-base构建根文件系统

1.在X86电脑上下载ubuntu-base

比如我想用20.04的ubuntu-base构建就去Ubuntu Base 20.04.3 LTS (Focal Fossa)这里下载,下载在的是64位的arm架构系统自然就是

ubuntu-base-20.04.1-base-arm64.tar.gz

下载完成后解压到某一目录下,这里是ubuntu_rootfs

mkdir ubuntu_rootfs
sudo tar -xpf ubuntu-base-20.04.1-base-arm64.tar.gz -C ubuntu_rootfs/

-x:解压文件
-p:使用原来文件相同的权限来解压文件
-f:指定解压文件
-C:解压到

2.安装qemu-user-static

qemu-user-static是一个用于利用当前操作系统来运行其它架构的一个仿真器,使用它可以在X86架构上进入上面下载的arm64 ubuntu-base系统。

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

拷贝本机的dns配置文件到根文件系统

sudo cp /etc/resolv.conf ubuntu_rootfs/etc/resolv.conf

3.挂载ubuntu-base

编写挂载脚本

#!/bin/bash
mnt() {echo "MOUNTING"sudo mount -t proc /proc ${2}procsudo mount -t sysfs /sys ${2}syssudo mount -o bind /dev ${2}devsudo mount -o bind /dev/pts ${2}dev/ptssudo chroot ${2}
}
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 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退出,再用脚本卸载

4.打包成镜像

先创建一个空镜像文件,大小为4096MB

dd if=/dev/zero of=ubuntu_rootfs.img bs=1M count=4096

将该文件格式化成ext4文件系统

mkfs.ext4 ubuntu_rootfs.img

将该镜像文件挂载到一个空的文件夹上,然后将ubuntu_rootfs的文件复制到该空文件夹中

mkdir ubuntu_base_rootfs
sudo mount ubuntu_rootfs.img ubuntu_base_rootfs
sudo cp -rfp ubuntu_rootfs/* ubuntu_base_rootfs/

复制完后用e2fsck修复及检测镜像文件系统,resize2fs 减小镜像文件的大小

$ sudo umount ubuntu_base_rootfs/
$ e2fsck -p -f ubuntu_rootfs.img
$ resize2fs -M ubuntu_rootfs.img

5.将根文件系统烧录进开发板

四.进入系统后问题问题杂锦

1.无法获取到ip

进入到开发板后发现无法获取到ip,用ipconfig -a查看可以看到有eth0网卡,原来需要修改/etc/network/interfaces文件

sudo vim /etc/network/interfaces
rk3568@localhost:~$ cat /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
# Include files from /etc/network/interfaces.d:
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp
source-directory /etc/network/interfaces.d

修改完后重启就OK。

2.禁用系统自动休眠

过一段时间就进不去系统,原来是休眠了。

解决办法参考:(29条消息) ubuntu 20.04 | 关闭自动休眠_m0_52650517的博客-CSDN博客https://blog.csdn.net/m0_52650517/article/details/119811966

查看:

sudo systemctl status sleep.target

禁用:

sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

未完结……

参考文献:

(29条消息) 基于ubuntu-base进行根文件系统的修改与打包_里先森-CSDN博客https://blog.csdn.net/sements/article/details/105240490【原创】从Ubuntu-base构建ubuntu rootfs系统(以x86_64和arm为例) - 沐多 - 博客园 (cnblogs.com)https://www.cnblogs.com/wsg1100/p/13127636.html(29条消息) 从Ubuntu-base构建ubuntu rootfs(以x86_64和arm为例)_wsg1100-CSDN博客https://blog.csdn.net/qq_22654551/article/details/106753765

基于ubuntu-base构建根文件系统并移植到RK3568开发板相关推荐

  1. 移植Ubuntu Base 20.04 LTS (Focal Fossa)到4412开发板

    前言 此文填上篇文章[移植Linux-5.4+内核到4412开发板移植]的坑,在前面的文章移植完uboot,内核后,接下来就是文件系统的移植了.博主的其他几篇博文里面也有自己构建根文件系统的教程,那样 ...

  2. 记一次构建基于arm的linux根文件系统的曲折历程

    1. 前言 要研究操作系统,移植linux到嵌入式设备上运行是很好的实践方式,可以大大的加深对操作知识的理解,计算机是一门理论与实践紧密结合的学科,光有理论是不行的,还得多实践.但是,这要求比较多的相 ...

  3. 野火i.MX6ULL Pro开发板构建根文件系统

    眼瞅着2020年马上就要到头了,承诺给大家的Linux移植三部曲还差最后一篇,这个拖延癌晚期恐怕今年是治不好了,不到最后的DL绝不妥协-- (这句话是年前写的,写了个开头就疫情了,封城,电脑丢在了公司 ...

  4. 嵌入式中利用ubuntu-base构建根文件系统

    在嵌入式环境中,我们最常用busybox.yocto或buildroot来构建根文件系统,这种情况下,当我们需要使用一些组件的时候,往往需要我们使用源码编译,移植到开发板中.那有没有像ubuntu的文 ...

  5. 构建根文件系统(一)

    接着前边内核移植的文章,记录根文件系统的构建. 这里要用到强大的busybox,我选择的版本是busybox-1.18.5.tar.bz2 ,1.17的也可以:之所以选择这个版本是因为基于现在的交叉编 ...

  6. 【ARM】使用Ubuntu-base构建根文件系统

    使用Buildroot构建根文件系统 介绍 资源下载 配置根文件系统 设置软件源 安装必要软件 添加新用户 设置主机名称和本机IP 设置终端串口 网络DHCP FTP服务器搭建 串口无法登录 开机启动 ...

  7. 教你用 buildroot 构建根文件系统

    如果想要构建完整的根文件系统,大家一般都是使用buildroot,它不仅包含了 busybox 的功能,而且里面还集成了各种软件,需要什么软件就选择什么软件,不需要我们去移植. 嵌入式系统三大部分:b ...

  8. Buildroot 构建根文件系统(Jz2440)

    1. Buildroot 简介      Buildroot是Linux平台上一个构建嵌入式Linux系统的框架.整个Buildroot是由Makefile脚本和Kconfig配置文件构成的.你可以和 ...

  9. 从零开始构建根文件系统

    以下内容源于网络资源的学习与整理,如有侵权请告知删除. 参考博客 Uboot和系统移植(19)------- 根文件系统构建过程详解_big__C的博客-CSDN博客 一.总结 (1)本节在前面的理论 ...

最新文章

  1. linux启用日志记录功能,Linux下启用Open vSwitch的日志功能以便调试和排障
  2. 解决ngnix服务器上的Discuz!x2.5 Upload Error:413错误
  3. 通过setTimeout处理click,dblclick,mousedown等事件的冲突
  4. 第十五届全国大学生智能车竞赛线上竞赛方案(草案)
  5. tensorflow gpu利用率为0_训练效率低?GPU利用率上不去?快来看看别人家的tricks吧...
  6. c#代码片段新建(sinppet)
  7. CLION CMAKE 缺-g 导致断点不执行(无效)
  8. 大学生使用计算机的情况英语作文,关于网络的大学生英语作文(精选10篇)
  9. 绿盾加密导致Visual Stdio无法使用
  10. 夜间红外图像行人检测学习笔记
  11. 计算机基础到底是哪些基础?为什么很重要!
  12. vue中的prop验证
  13. 算法逻辑题_二.计算法
  14. 在搜狗浏览器中启用WebGL
  15. 解决ERROR: distribution port 25672 in use by another node: rabbit@
  16. 同为aPaaS平台,华为云开天aPaaS与AppCube有何不同?
  17. PBR--RTR4笔记--第八章 光与颜色
  18. 项目需求分析和项目可行性
  19. spring boot +brave-5.8.0+zipkin 实现分布式链路监控
  20. C++指针与const的结合用法

热门文章

  1. 第148篇 笔记-DeFi
  2. 区块链-DEFI产品
  3. 大型企业是怎么牢牢的留住高级人才的?
  4. Win11修改注册表改C盘名,结果进不去,一直都是准备windows
  5. 【Redis】6.Feed流
  6. python怎么生成不重复的字符_如何在不重复的情况下生成一组字符的所有组合?...
  7. Uber 如何使用 Apache Hudi 支撑 PB 级数据湖
  8. 7891:一元三次方程求解
  9. 【计算机毕业设计】289房地产销售管理系统
  10. 验证码:请证明你是人类