专栏中心

EEPW首页 > 专栏 > UBI只读文件系统

UBI只读文件系统

发布人:toradex 时间:2022-07-06 来源:工程师 发布文章

By Toradex胡珊逢

在先前的文章我们已经介绍在使用 eMMC 的模块上配置只读属性的文件系统,以及利用 squashfsoverlayfs 挂载可写分区。Toradex 的产品除了使用 eMMC 存储外,还有部分是采用 Nand Flash,例如 Colibri iMX7 Colibri iMX6ULL。下面将以 Colibri iMX7 为例介绍如何配置只读属性的文件系统。

 

由于存储介质不同,Nand Flash 上通常采用如 jffs2UBI 等格式文件系统。Toradex  Linux 系统使用 UBI 文件系统。

 

Colibri iMX7 Nand Flash 上会采用以下规划。Nand Flash 总体上划分为两个部分。最前面的 raw 部分不采用任何文件系统,直接存储模块硬件信息 bcbu-boot u-boot 环境变量。第二部分则使用 UBI,创建 5 volume,用于存储内核文件(kernel)、设备树文件(dtb)、M4 的固件(m4-fw)、Linux 文件系统(rootfs)、用户文件(userdata)。其中 rootfs 将设置成自读属性,而 userdata 则可以写入数据。

UBI只读文件系统582.png 

 

Toradex Easy Installer 可以通过 image.json 文件方便地修改分区,从而避免使用命令工具。首先从这里下载用于 Colibri iMX7S Linux BSP v5.x 安装文件。解压后在 image.json 中添加 userdata 的相关配置。

-----------------------------------

             {

                    "name": "rootfs",

                    "content": {

                        "filesystem_type": "ubifs",

                        "filename": "Reference-Minimal-Image-colibri-imx7.tar.xz",

                        "uncompressed_size": 108.1171875

                    },

                    "size_kib": 102400

                },

                {

                    "name": "userdata",

                    "content": {

                        "filesystem_type": "ubifs",

                        "filename": "app.tar.xz",

                        "uncompressed_size": 0.1171875

                    }

                }

-----------------------------------

 

 

这里 name 指定 ubi volume 的名字,filesystem_type 用于指定 ubifs 文件格式,filename 里包含了需要烧录到 userdata volume 的文件,这些是用户应用和配置等,uncompressed_size 是指 app.tar.xz 未压缩的大小,用于显示 Toradex Easy Installer 的安装进度条。更多关于 image.json 配置说明请参考这里

 

使用 Toradex Easy Installer 将上面修改的镜像烧录到 Colibri iMX7S 即可。启动后进入 u-boot,使用下面名可以看到所创建的 volume

-----------------------------------

Colibri iMX7 # ubi part ubi

Colibri iMX7 # ubi info  layout

Volume information dump:

        vol_id          0

......

        name            kernel

Volume information dump:

        vol_id          1

......

        skip_check      0

        name            dtb

Volume information dump:

        vol_id          2

......

        skip_check      0

        name            m4firmware

Volume information dump:

        vol_id          3

......

        skip_check      0

        name            rootfs

Volume information dump:

        vol_id          4

......

        skip_check      0

        name            userdata

-----------------------------------

 

 

启动进入 Linux 后,userdata 并不会被自动挂载,需要将下面内容添加到 /etc/fstab 文件中。现在 rootfs 根目录还没有设置成只读属性,可以创建 /home/root/userdata 目录用于挂载 userdata 卷。

-----------------------------------

ubi:userdata         /home/root/userdata  ubifs      defaults,noatime,rw   1  1

-----------------------------------

 

 

于此同时,还可以进行系统配置。例如添加一个开机启动应用。该应用 write_to_file 在运行时会往 /home/root/userdata 写入一个文件。在 /etc/systemd/system/ 目录下创建 user-demo.service

user-demo.service

-----------------------------------

[Unit]

Description=launch user's demo on dedicated partition

ConditionFileIsExecutable=/home/root/userdata/write_to_file

After=multi-user.target

 

[Service]

WorkingDirectory=/home/root/userdata

Type=simple

ExecStart=/home/root/userdata/write_to_file

 

 

[Install]

WantedBy=multi-user.target

