I.MX6 Linux U-boot 环境变量解析

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: /********************************************************************************** * I.
/**********************************************************************************
 *                         I.MX6 Linux U-boot 环境变量解析
 * 声明:
 *   在分析完I.MX6 Manufacturing Tool V2 (MFGTool2)中一些内容之后,这里仅仅是
 * 为了验证其中的一些想法:
 *      1. 如何读取不在分区中的uImage,而是在emmc中1M地址上的uImage;
 *      2. U-boot的loadaddr是否是0x10800000,因为ucl2.xml每次都会跳到这个内存
 *        空间去执行uImage;
 *      
 *                                          2015-10-14 晴 深圳 南山平山村 曾剑锋
 *********************************************************************************/

/**
 * 参考文章:
 *   1. uboot mmc read/write命令用法:
 *      http://blog.csdn.net/kickxxx/article/details/7258890
 *   2. ERROR: can't get kernel image!问题的解决
 *      http://my.oschina.net/u/158589/blog/59608
 */

#define CONFIG_LOADADDR        0x10800000    /* loadaddr env var */
#define CONFIG_RD_LOADADDR    (CONFIG_LOADADDR + 0x300000)

#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\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"                \
        /**
         * bootargs_base: setenv bootargs console=ttymxc0,115200
         * bootargs_mmc: setenv bootargs console=ttymxc0,115200; setenv bootargs ${bootargs} ip=none root=/dev/mmcblk0p1 rootwait
         * bootargs_mmc: setenv bootargs console=ttymxc0,115200 ip=none root=/dev/mmcblk0p1 rootwait
         *
         * 另外如果将环境变量ip=dhcp,则在内核阶段就会需要分配ip,如果得不到ip,一直会卡在哪里,
         * 经过测试发现,即使插入网线,貌似也无法得到成功dhcp,参照对比了传输的命令参数,这里
         * 也就将ip=none,目前还未发现其他的类似问题。
         */
        "bootcmd_mmc=run bootargs_base bootargs_mmc; "   \
        /**
         * MX6SDL SABRESD U-Boot > mmc list
         * FSL_USDHC: 0
         * FSL_USDHC: 1
         * FSL_USDHC: 2     // 目前不知道为什么是mmc dev 2,因为设备是挂在sd4上的,需要另外跟代码
         */
        "mmc dev 2; "    \
        /**
         * 1. 使用范例:
         *    mmc read addr blk# cnt 
         *    mmc read 2 0x90000000 0x600 0x10
         *    把第二个mmc设备块偏移为0x600处开始,长度为16x512大小的数据,读出到内存0x90000000处
         * 2. 命令分析:
         *    mmc read 0x10800000 0x800 0x3000; bootm
         *    内核在emmc中的首地址:0x800*512 = 1048576 = 1M,照应了《I.MX6 Manufacturing Tool V2 (MFGTool2) ucl2.xml hacking》中uImage写入的地址。
         *    读取的大小:0x3000*512 = 6291456 = 6M,本来这里的值大约是4.1M,但是这里改大了,应为目前的内核有4.7M。
         */
        "mmc read ${loadaddr} 0x800 0x3000; bootm\0"    \
        "bootcmd=run bootcmd_mmc\0"                             \
        "test_kv=keyvalue\0"                             \

 

目录
相关文章
|
1月前
|
网络协议 Unix Linux
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
42 11
|
1月前
|
存储 运维 安全
深入解析操作系统控制台:阿里云Alibaba Cloud Linux(Alinux)的运维利器
本文将详细介绍阿里云的Alibaba Cloud Linux操作系统控制台的功能和优势。
85 6
|
1月前
|
Shell Linux
Linux-环境变量
通过合理设置和管理环境变量,可以显著提高工作效率和系统管理能力。理解并掌握这些基本操作,是每个Linux用户和管理员的必备技能。
41 13
|
3月前
|
缓存 并行计算 Linux
深入解析Linux操作系统的内核优化策略
本文旨在探讨Linux操作系统内核的优化策略,包括内核参数调整、内存管理、CPU调度以及文件系统性能提升等方面。通过对这些关键领域的分析,我们可以理解如何有效地提高Linux系统的性能和稳定性,从而为用户提供更加流畅和高效的计算体验。
107 17
|
2月前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
139 3
|
3月前
|
存储 运维 Linux
如何在 Linux 系统中使用 envsubst 命令替换环境变量?
`envsubst` 是 Linux 系统中用于替换文本中环境变量值的实用工具。本文分三部分介绍其工作原理、使用方法及实际应用,包括配置文件替换、脚本执行中环境变量替换和动态生成文件等场景,帮助用户高效利用 `envsubst` 进行开发和运维工作。
169 4
|
3月前
|
算法 Linux 定位技术
Linux内核中的进程调度算法解析####
【10月更文挑战第29天】 本文深入剖析了Linux操作系统的心脏——内核中至关重要的组成部分之一,即进程调度机制。不同于传统的摘要概述,我们将通过一段引人入胜的故事线来揭开进程调度算法的神秘面纱,展现其背后的精妙设计与复杂逻辑,让读者仿佛跟随一位虚拟的“进程侦探”,一步步探索Linux如何高效、公平地管理众多进程,确保系统资源的最优分配与利用。 ####
99 4
|
3月前
|
缓存 负载均衡 算法
Linux内核中的进程调度算法解析####
本文深入探讨了Linux操作系统核心组件之一——进程调度器,着重分析了其采用的CFS(完全公平调度器)算法。不同于传统摘要对研究背景、方法、结果和结论的概述,本文摘要将直接揭示CFS算法的核心优势及其在现代多核处理器环境下如何实现高效、公平的资源分配,同时简要提及该算法如何优化系统响应时间和吞吐量,为读者快速构建对Linux进程调度机制的认知框架。 ####
|
Linux 网络架构
u-boot引导友善之臂Linux内核
u-boot引导友善之臂Linux内核 作者:kangear                        Email:kangear@163.com                       Blog:kangear.blog.chinaunix.net 当我刚接触u-boot时,不想自产自用,先用人家移植好的。
883 0
|
17天前
|
Linux
Linux系统之whereis命令的基本使用
Linux系统之whereis命令的基本使用
54 23
Linux系统之whereis命令的基本使用