在嵌入式Linux開發(fā)中,存儲方案的切換是常見需求,比如從傳統(tǒng)eMMC改為SPI NOR Flash+SSD(SATA/NVMe)雙存儲架構(gòu)。這種調(diào)整能兼顧啟動速度與存儲容量,但也可能引發(fā)Vendor Storage訪問異常。本文將結(jié)合實際調(diào)試案例,拆解適配過程中的核心問題與解決方案,幫助開發(fā)者快速踩坑。

一、問題根源:存儲切換為何影響Vendor Storage?
Vendor Storage是嵌入式系統(tǒng)中用于存放SN(序列號)、MAC地址、硬件配置等關(guān)鍵信息的專用存儲區(qū)域,其正常工作依賴存儲設(shè)備驅(qū)動、分區(qū)配置、內(nèi)核參數(shù)三者的協(xié)同。從eMMC切換到SPI+SSD方案后,原有適配邏輯失效,主要源于以下3點差異:
1.存儲介質(zhì)特性不同:eMMC屬于塊設(shè)備,Vendor Storage通常依托eMMC的專用分區(qū)實現(xiàn);而SPI NOR Flash是字符設(shè)備(MTD設(shè)備),需通過MTD子系統(tǒng)驅(qū)動管理,原有塊設(shè)備驅(qū)動無法直接復(fù)用。
2.分區(qū)表定義規(guī)則變化:eMMC的分區(qū)表由廠商預(yù)設(shè)或通過工具分區(qū),SPI NOR Flash需在parameter.txt(啟動參數(shù)文件)和內(nèi)核設(shè)備樹(DTS)中手動定義分區(qū),且分區(qū)起始地址、大小必須滿足64KB整數(shù)倍(SPI NOR擦除塊對齊要求)。
3.內(nèi)核配置依賴不同:eMMC方案下啟用的Vendor Storage配置(如CONFIG_ROCKCHIP_FLASH_VENDOR_STORAGE),在SPI方案中需切換為MTD子系統(tǒng)對應(yīng)的配置(CONFIG_ROCKCHIP_MTD_VENDOR_STORAGE),同時需啟用SPI NOR驅(qū)動支持。


二、核心適配步驟:四步打通SPI+SSD下的Vendor Storage
結(jié)合實際調(diào)試經(jīng)驗,從eMMC遷移到SPI+SSD方案時,需按以下步驟完成Vendor Storage適配,每一步都需嚴格驗證,避免后續(xù)問題:
1.內(nèi)核配置:啟用SPI NOR與MTD Vendor Storage支持
首先需在Linux內(nèi)核配置(.config文件)中開啟關(guān)鍵選項,確保SPI NOR設(shè)備能被識別,且Vendor Storage能依托MTD子系統(tǒng)工作:
?啟用SPI NOR驅(qū)動:勾選CONFIG_MTD_SPI_NOR(路徑:Device Drivers > Memory Technology Device (MTD) > SPI-NOR device support),同時確保對應(yīng)廠商驅(qū)動(如Macronix、Winbond)被編譯(可通過spi-nor-dev_ids數(shù)組確認芯片型號匹配,如本文中mx25u12832f需在列表中)。
?啟用MTD Vendor Storage:勾選CONFIG_ROCKCHIP_MTD_VENDOR_STORAGE(路徑:Device Drivers > Memory Technology Device (MTD) > Rockchip MTD Vendor Storage Support),禁用原eMMC方案的CONFIG_ROCKCHIP_FLASH_VENDOR_STORAGE,避免驅(qū)動沖突。
?驗證配置:編譯內(nèi)核后,通過dmesg | grep spi查看SPI NOR是否被識別(如出現(xiàn)“spi-nor: detected mx25u12832f”日志,說明驅(qū)動加載成功)。
2.分區(qū)配置:雙文件同步定義“vnvm”專用分區(qū)
SPI NOR需單獨劃分“vnvm”分區(qū)存放Vendor Storage數(shù)據(jù),且**parameter.txt與DTS中的分區(qū)定義必須完全一致**(僅單位不同),這是適配過程中的高頻踩坑點:
|
配置文件
|
配置規(guī)則
|
示例(以256KB vnvm分區(qū)為例)
|
|
parameter.txt(啟動參數(shù))
|
單位:sector(512字節(jié)),格式為“分區(qū)大小@起始地址(分區(qū)名)”,需為64KB整數(shù)倍(即128個sector)
|
mtdparts=rk29xxnand:0x00000200@0x00000c00(vnvm),0x00004000@0x00004000(uboot)
|
|
DTS(設(shè)備樹)
|
單位:byte,格式與parameter.txt一致,需轉(zhuǎn)換為byte(sector值×512)
|
bootargs = "... mtdparts=sfc_nor:0x00040000@0x00018000(vnvm),0x00600000@0x00020000(uboot) ..."
|

