新路程------imx6 uboot环境变量的初始化(1)
来源:互联网 发布:网络通讯员职责 编辑:程序博客网 时间:2024/06/06 03:55
今天追了一下uboot中环境变量的初始化
按照linux手册上的说法,环境变量定义在mx6q_sabresd.h中
我们用的是lvds则
#if defined(CONFIG_LVDS)
#define IPU_OUTPUT_MODE_LVDS
#define CONFIG_EXTRA_ENV_SETTINGS\
"netdev=eth0\0"\
"ethprime=FEC0\0"\
"uboot=u-boot.bin\0"\
"kernel=uImage\0"\
"nfsroot=/opt/eldk/arm\0"\
"bootargs_base=setenv bootargs console=ttymxc0,115200 video=mxcfb0:dev=ldb,LDB-WXGA,if=RGB24,bpp=32 ldb=sep0 video=mxcfb1:dev=hdmi,1920x1080M@60,if=RGB24,bpp=32 video=mxcfb2:off\0"\
"bootargs_nfs=setenv bootargs ${bootargs} root=/dev/nfs "\
"ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0"\
"bootcmd_net=run bootargs_base bootargs_nfs; "\
"tftpboot ${loadaddr} ${kernel}; bootm\0"\
"bootargs_mmc=setenv bootargs ${bootargs} ip=none " \
"root=/dev/mmcblk0p1 rootwait\0" \
"bootcmd_mmc=run bootargs_base bootargs_mmc; " \
"mmc dev 3; " \
"mmc read ${loadaddr} 0x800 0x2900; bootm\0"\
"bootcmd=run bootcmd_mmc\0"
也就是说修改这里的bootargs即可
在Env_common.c中的
uchar default_environment[] = {
#ifdef CONFIG_EXTRA_ENV_SETTINGS
CONFIG_EXTRA_ENV_SETTINGS
#endif
在set_default_env()里用到
而set_default_env()则是在env_relocate()里也就是第一次env为空时读取默认的,再后面的启动都是用已经存在的env了
首先是/lib_arm/board.c里的void start_armboot (void)
env_relocate ();
然后
void env_relocate (void)
{
env_ptr = (env_t *)malloc (CONFIG_ENV_SIZE);
env_relocate_spec ();
gd->env_addr = (ulong)&(env_ptr->data); //zhege gd结构体将会在之后充当全局的环境变量地址保存者
......
}
之后在Env_mmc.c里
env_relocate_spec ();
void env_relocate_spec(void)
{
#if !defined(ENV_IS_EMBEDDED)
printf("=========find_mmc_device");
struct mmc *mmc = find_mmc_device(mmc_env_devno);
if (init_mmc_for_env(mmc))
return;
if (read_env(mmc, CONFIG_ENV_SIZE, CONFIG_ENV_OFFSET, env_ptr))
return use_default(); //这里从emmc中获取到环境变量
if (crc32(0, env_ptr->data, ENV_SIZE) != env_ptr->crc)
return use_default();
gd->env_valid = 1;
#endif
}
接下来看
inline int read_env(struct mmc *mmc, unsigned long size,
unsigned long offset, const void *buffer)
{
uint blk_start, blk_cnt, n;
printf("=========read_env\n");
blk_start = ALIGN(offset, mmc->read_bl_len) / mmc->read_bl_len;
blk_cnt = ALIGN(size, mmc->read_bl_len) / mmc->read_bl_len;
n = mmc->block_dev.block_read(mmc_env_devno, blk_start, //从这个blk_start开始的地址中读取环境变量数据到buffer中
blk_cnt, (uchar *)buffer);
return (n == blk_cnt) ? 0 : -1;
}
到现在为止并没有发现emmc中的地址上的原始的环境变量是什么时候写进去的,需要进一步研究
- 新路程------imx6 uboot环境变量的初始化(1)
- 新路程------imx6 uboot环境变量的初始化(2)
- 新路程------imx6的uart小结(1)
- 新路程------imx6的sd 和emmc部分(1)
- 新路程------英飞凌imx6的lvds驱动
- 新路程------uboot环境变量没生效
- 新路程------imx6 网卡驱动(1)
- 新路程------imx6 uart和串口(1)
- 新路程------imx6 lvds ioctl
- 新路程------imx6关闭屏保
- 新路程------imx6 gpio设置
- 新路程------imx6 wtd摘要
- 新路程------imx6的模块编译的Makefile
- 新路程------imx6 spi cc1101遇到的坑
- 新路程----海思 uboot(1)
- 新路程------imx6测试网卡phy
- 新路程------imx6 uart和串口(4)
- 新路程------imx6 lvds屏设置fbinfo
- 遍历枚举类两种方式小结
- NPM小结
- linux 删除文件后,如何释放磁盘空间
- Win10系统设置IP无法保存解决方式
- Dubbo的使用简介
- 新路程------imx6 uboot环境变量的初始化(1)
- 微信端用的QQ浏览器, QQ浏览器X5内核问题汇总
- 文本框onkeyup事件的验证
- 23种设计模式之间的关系(提供思维导图随后分析)
- CSS的id、class、pseudo-class(伪类)
- intellij idea下输入法中英文切换的问题(mac os)
- 以太网完整协议(二)
- Java设计模式:桥接模式
- wordpress安装指南