制作ubuntu根文件系统
一个完整的Linux操作系统除了包括Linux内核之外,还必须依赖uboot,根文件系统等参与才能保证Linux从启动并正常运行
Ubuntu 的移植非常简单,不需要编译任何东西,因为Ubuntu 官方已经将根文件系统 制作好了!我们只需要简单配置一下 Ubuntu 官方提供的 base 根文件系统。
本文讲解如何根据ubuntu base来制作适合rk3506b开发板的根文件系统
下载ubuntu根文件系统
下载链接:Index of /
以正点原子的rk306b开发板为例,点击ubuntu-base -> realease -> 20.04,下载ubuntu-base-20.04.1-base-armhf.tar.gz
将压缩包copy进cd ubuntu2004_rootfs目录下,使用C参数解压到ubuntu20-rootfs目录中
1 | sudo mkdir ubuntu20-rootfs |
解压之后查看就是我们常见的文件系统目录,目前还不能直接使用,还需要对其做一些其他的配置
这里需要注意,上述解压以及后续的许多命令都要使用sudo权限,使用普通用户进行操作可能会导致文件属性丢失。比如上述tar命令中的p参数就是保留文件的原始权限和属性,这是系统根文件系统解压的关键选项
1 | dky@LAPTOP-Q5IILQ3E:~/ubuntu2004_rootfs/ubuntu20-rootfs$ ls |
安装qemu-user-static
可以使用qemu在wsl中挂载运行ubuntu-base这个根文件系统
1 | sudo apt-get install qemu-user-static |
备注说明
qemu-user-static :
- 属于 “用户态仿真”(区别于 QEMU 全系统仿真),无需创建完整的虚拟机,无需额外配置内核,直接在当前主机的用户态环境中仿真其他架构的程序,轻量高效。
- 后缀
static表示该工具是静态编译的,不依赖主机或目标根文件系统中的任何动态链接库(如libc.so),复制到 ARM 根文件系统后可直接运行,无需额外安装依赖,这对嵌入式根文件系统定制至关重要。 - 安装后,主机会在
/usr/bin/目录下生成对应多种架构的仿真器二进制文件,其中qemu-arm-static就是专门用于仿真 ARM 架构 程序的工具。
安装目的:解决 “主机架构(通常是 x86/x86_64)与根文件系统架构(ARM)不兼容” 的问题 —— 如果不安装该工具,直接chroot进入 ARM 根文件系统后,执行任何命令都会报错无法执行二进制文件(因为主机无法识别 ARM 架构的程序指令)。
为什么要复制到根文件系统内部:chroot命令的作用是 “切换根目录”,进入ubuntu20-rootfs/后,系统会将该目录作为新的 “/” 根目录,无法访问主机原有的/usr/bin/目录。因此,必须将qemu-arm-static复制到根文件系统的/usr/bin/目录中,才能在chroot环境中被调用。
复制后的效果:当chroot进入ubuntu20-rootfs后,执行任何 ARM 架构的命令(如apt update、ls)时,系统会自动调用/usr/bin/qemu-arm-static来仿真执行 ARM 指令,从而在 x86 主机上正常运行 ARM 架构的程序,不会出现架构不兼容错误。
设置联网和软件源
1 | sudo cp -b /etc/resolv.conf ubuntu-rootfs/etc/resolv.conf |
b参数是安全复制,如果目标位置已经有resolv.conf文件则先备份一份
resolv.conf内容如下:
1 | # This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf: |
备注说明
resolv.conf是Linux 系统中的DNS(域名系统)配置文件,用于存储系统解析域名时依赖的 DNS 服务器地址(如 8.8.8.8(Google DNS)、114.114.114.114(国内通用 DNS)等)。
核心作用:系统通过该文件中的配置,将域名(如
www.baidu.com)转换为可访问的 IP 地址,若该文件缺失或配置错误,系统将无法正常解析域名,只能通过 IP 地址访问网络(无法使用apt install等需要域名解析的命令)。复制该文件的目的:将当前主机的有效 DNS 配置复制到嵌入式根文件系统中,让后续
chroot进入该根文件系统时,能够直接继承可用的 DNS 配置,实现联网功能,方便进行软件安装、系统更新等定制化操作
编辑ubuntu20-rootfs/etc/apt/sources.list文件设置软件源
sources.list内容我并没有修改
1 |
在主机挂载并配置根文件系统
上面制作的根文件系统挂载到主机上,需要挂载 proc、sys、dev、dev/pts 等文件系统,最后使用 chroot 将主机的根文件系统切换到我们前面制作的根文件系统中。这里我们编写一个脚本,方便我们完成挂载和卸载操作,在 ubuntu-base(ubuntu2004_rootfs) 目录下编写一个挂载脚本mount.sh。
1 |
|
接着给予 mount.sh 脚本可执行权限,命令如下:
1 | sudo chmod 777 mount.sh |
执行 mount.sh 脚本,将制作的根文件系统挂载到主机下
1 | ./mount.sh -m ubuntu20-rootfs/ |
如果退出需要执行exit命令
挂在成功后可以看到正在执行这个根文件系统了,可以执行一些简单得命令做个测试
1 | dky@LAPTOP-Q5IILQ3E:~/ubuntu2004_rootfs$ ./mount.sh -m ubuntu20-rootfs/ |

安装常见工具
1 | apt update |
安装ubuntu桌面环境
这是制作根文件系统中最关键的一个环节,尽管只有一条命令
1 | apt install ubuntu-desktop |
这个安装包非常大,有2个多g。
在安装的时候会有一些时区,语言,键盘等之类的配置,截图如下:


设置开机默认切换到图形化界面
1 | systemctl set-default graphical.target |

设置root用户和密码
1 | passwd root |
退出回到wsl主机
1 | exit |

打包镜像
新建mkimage.sh文件并设置可运行权限
1 | #!/bin/bash |
执行
1 | ./mkimage.sh ubuntu20-rootfs rootfs.img |
等待打包完成后会在当前目录生成 rootfs.img 镜像文件

烧录
接下来以windows下使用RKDevTool工具烧录为例
parameter.txt内容修改为:
1 | FIRMWARE_VER:8.1 |
按住maskroom按键,并按reset按键进入maskroom模式,烧录时存储注意选择emmc

选中并点击执行按钮烧录完成之后便会从SD卡重启
至此大功告成