Linux内核驱动之Uboot(一)环境变量.doc_第1页
Linux内核驱动之Uboot(一)环境变量.doc_第2页
Linux内核驱动之Uboot(一)环境变量.doc_第3页
Linux内核驱动之Uboot(一)环境变量.doc_第4页
Linux内核驱动之Uboot(一)环境变量.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一 概述Uboot环境变量根据配置文件存在两种定义方式:外部环境变量和内部环境变量外部环境变量指的是将环境变量定义在外部介质上面比如nand flash,nor flash,mmc等等,具体定义在什么外部介质需要根据配置文件的宏CONFIG_ENV_IS_IN_XX来定义比如:#define CONFIG_ENV_IS_IN_MMC 1 :环境变量在MMC卡上面 #define CONFIG_ENV_IS_IN_NAND 1 :环境变量在nandflash上面#define CONFIG_ENV_IS_IN_FLASH 1:环境变量在nor flash上面#undef CONFIG_ENV_IS_NO_WHERE :废除内部环境变量的定义内部环境变量指的是定义在uboot镜像里边的环境变量,由于不使用外部环境变量必须在配置文件中间定义宏#define CONFIG_ENV_IS_NO_WHERE二 环境变量的类型和用途 Uboot环境变量大概包括四种类型的变量 (1) 网络方面的环境变量 比如 serverip ipaddr netmask gatewayip (2) bootcmd (3) bootargs (4) 杂项类型的 比如bootdelay ,baudrate,stdin,stdout1 网络类型的环境变量此方面的环境变量具体包括如下几种serverip 服务器端的ip地址ipaddr 板卡自己的ip地址netmask 网络掩码gatewayip 网关ethaddr 以太网的mac地址网络类型的环境变量主要是为tftp下载文件,挂载nfs根文件系统等网络行为做准备的下面的指令将网络参数都设置好setenv gatewayip ;setenv netmask ;setenv ipaddr ;setenv serverip ;saveenv2 bootcmdbootcmd是uboot启动完之后自动执行的命令(延时3秒后执行),bootcmd最重要的任务是加载内核到DDR上去,当然内核可能来自不同的介质包括nand ,mmc,网络等等,所以也存在不同类型的bootcmd命令下面介绍几种常用的.nand 中加载内核setenv bootcmd nboot 0x81000000 nand0 0x580000;bootm 0x81000000;saveenv;mmc卡加载内核setenv bootcmd mmc rescan 0;fatload mmc 0 0x81000000 uImage;bootm 0x81000000;saveenv;tftp网络加载内核setenv bootcmd tftpboot 0x81000000 08:uImage;bootm0x81000000;saveenv;上面的都是较为简单的bootcmd命令都是从相应的的介质中间读取内核到DDR上,然后bootm(bootm就是cpu跳转到这个地址执行代码),对于上述bootcmd命令必须有bootargs环境变量的配合,这样内核起来之后能够正确挂载文件系统同时获得来自uboot传给内核的参数较为复杂的如下setenv bootcmd mmc rescan 0;fatload mmc 0 0x80900000 boot.scr;source 0x80900000;saveenv或者是如下setenv bootcmd tftpboot 0x80900000 1:boot.scr;source 0x80900000;saveenv上述bootcmd命令使用的是脚本方式,也就是说从外部介质中间读入boot.scr的uboot脚本,然后uboot解析该脚本.由于是执行的脚本,其中可以嵌入较多的命令,可以进行较多的操作包括加载内核,设置bootargs环境变量对于使用脚本的bootcmd,我们去设置bootargs可能会不起作用,因为uboot脚本中可能也存在设置bootargs的命令,这样就会替换我们自己设置的bootargs假如不想要使用boot.scr也可以使用上面的bootcmd来代替。总的来说bootcmd是告诉uboot该从哪里加载内核并从哪里启动,每一个bootcmd都是一个可以执行的命令比如mmc rescan 0;fatload mmc 0 0x81000000 uImage;bootm 0x81000000可以使用上述方法直接启动内核再比如mmc rescan 0;fatload mmc 0 0x80900000 boot.scr;source 0x80900000可以使用上述方法做系统还原,只要在boot.scr中间放一些烧写内核,uboot的命令即可3 bootargs bootargs环境变量实质是uboot传给内核的参数,包括调试终端,内存信息,内核起来之后的ip地址,其中最重要的应该是内核将要挂载的根文件系统信息bootargs包括如下参数mem : Linux内核管理的内存大小console : 调试终端115200n8 : 上述调试终端的波特率,8bit数据init : 系统起来之后运行的第一个脚本比如init=/sbin/initinitrd/noinitrd : 是否使用了ramdisk启动系统,没有的话是noinitrdroot : 根文件系统的设备文件比如root=/dev/mtdblock0rw/ro : 配合root使用的-根文件系统读写属性rootfstype : 配和root使用的-根文件系统的类型比如yaffs2,ubifs等等ip : linux内核起来之后的网络参数设置可以设置成ip=dhcp自动获取也可以设成是固定ip比如ip=$ipaddr:$serverip:$gatewayip:$netmask:eth0:off 使用固定ip上面的顺序必须对,不然内核起不来pcie_mem : 在系统引导的时候获得专用缓冲区,这是获得大量连续内存页面的唯一方法,比如这样使用pcie_mem=8M表示linux系统为pcie预留8M内存空间,此部分空间不属于linux内核的管理范围看下面的bootargssetenv bootargs mem=256M console=ttyO0,115200n8 root=/dev/nfs rw nfsroot=1:/export/rootfs_rfs,nolock ip=dhcp pcie_mem=20M ;saveenv该bootargs表示Linux内核管理的内存是256MB,调试终端是串口0,根文件系统是nfs,挂载的服务器ip地址是1,该文件系统可读写内核起来之后ip地址是自动获取,内核预留20M给pcie再看看下面几条bootargssetenv bootargs mem=256M console=ttyO0,115200n8 ubi.mtd=4,2048 root=ubi0:rootfs rootwait rootfstype=ubifs rw ip=dhcp pcie_mem=20M;saveenv与上面不同的是内核起来后加载的根文件系统是ubifs在比如setenv bootargs mem=256M console=ttyO0,115200n8 root=/dev/mtd

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论