getenv并不是一个给用户操作的命令,而是在uboot里面被调用的一个跟环境变量相关的函数。
相关的代码
经过前面学习过了printenv和setenv,对这个字符串解析的方法已经很熟悉了,如果到时候忘了的话可以先看看前面的分析思路再回来这里看。
getenv
函数
大概思路就是通过遍历default_environment[]数组,找到了这个环境变量之后,返回这个环境变量的第一个字符的地址,可以看到最后的一句
return ((char *)env_get_addr(val));
返回的就是一个指针,这个指针指向的就是需要找的环境变量的地址。
getenv_r
函数
这个函数比getenv
函数好,这两个函数就是不可重入和可重入的获取环境变量的版本。
因为getenv_r
函数把整个环境变量都返回到buf里面,相当于多了一份拷贝,不论怎么修改都不会影响在ddr里面存的原始环境变量,即可重入。
getenv_r比getenv多了下面这部分。
在while条件里面判断的同时还进行这把环境变量赋值到buff的操作,最终如果复制的长度是满足我需要取的长度之和,就会在最后添加个\0然后退出,并且返回到底复制的长度值n。
总结:这一篇可能写的比较简略,但是都是在前几篇的基础上进行写的,要熟悉环境变量的字符串解析方法,要知道环境变量在ddr里面是通过字符串数组的方式存放的等等。