-----------------------------------

 

 

运行下面命令使 user-demo.service 开机运行。然后重启系统。

-----------------------------------

~# systemctl enable user-demo.service

~# reboot

-----------------------------------

 

 

此时,使用 mount 命令查看所挂载的卷,其中有 ubi:userdata

-----------------------------------

~# mount -l

tmpfs on /var/volatile type tmpfs (rw,relatime)

ubi:userdata on /home/root/userdata type ubifs (rw,noatime,assert=read-only,ubi=0,vol=4)

-----------------------------------

 

 

/home/root/userdata 目录下也可以看到 write_to_file 写入的文件 file.txt

-----------------------------------

~/userdata# ls

file.txt       write_to_file

~/userdata# cat file.txt

This is a writing file test

 

~/userdata# systemctl status user-demo.service

* user-demo.service - launch user's demo on dedicated partition

     Loaded: loaded (/etc/systemd/system/user-demo.service; enabled; vendor preset: disabled)

     Active: inactive (dead) since Wed 2022-07-06 06:09:44 UTC; 14min ago

    Process: 316 ExecStart=/home/root/userdata/write_to_file (code=exited, status=0/SUCCESS)

   Main PID: 316 (code=exited, status=0/SUCCESS)

 

Jul 06 06:09:44 colibri-imx7-02873356 systemd[1]: Started launch user's demo on dedicated partition.

Jul 06 06:09:44 colibri-imx7-02873356 systemd[1]: user-demo.service: Succeeded.

-----------------------------------

 

 

最后需要再次修改 /etc/fstab rootfs 根目录设置为只读属性,noatime 后面添加 ro

-----------------------------------

/dev/root            /                    auto       noatime,ro            1  1

-----------------------------------

 

重启系统,进入 u-boot 命令模式,配置下参数。

-----------------------------------

setenv ubiargs "ubi.mtd=ubi root=ubi0:rootfs ro rootfstype=ubifs ubi.fm_autoconvert=1"

saveenv

reset

-----------------------------------

 

 

重启进入 Linux 系统。根目录 / 已经是只读状态,无法创建文件。而 /home/root/userdata 目录下的应用仍可以正常执行并写入文件。

-----------------------------------

:~# mount -l

ubi0:rootfs on / type ubifs (ro,noatime,assert=read-only,ubi=0,vol=3)

 

~# mkdir test

mkdir: can't create directory 'test': Read-only file system

-----------------------------------

 

 

总结

通过将Linux 的系统文件设置为只读状态,可以降低因文件系统损坏导致无法启动的概率。对于更高要求的应用,甚至可以使用外部存储作为备份,用于恢复文件。


专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词: ARM Linux UBI NXP iMX7 Toradex Colibri

相关推荐

WinCE+ARM开发及关键技术 上

视频 2009-10-22

最新ARM技术和嵌入式技术发展动态 下

视频 2009-10-22

ARM 展示小型低功耗上网本样品

视频 2009-03-16

ARM嵌入式系统开发

Arm遭遇监管危机:FTC针对其技术授权启动反垄断调查

2026-05-18

走进智能工厂 为何智能诊断是持续运行的关键

面向ARM系统集成的FPGA片上系统解决方案

WinCE+ARM开发及关键技术 下

视频 2009-10-22

​Arm 宣布推出 Performix,为开发者带来 AI 时代必备的可扩展性能

2026-05-07

汽车暖通空调(HVAC)控制参考设计

ARM开发详解

边缘 AI 加速的 Arm Cortex‑M0+ MCU 如何为电子产品注入更强智能

最新ARM技术和嵌入式技术发展动态 中

视频 2009-10-22

arm学习资料

资源下载 2007-12-03

ARM Axion 处理器加持谷歌第八代 TPU,云端全面转向智能体 AI 架构

ARM嵌入式软件编程经验谈

ARM嵌入式系统开发:软件设计与优化

Arm宣布推出Performix,为开发者带来 AI 时代必备的可扩展性能

Arm财报过山车:营收创纪录,股价跌7%

Arm CEO:AI智能体将推动CPU核心数升至 512

网络与存储 2026-05-11
更多 培训课堂
更多 焦点
更多 视频

技术专区