Openwrt開發之SD卡唯讀檔案系統

2021-09-12 14:27:32 字數 1713 閱讀 8236

opnewrt作為基於linux核心的嵌入式作業系統,支援市面上很多的路由器產品以及諸如linkit smart 7688這樣的物聯網核心開發板,為我們快速開發實現不同物理層裝置(wifi,rj45,uart,485)之間通訊的「閘道器裝置「提供了很好的平台。

sd卡作為可插拔的外儲存器往往是這種中轉站式產品的必要組成部分,sd卡在openwrt上識別為/dev/mmcblk0(若識別不了請檢查相關的電路以及在openwrt編譯選項中中是否選擇支援sd卡的驅動),命令:

mount -f /dev/mmcblk0 /mnt

會將sd卡作為唯讀系統掛載到/mnt目錄下。

但是,我們今天要討論的不是怎麼將sd卡掛載為唯讀,而是我在開發中遇到的問題是我以可讀寫的方式掛載之後,在業務程式(會對sd卡進行讀寫)正常執行過程中斷電,重新在上電,就會出現sd卡正常的掛載之後卻變成了唯讀的檔案系統。

我查閱了openwrt官網對檔案系統相關的說明 官網鏈結,發現了系統對fat32這種跨平台的檔案系統支援有一些問題,而sd卡的檔案系統正是fat32的。於是著手將sd卡的檔案系統換為ext4。

當初在編譯openwrt時沒有考慮支援ext4的檔案系統,所以需要將kmod-fs-ext4作為編譯成ipk的安裝包,跟著業務軟體的更新指令碼一併安裝到openwrt中,這樣不需要更新openwrt即可完成對ext4檔案系統的支援。

在安裝過程中發現核心依賴出了問題,都是同一套**編譯出來的(未同步更新openwrt**),為什麼會出現這樣的問題呢?原來雖然依賴的核心版本一致,但是後邊跟的md5值卻不相同,於是開啟/usr/lib/opkg/status檔案找到:

package: kmod-usb-serial

package: kernel

version: 4.4.135-1-dd771f070793a57e639ba899b957b9d9

depends: libc

status: install user installed

architecture: mipsel_24kc

installed-time: 1528658724

auto-installed: yes

在安裝指令碼中使用sed命令將後邊的md5值替換為安裝失敗提示的依賴md5值:

sed -i 『s/version: 4.4.135-1-dd771f070793a57e639ba899b957b9d9/version: 4.4.135-1-bd23b504438a969434409f08c297498a/』 /usr/lib/opkg/status

替換成功後即可成功安裝,但是sd卡此時還是fat32,於是利用openwrt原始碼編譯出e2fsprogs格式化工具安裝包。安裝過後即可格式化sd卡。但是這個格式化工具依賴librt與libuuid和libext2fs,需要先安裝這三個庫才能使用。

在一切安裝準備妥當之後,使用命令

mkfs.ext4 -f /dev/mmcblk0

將sd卡格式化成ext4。格式化完成後使用

mount -t ext4 /dev/mmcblk0 /mnt

命令將sd卡成功掛載到/mnt之後即告完成。

將sd卡更換為ext4之後再未出現過sd卡掛載上來的檔案系統為唯讀的問題。

OpenWrt 自動掛載sd卡

在編譯的時候經常會遇到flash不夠用的問題,怎麼解決呢?可以通過掛載usb或者sd卡解決問題。make kernel menuconfig依次進入選項device drivers mmc sd sdio card support 依照上圖在相關選項前打上 號。進入kernel modules na...

OpenWrt之U盤SD卡掛載overlay

官方參考 掛載擴充套件儲存指令碼 bin sh 一鍵指令碼掛載rootfs到sd卡,u盤則改mmcblk0p1為sda1 umount dev mmcblk0p1 mkfs.ext4 dev mmcblk0p1 f mount dev mmcblk0p1 mnt tar c overlay cvf ...

android開發 SD卡儲存

新手筆記,參考謹慎 關於sd卡的存讀刪,網上有很多例子。但是一般都是以儲存.txt檔案為例,當要將 檔案存入sd卡該如何呢?public class sdcarddata public static file createfile string path,string filename catch ...