日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

從現(xiàn)象到本質(zhì),徹底搞懂U-Boot env存儲(chǔ)機(jī)制

眺望電子 ? 2026-05-20 08:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言:

瑞芯微平臺(tái)的項(xiàng)目開(kāi)發(fā)中,不少工程師都踩過(guò)這樣一個(gè)“詭異”的坑:setenv改完、saveenv也保存了,重啟設(shè)備后環(huán)境變量卻莫名地回到了默認(rèn)值。本文將帶你從現(xiàn)象到本質(zhì),徹底搞懂U-Boot環(huán)境變量的存儲(chǔ)機(jī)制,并給出完整的配置方案。

一、問(wèn)題復(fù)現(xiàn)

日常開(kāi)發(fā)調(diào)試時(shí),我們會(huì)需要修改 U-Boot 環(huán)境變量(比如調(diào)整啟動(dòng)延時(shí)bootdelay、修改啟動(dòng)命令),操作步驟很簡(jiǎn)單,舉個(gè)例子:

1. 設(shè)備上電,串口按Ctrl+C進(jìn)入 U-Boot 命令行;

2. 查看當(dāng)前變量:printenv;

5a6884a2-53e3-11f1-ab55-92fbcf53809c.png

3. 修改目標(biāo)變量(示例改啟動(dòng)延時(shí)為 3 秒):setenv bootdelay 3;

5a7b6338-53e3-11f1-ab55-92fbcf53809c.png

4. 保存配置:saveenv,提示保存成功;

5a876c64-53e3-11f1-ab55-92fbcf53809c.png

5. 重啟設(shè)備,再次printenv——修改完全消失,變回默認(rèn)值!

5a9310be-53e3-11f1-ab55-92fbcf53809c.png

問(wèn)題的本質(zhì)在哪里?

二、根因分析

要理解這個(gè)現(xiàn)象,需要先搞清楚U-Boot環(huán)境變量的存儲(chǔ)機(jī)制。U-Boot在編譯時(shí)通過(guò)一系列CONFIG宏來(lái)決定環(huán)境變量的存儲(chǔ)位置,而瑞芯微平臺(tái)的SDK默認(rèn)配置是:

CONFIG_ENV_IS_NOWHERE

這個(gè)配置的語(yǔ)義非常直白——環(huán)境變量“無(wú)處可存”,這個(gè)配置下,環(huán)境變量?jī)H存在內(nèi)存中,saveenv只是臨時(shí)寫(xiě)入內(nèi)存,斷電 / 重啟后內(nèi)存數(shù)據(jù)清空,變量自然恢復(fù)默認(rèn),這就是修改失效的根源。

想要永久保存變量,必須開(kāi)啟存儲(chǔ)介質(zhì)持久化配置,瑞芯微平臺(tái)常用且推薦以下選項(xiàng):

配置宏存儲(chǔ)介質(zhì)
CONFIG_ENV_IS_IN_MMCeMMC / SD卡
CONFIG_ENV_IS_IN_NANDNAND Flash
CONFIG_ENV_IS_IN_SPI_FLASHSPI Flash
CONFIG_ENV_IS_IN_BLK_DEVBLK框架層設(shè)備(RK平臺(tái)推薦)

因此對(duì)于瑞芯微平臺(tái),尤其是使用eMMC作為存儲(chǔ)介質(zhì)的場(chǎng)景,推薦啟用CONFIG_ENV_IS_IN_MMC,將環(huán)境變量直接寫(xiě)入eMMC的指定扇區(qū),實(shí)現(xiàn)真正的持久化存儲(chǔ)


三、解決方案

眺望電子的瑞芯微系列核心板均使用 EMMC 顆粒存儲(chǔ),打開(kāi)CONFIG_ENV_IS_IN_MMC,搞定永久保存。

3.1開(kāi)啟Uboot核心配置

在U-Boot的配置中,關(guān)閉CONFIG_ENV_IS_NOWHERE,并啟用:

CONFIG_ENV_IS_IN_MMC

同時(shí)需要關(guān)注兩個(gè)關(guān)鍵參數(shù):

CONFIG_ENV_OFFSET 0x3f8000 // 環(huán)境變量在eMMC中的起始偏移地址CONFIG_ENV_SIZE 0x8000 // 環(huán)境變量占用空間大?。J(rèn)32KB)

注意:CONFIG_ENV_OFFSET和CONFIG_ENV_SIZE的具體值需要根據(jù)你的分區(qū)表和固件布局來(lái)確認(rèn)。后續(xù)配置fw_env.config時(shí)也會(huì)用到這兩個(gè)值,務(wù)必保持一致。

