在嵌入式linux系统下修改uboot环境变量工具fwpri
作为用户来说,不可能每次启动都先在uboot命令行下通过setenv、saveenv来修改传入kernel的环境变量,因此uboot提供了fwprintenv工具来让用户在文件系统下来查看和修改环境变量,具体步骤如下:
环境:
uboot:uboot2019。1
crosstool:armlinuxgnueabihfgcc7。2一、编译fwprintenv
进入uboot根目录,查看toolsenv目录下的README的编译指南
根据自己平台进行编译:makeARCHarmCROSSCOMPILEarmlinuxgnueabihfenvtools
编译成功后在toolsenv目录下生成了fwprintenv,这个就是我们需要的工具。
将fwenv。config拷入目标板etc目录。
将fwprintenv拷入目标板bin目录。
二、配置fwenv。config
这里的配置一定要和系统的配置相同,即Deviceoffset,Envsize和Flashsectorsize应该分别对应于uboot源码目录中includeconfigsxxxx。h相关文件中的CONFIGENVOFFSET,CONFIGENVSIZE和CONFIGENVSECTSIZE三个宏定义。
makemenuconfigubootEnviroment()EnvironmentinaNANDdevice(0x100000)EnviromentOffset(0x20000)EnviromentSize(0x20000)EnviromentSectorSize
该配置主要是setenv和saveenv在整个NAND上的偏移和大小,没有分区概念。
kerneldevicetreepartitionnandBOOT{labelBOOT;reg0x0,0x120000;1MBOOT。bin128K(env)}partitionnandlinux{labelkernel;reg0x120000,0x500000;5M}partitionnanddevicetree{labeldevicetree;reg0x620000,0x20000;128K}partitionnandrootfs{labelrootfs;reg0x640000,0xa000000;160M}partitionnandbitstream{labelbitstream;reg0x640000,0xa000000;10M}catfwenv。configNANDexampleMTDdevicenameDeviceoffsetEnv。sizeFlashsectorsizeNumberofsectordevmtd00x1000000x200000x200001
内核设备树和fwenv。config相对应。这里我们只列出了NAND的例子,其他设备根据配置文件描述参考修改。
devmtd0包含了BOOT和env。Deviceoffset是指uboot环境变量在此分区上的偏移,不是指在整个nand上的偏移。三、fwprintenv的使用
建立软连接fwsetenv,用于配置和修改环境变量
lnsfwprintenvfwsetenv
查看help信息fwprintenvhUsage:fwprintenv〔OPTIONS〕。。。〔VARIABLE〕。。。PrintvariablesfromUBootenvironmenth,helpprintthishelp。v,versiondisplayversionc,configconfigurationfile,default:etcfwenv。confign,noheaderdonotrepeatvariablenameinoutputl,locklocknode,default:varlockfwsetenvhUsage:fwsetenv〔OPTIONS〕。。。〔VARIABLE〕。。。ModifyvariablesinUBootenvironmenth,helpprintthishelp。v,versiondisplayversionc,configconfigurationfile,default:etcfwenv。configl,locklocknode,default:varlocks,scriptbatchmodetominimizewritesExamples:fwsetenvfoobarsetvariablefooequalbarfwsetenvfooclearvariablefoofwsetenvscriptfilerunbatchscriptScriptSyntax:key〔space〕valuelinesstartingwitharetreatedascommentAvariablewithoutvaluewillbedeleted。Anynumberofspacesareallowedbetweenkeyandvalue。Spaceinsideofthevalueistreatedaspartofthevalueitself。ScriptExample:netdeveth0kerneladdr400000fooemptyemptyemptyemptyemptyemptybar
其实fwprintenv使用起来和uboot下的printenv和setenv指令是一模一样的。打印uboot环境变量:fwprintenv〔〔nname〕〔name。。。〕〕
如果不指定name,fwprintenv会打印出ENV区中的所有环境变量。
指向fwprintenv的fwsetenv,用来修改和设置环境变量。