0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何配置只讀屬性的文件系統(tǒng)(Colibri iMX7為例)

星星科技指導(dǎo)員 ? 來源:Toradex胡珊逢 ? 作者:Toradex胡珊逢 ? 2023-12-07 09:31 ? 次閱讀

By Toradex胡珊逢

在先前的文章我們已經(jīng)介紹在使用eMMC的模塊上配置只讀屬性的文件系統(tǒng),以及利用squashfs和overlayfs掛載可寫分區(qū)。Toradex的產(chǎn)品除了使用eMMC存儲(chǔ)外,還有部分是采用Nand Flash,例如Colibri iMX7和Colibri iMX6ULL。下面將以Colibri iMX7為例介紹如何配置只讀屬性的文件系統(tǒng)。

由于存儲(chǔ)介質(zhì)不同,Nand Flash上通常采用如jffs2、UBI等格式文件系統(tǒng)。Toradex的Linux系統(tǒng)使用UBI文件系統(tǒng)。

在Colibri iMX7的Nand Flash上會(huì)采用以下規(guī)劃。Nand Flash總體上劃分為兩個(gè)部分。最前面的raw部分不采用任何文件系統(tǒng),直接存儲(chǔ)模塊硬件信息bcb,u-boot和u-boot環(huán)境變量。第二部分則使用UBI,創(chuàng)建5個(gè)volume,用于存儲(chǔ)內(nèi)核文件(kernel)、設(shè)備樹文件(dtb)、M4的固件(m4-fw)、Linux文件系統(tǒng)(rootfs)、用戶文件(userdata)。其中rootfs將設(shè)置成自讀屬性,而userdata則可以寫入數(shù)據(jù)。

1657097520324326.png

Toradex Easy Installer可以通過image.json文件方便地修改分區(qū),從而避免使用命令工具。首先從這里下載用于Colibri iMX7S的Linux BSP v5.x安裝文件。解壓后在image.json中添加userdata的相關(guān)配置。

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