關(guān)鍵注意事項:
?分區(qū)單位不可混淆:parameter.txt用sector,DTS用byte,若單位錯誤會導(dǎo)致分區(qū)無法識別,進而出現(xiàn)“vendor_storage open fail”錯誤。
?避免沖突:“vnvm”分區(qū)起始地址需避開uboot、boot等已有分區(qū),建議放在uboot分區(qū)之前(如起始地址0x00000c00),大小根據(jù)需求設(shè)置(最小64KB,需為64KB整數(shù)倍)。
3.驅(qū)動驗證:確認MTD Vendor Storage設(shè)備生成
完成內(nèi)核與分區(qū)配置后,需驗證系統(tǒng)是否生成/dev/vendor_storage設(shè)備節(jié)點(這是Vendor Storage工具調(diào)用的關(guān)鍵):
1.啟動系統(tǒng)后,執(zhí)行ls /dev | grep vendor_storage,若能看到設(shè)備節(jié)點,說明配置基本正常;
2.若未生成節(jié)點,通過dmesg | grep vendor排查問題:
?若出現(xiàn)“vendor_storage_probe ret=-1”,可能是分區(qū)定義錯誤(如地址沖突、單位錯誤),需重新核對parameter.txt與DTS;
?若出現(xiàn)“spi nor not initialized”,需檢查SPI NOR驅(qū)動是否啟用(參考步驟1的內(nèi)核配置)。
4.功能測試:用工具驗證讀寫可用性
最后通過vendor_storage工具測試讀寫功能,確認關(guān)鍵信息能正常存儲:
?寫入測試:執(zhí)行vendor_storage -w VENDOR_SN_ID -t string -i "TEST_SN_123456",無報錯說明寫入成功;
?讀取測試:執(zhí)行vendor_storage -r VENDOR_SN_ID -t string,若能輸出“TEST_SN_123456”,說明Vendor Storage完全可用;
?異常排查:若出現(xiàn)“輸入/輸出錯誤”,需檢查“vnvm”分區(qū)是否可讀寫(通過cat /proc/mtd查看分區(qū)狀態(tài),確保“vnvm”分區(qū)為“rw”模式)。
三、常見問題排查:3個高頻場景的解決方案
在實際適配中,即使步驟正確,也可能因細節(jié)遺漏導(dǎo)致問題。以下是3個典型場景的排查思路:
1.場景1:vendor_storage工具提示“open fail”
?可能原因:
a.SPI NOR驅(qū)動未加載(dmesg | grep spi無識別日志);
b.“vnvm”分區(qū)未定義或定義錯誤(單位混淆、地址沖突);
c.內(nèi)核未啟用CONFIG_ROCKCHIP_MTD_VENDOR_STORAGE。
?排查步驟:先確認SPI NOR驅(qū)動加載(步驟1),再核對分區(qū)配置(步驟2),最后檢查內(nèi)核配置(步驟1)。
2.場景2:dmesg中出現(xiàn)“vendor_storage_probe ret=-1”
?可能原因:MTD子系統(tǒng)未找到“vnvm”分區(qū),通常是分區(qū)表中未定義該分區(qū),或parameter.txt與DTS的分區(qū)信息不一致。
?排查步驟:對比parameter.txt與DTS中的“vnvm”分區(qū)起始地址、大小,確保單位轉(zhuǎn)換正確(sector×512=byte),且無地址沖突。
3.場景3:SPI NOR芯片未被識別(無“detected xxx”日志)
?可能原因:
a.內(nèi)核未勾選對應(yīng)芯片的驅(qū)動(如mx25u12832f需在spi-nor-dev_ids數(shù)組中);
b.硬件接線問題(SPI引腳接觸不良)。
?排查步驟:先檢查內(nèi)核drivers/mtd/spi-nor/core.c中的spi_nor_dev_ids數(shù)組,確認芯片型號已添加;若軟件配置正確,再排查硬件接線。
四、總結(jié):適配的核心原則
從eMMC到SPI+SSD的Vendor Storage適配,本質(zhì)是**“從塊設(shè)備邏輯切換到MTD字符設(shè)備邏輯”**,關(guān)鍵在于抓住3個核心原則:
1.驅(qū)動匹配:明確SPI NOR芯片型號,確保驅(qū)動被編譯且加載成功;
2.分區(qū)同步:parameter.txt與DTS的“vnvm”分區(qū)定義必須一致,單位不可混淆;
3.配置唯一:禁用eMMC方案的Vendor Storage配置,僅保留MTD方案的配置,避免沖突。
只要按“內(nèi)核配置→分區(qū)定義→驅(qū)動驗證→功能測試”的步驟推進,同時做好每一步的日志排查,就能高效解決適配過程中的問題,確保Vendor Storage在雙存儲方案下穩(wěn)定工作。
-
嵌入式
+關(guān)注
關(guān)注
5198文章
20434瀏覽量
333871 -
存儲
+關(guān)注
關(guān)注
13文章
4785瀏覽量
90048 -
SSD
+關(guān)注
關(guān)注
21文章
3108瀏覽量
122216 -
emmc
+關(guān)注
關(guān)注
7文章
261瀏覽量
55972
發(fā)布評論請先 登錄
取代SSD!超省錢eMMC方案進軍筆電市場
eMMC和固態(tài)硬盤SSD的區(qū)別是什么?宏旺半導(dǎo)體的一個小觀點
宏旺半導(dǎo)體從應(yīng)用領(lǐng)域來漫談eMMC和SSD的區(qū)別及特性
宏旺半導(dǎo)體ICMAX解答eMMC為什么不能做成SSD?
全志 Tina Linux 存儲介質(zhì)切換:eMMC,SPI NAND,SPI NOR,SD Card,SD NAND
佰維BGA SSD系列之——從設(shè)計到應(yīng)用助力客戶產(chǎn)品提升競爭力
EMMC與SSD存儲的比較
EMMC存儲在手機中的應(yīng)用
EMMC存儲器故障檢測及解決方案
EMMC存儲如何影響設(shè)備性能
EMMC與UFS的技術(shù)對比
EMMC存儲模塊的安裝與配置
RK3588平臺雙存儲(SPI+PCIE)OTA升級方案教學(xué)文檔
RK?平臺?Vendor Storage?開發(fā)指南:基礎(chǔ)知識、流程與實用技巧
從eMMC到SPI+SSD:雙存儲方案下Vendor Storage適配指南
評論