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

本文涉及的产品
云解析DNS-重点域名监控,免费拨测 20万次(价值200元)
简介: /********************************************************************************** * 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"                             \

 

目录
相关文章
|
7月前
|
Unix Linux
对于Linux的进程概念以及进程状态的理解和解析
现在,我们已经了解了Linux进程的基础知识和进程状态的理解了。这就像我们理解了城市中行人的行走和行为模式!希望这个形象的例子能帮助我们更好地理解这个重要的概念,并在实际应用中发挥作用。
141 20
|
7月前
|
Ubuntu Linux
"unzip"命令解析:Linux下如何处理压缩文件。
总的来说,`unzip`命令是Linux系统下一款实用而方便的ZIP格式文件处理工具。本文通过简明扼要的方式,详细介绍了在各类Linux发行版上安装 `unzip`的方法,以及如何使用 `unzip`命令进行解压、查看和测试ZIP文件。希望本文章能为用户带来实际帮助,提高日常操作的效率。
922 12
|
8月前
|
Linux
Linux命令的基本格式解析
总的来说,Linux命令的基本格式就像一个食谱,它可以指导你如何使用你的计算机。通过学习和实践,你可以成为一个真正的“计算机厨师”,创造出各种“美味”的命令。
197 15
|
8月前
|
存储 Linux
Linux内核中的current机制解析
总的来说,current机制是Linux内核中进程管理的基础,它通过获取当前进程的task_struct结构的地址,可以方便地获取和修改进程的信息。这个机制在内核中的使用非常广泛,对于理解Linux内核的工作原理有着重要的意义。
363 11
|
9月前
|
Java Linux 应用服务中间件
在Rocky Linux 9上安装JDK并配置环境变量!
本教程介绍在Rocky Linux 9上安装JDK并配置环境变量的完整步骤。首先更新系统,清理旧版本JDK相关包及残留文件,确保环境干净。接着搜索并安装所需版本的JDK(如OpenJDK 17),验证安装是否成功。然后查找JDK安装路径,配置全局环境变量`JAVA_HOME`和`PATH`,最后验证环境变量设置。按照此流程操作,可顺利完成Java开发环境搭建,支持多版本切换(如JDK 8/11/17)。生产环境请谨慎操作,避免影响现有服务。
1440 21
|
9月前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
11月前
|
网络协议 Unix Linux
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
474 11
|
11月前
|
Shell Linux
Linux-环境变量
通过合理设置和管理环境变量,可以显著提高工作效率和系统管理能力。理解并掌握这些基本操作,是每个Linux用户和管理员的必备技能。
323 13
|
11月前
|
存储 运维 安全
深入解析操作系统控制台:阿里云Alibaba Cloud Linux(Alinux)的运维利器
本文将详细介绍阿里云的Alibaba Cloud Linux操作系统控制台的功能和优势。
329 6
|
9月前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
853 29