{

"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里包含了需要燒錄到userdatavolume的文件,這些是用戶應(yīng)用和配置等,uncompressed_size是指app.tar.xz未壓縮的大小,用于顯示Toradex Easy Installer的安裝進(jìn)度條。更多關(guān)于image.json配置說明請(qǐng)參考這里。

使用Toradex Easy Installer將上面修改的鏡像燒錄到Colibri iMX7S即可。啟動(dòng)后進(jìn)入u-boot,使用下面名可以看到所創(chuàng)建的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

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

啟動(dòng)進(jìn)入Linux后,userdata并不會(huì)被自動(dòng)掛載,需要將下面內(nèi)容添加到/etc/fstab文件中。現(xiàn)在rootfs根目錄還沒有設(shè)置成只讀屬性,可以創(chuàng)建/home/root/userdata目錄用于掛載userdata卷。

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

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

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

于此同時(shí),還可以進(jìn)行系統(tǒng)配置。例如添加一個(gè)開機(jī)啟動(dòng)應(yīng)用。該應(yīng)用write_to_file在運(yùn)行時(shí)會(huì)往/home/root/userdata寫入一個(gè)文件。在/etc/systemd/system/目錄下創(chuàng)建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

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

運(yùn)行下面命令使user-demo.service開機(jī)運(yùn)行。然后重啟系統(tǒng)。

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

~# systemctl enable user-demo.service

~#reboot

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

此時(shí),使用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根目錄設(shè)置為只讀屬性,noatime后面添加ro。

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

/dev/root / auto noatime,ro 1 1

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

重啟系統(tǒng),進(jìn)入u-boot命令模式,配置下參數(shù)。

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

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

saveenv

reset

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

重啟進(jìn)入Linux系統(tǒng)。根目錄/已經(jīng)是只讀狀態(tài),無(wú)法創(chuàng)建文件。而/home/root/userdata目錄下的應(yīng)用仍可以正常執(zhí)行并寫入文件。

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

:~# 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

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

總結(jié)

通過將Linux的系統(tǒng)文件設(shè)置為只讀狀態(tài),可以降低因文件系統(tǒng)損壞導(dǎo)致無(wú)法啟動(dòng)的概率。對(duì)于更高要求的應(yīng)用,甚至可以使用外部存儲(chǔ)作為備份,用于恢復(fù)文件。

審核編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11304

    瀏覽量

    209499
  • Nand flash
    +關(guān)注

    關(guān)注

    6

    文章

    241

    瀏覽量

    39818
  • emmc
    +關(guān)注

    關(guān)注

    7

    文章

    216

    瀏覽量

    52743
  • UBI
    UBI
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    4122
  • rootfs
    +關(guān)注

    關(guān)注

    0

    文章

    19

    瀏覽量

    4666
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于Buildroot的Linux系統(tǒng)構(gòu)建之根文件系統(tǒng)

    基本的Linux根文件系統(tǒng)是Unix文件夾目錄層次結(jié)構(gòu),skeleton是構(gòu)建根文件系統(tǒng)的基礎(chǔ)。   skeleton配置入口:   System configuration --
    發(fā)表于 04-01 10:46 ?2615次閱讀

    linux驅(qū)動(dòng)開發(fā)_文件系統(tǒng)本地掛載

    介紹Linux開發(fā)根文件系統(tǒng)掛載、NFS文件系統(tǒng)配置,UBOOT環(huán)境變量配置,完成文件系統(tǒng)啟動(dòng)。
    的頭像 發(fā)表于 09-17 15:52 ?1481次閱讀
    linux驅(qū)動(dòng)開發(fā)_<b class='flag-5'>文件系統(tǒng)</b>本地掛載

    適用于iMX7處理器的的小巧高效完整電源解決方案

    描述適用于 NXP? IMX7 系列應(yīng)用處理器的高效靈活的小尺寸電源參考設(shè)計(jì)展示了適用于 iMX7 處理器的完整電源解決方案。這個(gè)簡(jiǎn)單的解決方案僅使用 5 個(gè)直流/直流轉(zhuǎn)換器和一個(gè)序列發(fā)生器 IC
    發(fā)表于 12-28 11:50

    一文搞懂定制Ubuntu文件系統(tǒng)-基于迅imx6開發(fā)板

    啟動(dòng)。2.編譯Ubuntu文件系統(tǒng)。3.TF卡燒寫。實(shí)驗(yàn)環(huán)境開發(fā)環(huán)境:Ubuntu14開發(fā)板:迅imx6q工業(yè)級(jí)(迅imx6系列開發(fā)板均
    發(fā)表于 06-28 15:52

    基于iMX7示例了雙路以太網(wǎng)的設(shè)計(jì)和配置思路

    接口,本文就基于Toradex基于NXP iMX7 Dual SoC的ARM核心板模塊Colibri iMX7D示例擴(kuò)展兩路以太網(wǎng)。
    發(fā)表于 12-28 06:45

    基于iMX7 M4 SPI Slave模式的驅(qū)動(dòng)供參考

    的arm平臺(tái)同樣來自于Toradex 基于NXP iMX7 ARM處理器的Colibri iMX7 ARM嵌入式平臺(tái)。
    發(fā)表于 01-05 07:52

    基于NXP iMX7 arm處理器展示鋰電池的應(yīng)用方案

    本文將使用基于NXP iMX7 arm處理器的來自Toradex Colibri iMX7的低功耗演示板來展示鋰電池的應(yīng)用方案。
    發(fā)表于 01-13 07:24

    imx8qxp-mek將文件推送到“/vendor/etc”目錄時(shí)出現(xiàn)只讀文件系統(tǒng)錯(cuò)誤是怎么回事?

    “/vendor/lib64/hw”和“/vendor/etc”目錄。由于默認(rèn)文件系統(tǒng)只讀的,因此我通過以下鏈接重新安裝文件系統(tǒng)。我可以推送 gps.default.so 文件,但在
    發(fā)表于 04-11 08:17

    基于Cramfs的根文件系統(tǒng)配置

    文件系統(tǒng)是構(gòu)建一個(gè)Linux 嵌入式系統(tǒng)的重要組成部分,目前嵌入式系統(tǒng)可以選擇的根文件系統(tǒng)有:Romfs、Cramfs、Ramfs、Jffs2、Ext2 等,而目前廣泛使用的Cram
    發(fā)表于 05-25 17:07 ?23次下載

    labview設(shè)置文件屬性

    labview程序設(shè)置文件屬性,如只讀,設(shè)置系統(tǒng)文件或者隱藏該
    發(fā)表于 12-17 17:01 ?30次下載

    NXP iMX7 ARM處理器上部署FreeRTOS

      FreeRTOS是廣泛使用的開源實(shí)時(shí)操作系統(tǒng), 被眾多芯片廠商包括NXP所支持, 本文就展示在NXP iMX7 ARM處理器上面的M4核心上面部署FreeRTOS.
    發(fā)表于 09-18 14:36 ?7次下載
    NXP <b class='flag-5'>iMX7</b> ARM處理器上部署FreeRTOS

    適用iMX7系列應(yīng)用處理器的小巧高效且靈活易用型電源參考設(shè)計(jì)

    描述適用于 NXP? IMX7 系列應(yīng)用處理器的高效靈活的小尺寸電源參考設(shè)計(jì)展示了適用于 iMX7 處理器的完整電源解決方案。這個(gè)簡(jiǎn)單的解決方案僅使用 5 個(gè)直流/直流轉(zhuǎn)換器和一個(gè)序列發(fā)生器 IC
    發(fā)表于 08-24 10:37 ?358次閱讀

    Linux嵌入式文件系統(tǒng)如何構(gòu)建

    的,都是采用目錄樹的結(jié)構(gòu)。在嵌入式系統(tǒng)中常見的文件系統(tǒng)有cramfs、romfs、jffs、yaffs等,這里就以制作cramfs文件系統(tǒng)
    發(fā)表于 06-18 09:23 ?998次閱讀

    只讀壓縮文件系統(tǒng)EROFS的設(shè)計(jì)與實(shí)現(xiàn)

    EROFS是一個(gè)針對(duì)移動(dòng)設(shè)備的只讀壓縮文件系統(tǒng)。作者觀察到,當(dāng)前手機(jī)配備的存儲(chǔ)空間不大,而安卓系統(tǒng)系統(tǒng)分區(qū)、各種app占用的空間越來越大。導(dǎo)致用戶的實(shí)際可支配空間越來越小。如圖所示,
    的頭像 發(fā)表于 08-31 15:09 ?2656次閱讀
    <b class='flag-5'>只讀</b>壓縮<b class='flag-5'>文件系統(tǒng)</b>EROFS的設(shè)計(jì)與實(shí)現(xiàn)

    如何使用squashfs只讀文件系統(tǒng)制作Linux系統(tǒng)文件

    Colibri iMX6 的 eMMC 上我們將使用以下分區(qū)規(guī)劃。BootFS FAT32 格式,該分區(qū)上包含 Linux 內(nèi)核文件,device tree 等啟動(dòng)
    發(fā)表于 01-09 11:43 ?1987次閱讀
    如何使用squashfs<b class='flag-5'>只讀</b><b class='flag-5'>文件系統(tǒng)</b>制作Linux<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>文件</b>