完成上述配置后重新編譯U-Boot并燒錄,此時(shí)通過(guò)setenv + saveenv修改的環(huán)境變量就會(huì)被寫(xiě)入eMMC,重啟后依然有效。

3.2Linux 用戶(hù)空間操作環(huán)境變量

開(kāi)發(fā)后期,不想反復(fù)進(jìn) U-Boot 命令行,可在 Linux 系統(tǒng)下用fw_printenv/fw_setenv工具直接讀寫(xiě) EMMC 中的 U-Boot 環(huán)境變量,使用前需要確保:

已啟用 CONFIG_ENV_IS_IN_MMC(否則工具讀取不到有效數(shù)據(jù))

正確配置 fw_env.config

在U-Boot源碼目錄下執(zhí)行:

./make.shenv

5a9e5dac-53e3-11f1-ab55-92fbcf53809c.png

執(zhí)行命令后生成文件

5aab9c06-53e3-11f1-ab55-92fbcf53809c.png

此處需要配置env文件,匹配 EMMC 偏移和大小

git diff fw_env.configdiff --git a/u-boot/tools/env/fw_env.config b/u-boot/tools/env/fw_env.configindex 7916ebd..fd2f7aa 100644--- a/u-boot/tools/env/fw_env.config+++ b/u-boot/tools/env/fw_env.config@@ -8,8 +8,8 @@# NOR example# MTD device name Device offset Env. size Flash sector size Number of sectors-/dev/mtd1 0x0000 0x4000 0x4000-/dev/mtd2 0x0000 0x4000 0x4000+#/dev/mtd1 0x0000 0x4000 0x4000+#/dev/mtd2 0x0000 0x4000 0x4000# MTD SPI-dataflash example# MTD device name Device offset Env. size Flash sector size Number of sectors@@ -23,7 +23,7 @@# end of the device/partition, rather than a forwards offset from the start.# Block device example-#/dev/mmcblk0 0xc0000 0x20000+/dev/mmcblk0 0x3f8000 0x80000#/dev/mmcblk0 -0x20000 0x20000# VFAT example

編譯后將fw_env.config 移動(dòng)到板子的/etc 路徑下;

將fw_printenv 移動(dòng)到板子的/usr/local/bin 路徑下;

后續(xù)可用該工具進(jìn)行boot的變更,進(jìn)行fw_printenv 操作前需要先進(jìn)行fw_printenv 的軟連接

ln-s /usr/bin/fw_printenv /usr/bin/fw_setenv

fw_printenv 查看某個(gè)變量:

fw_printenvbootdelay

使用fw_setenv設(shè)置環(huán)境變量 :

fw_setenvbootdelay3fw_printenv

刪除一個(gè)環(huán)境變量:fw_setenv 變量 后不帶參數(shù)即為刪除該變量

fw_setenvbootdelay

注意:如果配置了CONFIG_ENV_IS_IN_MMC 配置,系統(tǒng)啟動(dòng)時(shí)會(huì)從emmc中讀取env信息,此處EMMC的env信息并不會(huì)隨著燒錄而進(jìn)行更改 將會(huì)永遠(yuǎn)保持不變。

可以通過(guò)瑞芯微的擦除所有扇區(qū)工具進(jìn)行清除,清除該EMMC的env信息之后,后續(xù)初次重啟將會(huì)變?yōu)槟J(rèn)的env信息。

5ab68ec2-53e3-11f1-ab55-92fbcf53809c.png


四、進(jìn)階操作

如果需要固件攜帶一組默認(rèn)的環(huán)境變量,而不是依賴(lài)首次啟動(dòng)后的手動(dòng)配置,那如何從源碼中進(jìn)行環(huán)境變量的更改呢???

要想從源碼目錄進(jìn)行參數(shù)的更改需要進(jìn)行如下操作:

默認(rèn)環(huán)境變量定義在:

u-boot/include/env_default.h

找到default_environment數(shù)組,這里列出了所有編譯期固化的環(huán)境變量。例如,修改bootdelay的默認(rèn)值,可以找到:

5ac25478-53e3-11f1-ab55-92fbcf53809c.png

"bootdelay="__stringify(CONFIG_BOOTDELAY)"\0"

然后修改對(duì)應(yīng)的CONFIG_BOOTDELAY配置即可。

5ad42a7c-53e3-11f1-ab55-92fbcf53809c.png

如果需要添加全新的自定義環(huán)境變量,直接在數(shù)組中添加一行:

diff--git a/u-boot/include/env_default.h b/u-boot/include/env_default.hindex 853c290..446bfe6100644---a/u-boot/include/env_default.h+++b/u-boot/include/env_default.h@@-103,6+103,7@@ const uchar default_environment[]={#ifdefCONFIG_SYS_SOC "soc=" CONFIG_SYS_SOC "\0"#endif+ "YWF_ENV=" "2002""\0"#ifdefCONFIG_SILENT_CONSOLE "silent=enable\0"#endif

5ae05a68-53e3-11f1-ab55-92fbcf53809c.png

"YWF_ENV=""2002""\0"

重新編譯U-Boot后,這個(gè)新變量就會(huì)出現(xiàn)在默認(rèn)環(huán)境變量中,用戶(hù)依然可以通過(guò)setenv在運(yùn)行時(shí)覆蓋它。

5aead240-53e3-11f1-ab55-92fbcf53809c.png


五、總結(jié)

瑞芯微 U-Boot 環(huán)境變量修改失效,核心就是關(guān)閉CONFIG_ENV_IS_NOWHERE、開(kāi)啟CONFIG_ENV_IS_IN_MMC,配合saveenv即可永久保存;

本文從日常調(diào)試用 U-Boot 命令行,批量維護(hù)改源碼默認(rèn)值,后期運(yùn)維用 Linux 工具,三種場(chǎng)景全覆蓋,掌握這一套配置邏輯,無(wú)論是開(kāi)發(fā)調(diào)試還是量產(chǎn)維護(hù),再也不用反復(fù)踩坑!

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

    關(guān)注

    5212

    文章

    20741

    瀏覽量

    338375
  • u-boot
    +關(guān)注

    關(guān)注

    0

    文章

    141

    瀏覽量

    39990
  • 瑞芯微
    +關(guān)注

    關(guān)注

    27

    文章

    894

    瀏覽量

    54723
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    U-boot的基本介紹

    本文開(kāi)始,將陸續(xù)推送“手把手教你移植U-boot”系列文章,目標(biāo)是由淺入深地講解U-boot的工作流程、原理、配置方法和移植方法,手把手教你完成U-boot的移植工作,默認(rèn)硬件開(kāi)發(fā)平
    發(fā)表于 07-14 16:52 ?4300次閱讀
    <b class='flag-5'>U-boot</b>的基本介紹

    U-boot的執(zhí)行流程

    本文主要講述了U-boot的執(zhí)行流程。
    發(fā)表于 07-14 16:58 ?1407次閱讀
    <b class='flag-5'>U-boot</b>的執(zhí)行流程

    U-Boot的啟動(dòng)及移植分析

    bootloader 開(kāi)發(fā)是嵌入式系統(tǒng)必不可少而且十分重要的部分,U-Boot 為功能強(qiáng)大的bootloader 開(kāi)發(fā)軟件。本文詳細(xì)分析了U-Boot 的啟動(dòng)流程,并結(jié)合其源碼,闡述了U-Boot 在S3C2410 目標(biāo)板上的
    發(fā)表于 09-01 16:34 ?27次下載

    Porting U-Boot to the Control

    In this paper, the way of porting U-Boot to Control Computer Based MPC8349 will beintroduced
    發(fā)表于 01-25 15:45 ?13次下載

    u-boot的Makefile分析

    u-boot的Makefile分析 U-BOOT是一個(gè)LINUX下的工程,在編譯之前必須已經(jīng)安裝對(duì)應(yīng)體系結(jié)構(gòu)的交叉編譯環(huán)境,這里只針對(duì)ARM,編譯器系列軟件為arm-linux-*。 U-BOOT的下載
    發(fā)表于 05-17 09:16 ?2315次閱讀

    U-Boot結(jié)構(gòu)功能介紹

      U-Boot,全稱(chēng) Universal Boot Loader,是遵循GPL條款的開(kāi)放源碼項(xiàng)目。FADSROM、8xxROM、PPCBOOT逐步發(fā)展演化而來(lái)。其源碼目錄、編譯形式與Linux內(nèi)核很相似,事實(shí)上,不少
    發(fā)表于 07-30 09:17 ?1490次閱讀
    <b class='flag-5'>U-Boot</b>結(jié)構(gòu)功能介紹

    u-boot學(xué)習(xí)指南

    自己的開(kāi)發(fā)板上,這個(gè)過(guò)程主要是修改主芯片相關(guān)代碼以及開(kāi)發(fā)板硬件相關(guān)代碼,包括啟動(dòng)文件 Start.s、NAND 讀寫(xiě)程序、USB 通信程序、相應(yīng)的 IO 口配置等開(kāi)發(fā)板上的資源,這里發(fā)分享u-boot
    發(fā)表于 11-17 15:54 ?2次下載

    u-boot簡(jiǎn)介

    U-Boot,全稱(chēng) Universal Boot Loader,是遵循GPL條款的開(kāi)放源碼項(xiàng)目。U-Boot的作用是系統(tǒng)引導(dǎo)。U-Boot
    發(fā)表于 10-14 11:17 ?4026次閱讀

    fireflyAIO-3288J主板U-Boot使用簡(jiǎn)介

    RK U-Boot 基于開(kāi)源的 U-Boot 進(jìn)行開(kāi)發(fā),工作模式有啟動(dòng)加載模式和下載模式。
    的頭像 發(fā)表于 12-20 10:06 ?2460次閱讀
    fireflyAIO-3288J主板<b class='flag-5'>U-Boot</b>使用簡(jiǎn)介

    fireflyAIO-3399J主板U-Boot使用介紹

    RK U-Boot 基于開(kāi)源的 U-Boot 進(jìn)行開(kāi)發(fā),工作模式有啟動(dòng)加載模式和下載模式。
    的頭像 發(fā)表于 12-24 10:00 ?2699次閱讀
    fireflyAIO-3399J主板<b class='flag-5'>U-Boot</b>使用介紹

    U-Boot架構(gòu)淺析

    導(dǎo)讀:嵌入式Linux系統(tǒng)搭建,bootloader是必不可少的一環(huán),而U-Boot已成嵌入式Linux事實(shí)標(biāo)準(zhǔn)。所以較為深入的分析U-Boot的設(shè)計(jì),對(duì)于更...
    發(fā)表于 02-07 11:56 ?7次下載
    <b class='flag-5'>U-Boot</b>架構(gòu)淺析

    Linux U-Boot開(kāi)發(fā)指南

    介紹 U-Boot 的編譯打包、基本配置、常用命令的使用、基本調(diào)試方法等, 為 U-BOOT 的移植及應(yīng)用開(kāi)發(fā)提供了基礎(chǔ)。
    的頭像 發(fā)表于 03-06 10:28 ?2713次閱讀
    Linux <b class='flag-5'>U-Boot</b>開(kāi)發(fā)指南

    u-boot armv8鏈接腳本

    u-boot armv8鏈接腳本 在進(jìn)行源碼分析之前,首先看看u-boot的鏈接腳本,通過(guò)鏈接腳本可以整體了解一個(gè)u-boot的組成,并且可以在啟動(dòng)分析中知道某些邏輯是在完成什么工作
    的頭像 發(fā)表于 12-07 11:19 ?1733次閱讀

    深入理解?RK3506 U-Boot?重定位:代碼原理

    ?U-Boot?代碼初始加載地址(通常是片內(nèi)?ROM?或?Flash)復(fù)制運(yùn)行效率更高的片外?RAM,再切換執(zhí)行環(huán)境?RAM?中運(yùn)行。 本文將結(jié)合?
    的頭像 發(fā)表于 11-28 07:05 ?1106次閱讀
    深入理解?RK3506 <b class='flag-5'>U-Boot</b>?重定位:<b class='flag-5'>從</b>代碼<b class='flag-5'>到</b>原理

    深度解析?RK?平臺(tái)?U-Boot?環(huán)境變量(env):原理、配置與實(shí)戰(zhàn)

    環(huán)境變量(env)是?U-Boot?的核心配置機(jī)制,無(wú)需重新編譯即可靈活調(diào)整啟動(dòng)參數(shù)。在?Rockchip(RK)平臺(tái)上,環(huán)境變量不僅繼承了?U-Boot?的通用特性,還針對(duì)?RK?芯
    的頭像 發(fā)表于 04-27 07:11 ?614次閱讀
    深度解析?RK?平臺(tái)?<b class='flag-5'>U-Boot</b>?環(huán)境變量(<b class='flag-5'>env</b>):原理、配置與實(shí)戰(zhàn)
    平山县| 南岸区| 弋阳县| 梧州市| 紫云| 广州市| 那曲县| 抚顺市| 贵定县| 朔州市| 广河县| 鸡西市| 湖南省| 垫江县| 宁晋县| 金门县| 乌鲁木齐市| 基隆市| 基隆市| 峨山| 伊通| 贵阳市| 斗六市| 岑巩县| 修武县| 临西县| 赫章县| 都昌县| 图们市| 井冈山市| 锦州市| 团风县| 霸州市| 绥阳县| 康平县| 沂南县| 舞阳县| 方正县| 台东县| 德江县| 蚌埠市|