Ⅰ uboot 命令具体是如何实现的,我看了一部分,现在卡住了;求高人指点; 我的QQ:436035433
那u-boot的那些个关于命令的结构体到底从何而来呢?在include/command.h里定义了这样的宏:
#define Struct_Section __attribute__ ((unused,section (".u_boot_cmd")))
... ... ... ...
#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \
cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage, help}
第
二个宏展开便定义了悔卜一个代表u-boot命令的结构体。也就是说定义了一个变量,并赋与其初值。关键在于Struc_Section,它被展开后成了
__attribute__
((unused,section(".u_boot_cmd")))。也就是说,每个变量(占内存!)都放在.u_boot_cmd段里。它们还被加上
了unused的属性,应该是为了平息编译器的警告。确实,没有任何代码引用过它们!!如果这些变量被放在一个显示声明的数组里,那么,每增加一个命令都
得去更改数组的定义。然后,通过这种方法,各人想要增加新的命令时,只需用上面的这个宏即可。这些表示命令的结构体被统一放在.u_boot_cmd段
里,链接脚本里又有:
__u_boot_cmd_start = .;
.u_boot_cmd : { *(.u_boot_cmd) }
__u_boot_cmd_end = .;
即,
把所有待链接文件里u_boot_cmd段合并在一起生成一个大的.u_boot_cmd段,并且用__u_boot_cmd_start与
__u_boot_cmd_end两个符号标识这块内存的首尾边界。这样,不用大家去修改某一文件的代码(为了改变数组的定义),而是像数据库一样,各个神祥
提供自己的信息。借由编译器与链接器生成这个“数据库”,操作数据时对“数据库”进行查询即可。正是一个月前看《计算机程序构造与解释》时看到的
“Data Direct”(好像是这么说)。在Grub及内核里也用了这样机制。碧瞎穗
参考:http://blog.163.com/lijiji_1515/blog/static/12687744620114522449739/
Ⅱ uboot的作用和功能
uboot的作用类似个人电脑里面的BIOS,主要完成硬件初始化,设置启动参数,引导操作系统等功能。
Ⅲ BIOS里面有main , advanced , H/W monitor , boot , Secuity,exit分别是什么意思
AWARD BIOS设置详解
AWARD公司是世界最大的BIOS生产厂商之一,其产品也被广泛使用。但由于AWARD BIOS里面的信息都是基于英文且需要用户对相关专业知识的理解相对深入,使得普通用户设置起来感到困难很大。而如果这些设置不当的话,将会影响整台电脑的性能设置是不能正常使用,所以一份详细的设置说明是必要的。下面就介绍一下AWARD BIOS中的有关设置选项的含义和设置方法。
【Standard CMOS Setup】(标准设定)
在本菜单中,用户可以修改日期、时间、第一主IDE设备(硬盘)和IDE设备(硬盘或CD-ROM)、第二个主IDE设备(硬盘或CD-ROM)和从IDE设备(硬盘或CD-ROM)、软驱A与B、显示系统的类型、什么出错状态要导致系统启动暂停等。主要说明如下:
(1) 用户可以在Type(类型)和Mode(模式)项设置为Auto,使BIOS自动检测硬盘。也可以在主菜单中的【IDE HDD Auto Detection】操作来设置。用户还可以使用User选项,手动设定硬盘的参数。您必须输入柱面数(Cyls),磁头数(Heads),写预补偿(Precomp),磁头着陆区(Landz),每柱面扇区数(Sectorxs),工作模式(Mode,内容见下)等几种参数。硬盘大小在上述参数设定后自动产生。
硬盘工作模式(MODE)的三种选项:
NORMAL模式:传统的标准模式,支持硬盘容量最高至528MB。
LARGE模式:当硬盘容量超过528MB,而硬盘或操作系统不支持LBA模式时,可采用此选项。
LBA 模式(Logical Block Addressing Mode):适用于硬盘容量超过528M且支持"逻辑区块地址"(LBA)功能(一般都使用此项)
(2) 显示类型可选EGA/VGA(EGA、VGA、SEGA、SVGA、PGA显示适配卡选用)、CGA40(CGA显示卡,40列方式)、CGA80(CGA显示卡,80列方式)、MONO(单色显示方式,包括高分辨率单显卡)等四种,用户应根据情况正确选用。
(3) 暂停的出错状态选项有:
1. AllErrors:BIOS检测到任何错误,系统启动均暂停并且给出出错提示。
2. NoErrors:BIOS检测到任何错误都不使系统启动暂停。
3. All ,But Keyboard:除键盘错误外,BIOS检测到任何其它桐森错误,均暂停系统启动并且局衫亩给出出错提示。
4. All ,But Disk/Key:除键盘、磁盘错误外,BIOS检测到任何其它错误,均暂停系统启动并且给出出错提示。
【BIOS Features Setup】(功能设定)
该项用来设置系统配置选项清单,其中有些选项由主板本身设计确定,有些选项用户可以进行修改设定,以改善系统的性能。主要说明如下:
(1) VirusWarning:病毒防御警告(缺省值为Disable),此功能可防止硬盘的关键磁区及分区被更改,任何试图写入该区的操作将会导致系统死机并形式警告信息。
注意:当安装新的操作系统(如Win95)时,请先取消(disable)此功能,以免因冲突而无法顺利安装。
(2) CPU Internal Cache:缺省为Enable(开启),它允许系统使用CPU内部的第一级Cache。486、586档次的CPU内部一般都带有Cache,除非塌族当该项设为开启时系统工作不正常,此项一般不要轻易改动。该项若置为Disable(关闭),将会降低系统的性能。
(3) External Cache:缺省设为Enable,它用来控制主板上的第二级(L2)Cache。根据主板上是否带有Cache,选择该项的设置。
(4) Quick Power On Self Test:缺省设置为Enable,该项主要功能为加速系统上电自测过程,它将跳过一些自测试。使引导过程加快。
(5) IDE HDD Block Mode Sectors:IDE硬盘设定, 预设值为HDDMAX。新式IDE硬盘大多支持一次传输多个磁块的功能。启用(enable)本功能可加快硬盘存取速度。选项有HDDMAX、Disabled、2、4、8、16、及32。
(6) HDD Sequence SCSI/IDE First:IDE/SCSI硬盘开机优先顺序设定,缺省值为IDE。当同时安装SCSI及IDE硬盘时,本选项功能可用来选择以SCSI或IDE硬盘作为开机硬盘。
(7) BootSequence:选择驱动器启动顺序。一般有以下几种启动顺序:
[A,CD-ROM,C]、[CD-ROM,C,A]、[D,A]、[E,A]、[F,A]、[C only]、[A,C]、[C,A]
请注意,某些老式主板并不支持由CD-ROM启动,而现在的新主板增加了更多的启动顺序如LS120,ZIP等。
(8) Swap Floppy Drive:(交换软盘驱动器)缺省设定为Disable。当它Disable时,BIOS把软驱连线扭接端子所接的软盘驱动器当作第一驱动器。当它开启时,BIOS将把软驱连线对接端子所接的软盘驱动器当作第一驱动器,即在DOS下A盘当作B盘用,B盘当作A盘用。
(9) BootUp Floppy Seek:当Enable时,机器启动时BIOS将对软驱进行寻道操作。
(10) Floppy Disk Access Contol:当该项选在R/W状态时,软驱可以读和写,其它状态只能读。
(11) BootUp Numlock Strtus:该选项用来设置小键盘的缺省状态。当设置为ON时,系统启动后,小键盘的缺省为数字状态;设为OFF时,系统启动后,小键盘的状态为箭头状态。
(12) BootUp System Speed:该选项用来确定系统启动时的速度为HIGH还是LOW。
(13) Typematic Rate Setting:该项可选Enable和Disable。当置为Enable时,如果按下键盘上的某个键不放,机器按您重复按下该键对待(重复按键速度可在下面的选项中设置);当置为Disable时,如果按下键盘上的某个键不放,机器按键入该键一次对待。
(14) Typematic Rate:如果上面的选项置为Enable,那么可以用此选项设定当您按下键盘上的某个键一秒钟,那么相当于按该键6次。该项可选6、8、10、12、15、20、24、30。
(15) Typematic Delay:如果(13)选项置为Enable,那么可以用此选项设定按下某一个键时,延迟多长时间后开始视为重复键入该键。该项可选250、500、750、1000,单位为毫秒。
(16) Security Option:选择System时,每次开机启动时都会提示您输入密码,选择Setup时,仅在进入CMOS Setup时会提示您输入密码(该设置仅在设置了密码的情况下有效)。
(17) PS/2Mouse Function Control:当该项设为Enable,机器提供对于PS/2类型鼠标的支持。否则,选Disable。
(18) Assign PCI IRQ For VGA:选Enable时,机器将自动设定PCI显示卡的IRQ到系统的DRAM中,以提高显示速度和改善系统的性能。
(19) PCI/VGA Palett Snoop:该项用来设置PCI/VGA卡能否与MPEGISA/VESAVGA卡一起用。当PCI/VGA卡与MPEGISA/VESAVGA卡一起用时,该项应设为Enable,否则,设为Disable。
(20) OS/2 Select For DRAM>64MB:该项允许您在OS/2操作系统中,使用64M以上的内存。该项可选为NON-OS2,OS2。
(21) System BIOS Shadow:该选项的缺省设置默认为Enable,当它开启时,系统BIOS将拷贝到系统Dram中,以提高系统的运行速度和改善系统的性能。
(22) Video BIOS Shadow:缺省设定为开启(Enable),当它开启时,显示卡的BIOS将拷贝到系统DRAM中,以提高显示速度和改善系统的性能。
(23) C8000-CBFFF Shadow/DFFFF Shadow:这些内存区域用来作为其他扩充卡的ROM映射区,一般都设定为禁止(Disable)。如果有某一扩充卡ROM需要映射,则用户应搞清楚该ROM将映射地址和范围,可以将上述的几个内存区域都置为Enable;但这样将造成内存空间的浪费。因为映射区的地址空间将占用系统的640K~1024K之间的某一段内存。
【Chipset Features Setup】(芯片组功能设定)
该项用来设置系统板上芯片的特性。它有以下选项:
注意:此菜单下的选项会因不同主板而不同,如果你不太了解它们的功能,最好设置为缺省值。
(1) ISA Bus Clockfrequency(PCICLK/4)ISA:传输速率率设定,设定值有:PCICLK/3;PCICLK/4。
(2) Auto Configuration:自动状态设定,当设定为Enabled时BIOS依最佳状况状态设定,此时BIOS会自动设定DRAMTiming,所以会有无法修改DRAM的细项时序,我们强烈建议选用Enabled,因为任意改变DRAM的时序可能造成系统不稳或不开机。
(3) Aggressive Mode:高级模式设定,当您想获得较好的效能时,而且系统在非常稳定状态下,可以尝试Enabled此项功能以增加系统效能,不过必须使用较快速DRAM(60ns以下)。
(4) VIDEO BIOS Cacheable:(视频快取功能,缺省值为Disable),为Enable时,启用快取功能以加快显示速度;为Disable时,取消此功能。
(5) Memory Holeat Address:(缺省值为None),一些ISA卡会要求使用14-16MB或15-16MB的内存地址空间,若选取14MB-16MB或15MB-16MB,则系统将无法使用这部份的内存空间。您可选取None来取消此功能。
(6) OnboardFDC SwapA:B:(A,B盘互换,缺省值为NoSwap),当启用(enable)本项功能时则A,B盘互换 。亦即原先A盘被指定成B盘,B盘被指定为A盘。如此一来,您就不需打开机箱互换排线了。
(7) OnboardSerialPort1:(缺省值为3F8H/IRQ4),设定主机板上串口1的位址及IRQ,选项有:3F8H/IRO4、2F8H/IRQ3、3E8H/IRQ4、2E8H/IRQ10、Disable。
(8) OnboardSerialPort2:(缺省值为2F8H/IRQ3),设定主机板上串口2的位址及IRQ,选项有:3F8H/IRQ4、2F8H/IRQ8、3E8H/IRQ4、2E8H/IRQ10、Disable。
(9) OnboardParallelPort:(缺省值为378H/IRQ7),设定主机板上并口的位址及IRQ。
(10) Parallel PortMode:(并口模式,缺省值为ECP+EPP),并口的操作模式有下列选项:
Normal:一般速度单向运行。
EPP:最高速度双向运行。
ECP:超高速双自运行。
ECP+EPP:ECP与EPP二种模式并用。
(11) ECP DMA Select:(ECP DMA通道选择,缺省值为3),若在ECP模式下操作时,则提供DMA通道选择,有1,3,Disable三种设定。
(12) UART2 UseInfrared:(缺省值为Disable),本项功能用来支持红外线(IR)传输功能。为Enable时,则设定第二序列UART支持红外线传输功能。设为Disable时,则设定第二序列UART支持COM2。
注意:如果没有红外线设备,不要Enable此项,否则会造成不必要的麻烦,例如系统不识别MODEM。
(13) Onboard PCI IDE Enable:(主机板IDE通道设置,缺省值为Both),用来启用内建IDE通道。选项有:
Primary IDE Channel:仅启动主IDE通道(即第一IDE通道)。
Secondary IDE Channel:仅启动辅IDE通道(即第二IDE通道)。
Both:第一、二IDE通道均启用。
Disable:禁用所有IDE通道。
(14) IDE PIO Mode:这个设置取决于系统硬盘的速度,包括AUTO,0,1,2,3,4五个选项,Mode4硬盘传输速率大于是16.6MB/秒,其它模式的小于这个速率。请不要选择超过硬盘速率的模式,这样会丢失数据。
(15) IDE UDMA(UltraDMA) Mode:Intel430TX以后的芯片提供了Ultra DMA Mode,它可以把传输速率提高到一个新的水准。
(16) IDE0Master/SlaveMode,IDE1Master/SlaveMode:(硬盘时序模式设定,缺省值为Auto),设为Auto时,系统会自动检查四个IDE 装置的时序模式以确保以最佳速度运行。也可以自行设定时序模式为(0,1,2,3,4)。
【Power Management Setup】(节电功能设定)
该项为电源管理设定,用来控制主板上的"绿色"功能。该功能定时关闭视频显示和硬盘驱动器以实现节能的效果。具体来说,实现节电的模式有四种:
1、Doze模式:当设定时间一到,CPU时钟变慢,其他设备照常运作;
2、Standby模式:当设定时间一到,硬盘和显示将停止工作,其他设备照常运作;
3、Suspend模式:当设定时间一到,除CPU以外的所有设备都将停止工作;
4、HDD Power Down模式:当设定时间一到,硬盘停止工作,其他设备照常运作。
该菜单项下面的可供选择的内容有以下几种:
(1) Power Management:节电模式的主控项,有四种设定:
Max Saving:(最大节电)在一个较短的系统不活动的周期(Doze、Standby、Suspend、HDDPowerDown四种模式的缺省值均为1分钟)以后,使系统进入节电模式,这种模式节电最大。
MIN Saving:(最小节电)在一段较长的系统不活动的周期在这种情况下,(Doze,Standby,Suspend三种模式的缺省值均为1小时,HDD Power Down模式的缺省值为15分钟)后,使系统进入节电模式。
Disable:关闭节电功能,是缺省设置。
User Defined:(用户定义)允许用户根据自己的需要设定节电的模式。
(2) VideoOFFOption:(显示器关闭设定,缺省值为Susp, Stby->Off),本选项用来设定在何种模式下关闭显示器,选项如下:
1. Susp,Stby->Off:只在待机(Standby)或暂停(Suspend)的省电模式下才关闭显示器。
2. Suspend->Off:只在暂停(Suspend) 模式下才关闭显示器。
3. Alwayson:在任何模式下均不关,显示器照常显示。
4. Allmodes->Off:在任何省电模式下均关闭显示器。
(3) Video Off Method:(视频关闭)该选项可设为V/HSync+Blank、Dpms、BlankScreen三种,具体如下:
1. V/HSync+Blank:将关闭显示卡水平与垂直同步信号的输出端口,向视频缓冲区写入空白信号。
2.DPMS(显示电源管理系统):设定允许BIOS在显示卡有节电功能时,对显示卡进行节能信息的初始化。只有显示卡支持绿色功能时,用户才能使用这些设定。如果没有绿色功能,则应将该行设定为Blank Screen(关掉屏幕)。
3. Blank Screen(关掉屏幕):当管理关掉显示器屏幕时,缺省设定能通过关闭显示器的垂直和水平扫描以节约更多的电能。没有绿色功能的显示器,缺省设定只能关掉屏幕而不能终止CRT的扫描。
(4) PM Timers(电源管理记时器):下面的几项分别表示对电源管理超时设置的控制。Doze,StandBy和Suspend Mode项设置分别为该种模式激活前的机器闲置时间,在MAX Saving模式,它每次在一分钟后激活。在MIN Saving模式,它在一小时后激活。
(5) Power Down、Resume Events(进入节电模式和从节电状态中唤醒的事件):该项下面所列述的事件可以将硬盘设在最低耗电模式,工作、等待和悬挂系统等非活动模式中若有事件发生,如敲任何键或IRQ唤醒、鼠标动作、MODEM振铃时,系统自动从电源节电模式下恢复过来。
(6) Soft-OffByPwr-Bttn:ATX机箱的设计不同于传统机箱,按下开关4秒以上才能关闭系统;选择instant-off方式将使ATX机器等同于传统机器,而若置为delay4sec方式,那么您按住开关的时间不足4秒时将使系统进入SuspendMode。
【PNP/PCI Configuration Setup】(即插即用与PCI状态设定)
该菜单项用来设置即插即用设备和PCI设备的有关属性。
(1) PNP OS Installed:如果软件系统支持Plug-Play,如Win95,可以设置为YES。
(2) Resources ControlledBy:AWARD BIOS支持"即插即用"功能,可以检测到全部支持"即插即用"的设备,这种功能是为类似Win95之类操作系统所设计,可以设置Auto(自动)或Manual(手动)。
(3) Resources Configuration Data:缺省值是Disabled,如果选择Enabled,每次开机时,Extend System Configuration Data(扩展系统设置数据)都会重新设置。
(4) IRQ 3/4/5/7/9/10/11/12/14/15,Assingned To:在缺省状态下,所有的资源除了IRQ3/4,都设计为被PCI设备占用,如果某些ISA卡要占用某资源可以手动设置。
【Load BIOS Defaults】(载入BIOS缺省值)
当系统安装后不太稳定,则可选用本功能。此时系统将会取消一些高效能的操作模式设定,而处在最保守状态下。因此使用它容易找到主机板的安全值和除去主板的错误。当选择本项时,主画面会出现下列信息:
Load BIOS Defaults(Y/N)?
键入Y并按Enter即可执行本项功能。
注意:本项功能不会影响CMOS内存储的"标准设定"(即【Standard CMOS Setup】项的设置值)
【Load Setup Defaults】(载入SETUP缺省值)
此为BIOS出厂的设定值。此时系统会以最佳化的模式运行。选择此功能时,主画面会出现下列信息:
Load SETUP Defaults(Y/N)?
键入Y并按Enter即可执行本项功能。
【Supervisor Password And User Password Setup】(管理者与使用者密码设定)
User Passowrd Setting功能为设定密码。如果要设定此密码,首先应输入当前密码,确定密码后按y,屏幕自动回到主画面。输入User Passowrd可以使用系统,但不能修改CMOS的内容。输入SupervisorPassword可以输入、修改CMOS BIOS的值,Supervisor Password是为了防止他人擅自修改CMOS的内容而设置的。用户如果使用IDE硬盘驱动器,该项功能可以自动读出硬盘参数,并将它们自动记入标准CMOS设定中,它最多可以读出四个IDE硬盘的参数。
【Saveand Exit Setup】将设定值储存后,离开设置主画面。
【Exit Without Saving】不储存设定值,直接离开设置主画面。
以上介绍了Award BIOS Setup的常用选项的含义及设置办法。由于每种版本的BIOS具体设置都有所不同,所以上面列举的设置项目,可能少于或多于你系统内的项目,但一般情况下,各种设置都大同小异,触类旁通。另外,由于AMI BIOS的设置同AWARD BIOS基本相同,这里就一一介绍。
免跳线CPU在BIOS中的设置
--------------------------------------------------------------------------------
目前有不少免跳线主板采用BIOS程序设置CPU工作状态,这无疑是超频族的福音,因为它免去了许多麻烦,给用户带来了方便。如升技BH6、微星6119 W(中文BIOS)等主板,只要将CPU插好,启动计算机,进入BIOS设置程序,就可对CPU参数进行设置,设置的内容包括CPU工作电压、CPU外频和CPU内频等。下面就介绍具体的设置:
(1) CPU Operating Speed:CPU的内核工作速度设定。选项包括:User Define(用户定义)、233(66×3.5)、266(66×4)、300(66×4.5)、333(66×5)、350(100×3.5)、400(100×4)等选项。选择User Define后,CPU外频和倍频由用户在下面的(3)、(4)中自行设置。另外,最新的微星6119(W)的BIOS设置中的CPU Plug & Play选项,可自动检测CPU、设置其工作状态。
(2) Turbo Frequency:CPU外频加速模式设定。当Enable时,CPU的频率被提升2.5%,此项目仅在External Clock(外频)支持Turbo模式时方出现(目前只对100MHz提供支持)。
(3) External Clock:CPU外频设定,包括66、75、83、100、112、124、133MHz等选项。
(4) Multiplier Factor:CPU倍频设定,有2.0、2.5、3.0、3.5、4.0、4.5、5.0、5.5倍等选项
(5) SEL100/66# Signal:Signal 100/66信号设定,包括High"(高)和"Low"(低)两个选项。当设置为"High"时,CPU外频为100MHz,设置为"Low"时为66MHz。
注意:有些PⅡ350和PⅡ400运行在100MHz外频时,倍频分别被锁定于3.5和4.0倍频,SEL100/66#信号设置为"Low",可解除对倍频的锁定。
(6) AGPCLK/CPUCLK:AGP时钟设定。缺省值为2/3,此时AGP工作频率是CPU外频的2/3,如改设为1/1,则AGP工作频率等于CPU外频。
(7) Speed Error Hold:速度错误处理设定。包括"Disable"和"Enable"选项。默认 为"Disable"。如设置为"Enable"则相当于禁止超频,由系统自动检测CPU,发现设置值与CPU标称值不符时系统拒绝工作。
(8) CPU Power Supply:CPU电压设定。包括"CPU Default"(默认)和"User Define"(用户定义)选项。选择"User Define"时,需在(9)中设置CPU内核电压。
(9) Core Voltage :CPU内核电压设定。包括1.30V至3.2V间的电压选项。选择项中对电压有一定限制,对2.8V 的 Pentium Ⅱ,电压最高可调至3.2V;对2.0V的Pentium Ⅱ,最高只可调至2.3V。
Ⅳ 大哥大姐你们好,我想知道安卓rom里boot.img是系统内核吗我想超频,手机是中兴天机,改内核
boot应该是是引导文件
Ⅳ uboot的protect指令使用
Printenv 打印环境变量。
uboot> printenv
baudrate=115200
ipaddr=192.168.0.111
ethaddr=32:34:46:78:9A:DC
serverip=192.168.0.100
Environment size: 80/8188 bytes
2. Setenv 设置新的变量
如:
uboot> setenv myboard AT91RM9200DK
uboot> saveenv
uboot> printenv
baudrate=115200
ipaddr=192.168.0.111
ethaddr=32:34:46:78:9A:DC
serverip=192.168.0.100
myboard=AT91RM9200DK
Environment size: 102/8188 bytes
又如想重置启动参数bootargs:
uboot> setenv bootargs 'noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0'
uboot>圆数 saveenv
3. saveenv 保存变量 命令将当前定义的所有的变量及其值存入 flash 中。 用来存储变量及橘源首其值的空间只有 8k 字节,应不要超过。 (如上例,每次与setenv配合使用)
4. loadb 通过串口 Kermit 协议下载二进制数据。
5. tftp 通过网络下载程序,需要先设置好网络配置
简单配置:
uboot> setenv ethaddr 32:34:46:78:9A:DC
uboot> setenv ipaddr 192.168.0.111
uboot> setenv serverip 192.168.0.100
//下载 bin 文件到地址 0x20000000 处。
uboot> tftp 20000000 application.bin (application.bin 应位于 tftp 服务程序的目录)
uboot> tftp 32000000 zImage.bin
把 server (IP=环境变量中设置的 serverip) 中 FTP配置的默认目录下的 zImage.bin通过 TFTP 读入到物 理内存 32000000 处。
6. md 显示内存区的内容。
7. mm 修改内存,地址自动递增。
8. nm 修改内存,地址不自动递增。
9. mw 用模型填充内存
uboot>mw 32000000 ff 10000(把内存 0x32000000 开始的 0x10000 字节设为 0xFF)
10. cp 拷贝一块内存到另一块
11. cmp 比较两块内存区
这些内存操作命令后都可加一个后缀表示操作数据的大小, 比如 cp.b 表示按字节拷贝。 Protect 写保护操作 protect on 1:0-3(就是对第一块 FLASH 的 0-3 扇区进行保护) protect off 1:0-3 取消写保护 Erase 擦除扇区。
12. nfs
uboot>nfs 32000000 192.168.0.2:zImage.bin 把 192.168.0.2(LINUX 的 NFS 文件系统)中的 NFS 文件系统中的 aa.txt 读入内存 0x32000000 处 (192.168.0.2是配置的NFS服务器地址,且要复制的文件必须在NFS配置的服务目录下)
uboot 命令使用教程(uboot参数设置)的更多相关文章
U-Boot命令大全(功能参数及用法)
U-Boot上电启动后,按任意键可以退出自动启动状态,进入命令行. U-Boot 2010.03 (Sep 25 2011 - 16:18:50) DRAM: 64 MB Flash: ...
uboot命令及内核启动参数
修改:mw [内存地址] [值] [长度] 例如:mw 0x02000000 0 128 表示修改地址为0x02000000~0x02000000+128的内存值为0. 显示:md [内存地址 ...
PM2用法简介【命令行启动 --env 参数设置使用问题】
环境切换裂型 正式开发中分为不同的环境(开发环境.测试环境.生产环境),我们需要根据不同的情景来切换各种环境 pm2通过在配置文件中通过env_xx来声明不同环境的配置,然后在启动应用时,通过--env参 ...
u-boot 环境变量参数设置
今天本来是烧写内核,结果一不小心把uboot也整不能用了,无奈之下只好重新烧个uboot,等都弄好以后,发现系统还是启动不了,原来是启动参数设置不对,于是找到了这篇文章,//是我添加的内容. 原文地址 ...
Uboot 命令行 介绍
背景 基本上,本文转载自:<ARM板移植Linux系统启动(五)Uboot命令行> 上次说到uboot的启动方式,最后会使用autoboot(自主模式)尝试引导kernel,如果失败或者被 ...
uboot命令简介
uboot下的命令行 1.典型嵌入式linux系统启动过程: 嵌入式系统上电后先执行uboot.然后uboot负责初始化DDR,初始化Flash,然后将OS从Flash中读取到DDR中,然后启动OS( ...
烧写ARM开发板系统教程----->uboot 、内核以及文件系统
一.sd启动 将u-boot镜像写入SD卡,将SD卡通过读卡器接上电脑(或直接插入笔记本卡槽),通过"cat /proc/partitions"找出SD卡对应的设备,我的设备节点是 ...
1.ok6410移植bootloader,移植u-boot,学习u-boot命令
ok6410移植u-boot 既然是移植u-boot当然首先需要u-boot源码,这里的u-boot代码是由国嵌提供的. 一.配置编译u-boot A. 解压 u-boot 压缩文件 B. 进入解压生 ...
转载 uboot 命令
1.bootm bootm [addr [arg ...]] - boot application image stored in memory passing arguments 'arg ...' ...
Ⅵ uboot如何启动内核
1.uboot启动内核的代码缩减如下:
Uboot 1.16/lib_arm/board.c中start_armboot()函数调用/common/main.c中main_loop()函数,在main_loop()中有uboot启动内核的代码:
s = getenv ("bootcmd");
debug ("### main_loop: bootcmd=\"%s\"\n", s ? s :"<UNDEFINED>");
if (bootdelay >= 0 && s && !abortboot (bootdelay))
{
run_command(s, 0);
}
2.假设bootcmd = nandread.jffs2 0x30007FC0 kernel; bootm 0x30007FC0
<1> nandread.jffs2 0x30007FC0 kernel
从nand读出内核:
从哪里读? :kernel分区
读到哪里去?:0x30007FC0
何为分区?
简单的说就是将nand划分为几个区域,一般如下:
bootloader->params->kernel->root
这些分区划分穗余在/include/configs/100ask24x0.h中写死的:
#define MTDPARTS_DEFAULT"mtdparts=nandflash0:256k@0(bootloader)," \
"128k(params)," \
"2m(kernel)," \
"-(root)"
进入uboot执行mtd ,可以查看已有分区:
# name 大小 在nand上的猜裤滚起始地址
0 bootloader 0x00040000 0x00000000
1 params 0x00020000 0x00040000
2 kernel 0x00200000 0x00060000
3 root 0xfda00000 0x00260000
上面的nand read.jffs2 0x30007FC0 kernel等价于:
nand read.jffs20x30007FC0 0x00060000 0x00200000
注:read.jffs2并不是指定特定的格式,仅表示不需要块/页对齐,所以kernel的分区大小可以随意定。纯岩
<2> bootm0x30007FC0
关键函数do_bootm()
flash上存的内核:uImage
uImage =头部+真正的内核
头部的定义如下:
typedef struct image_header {
uint32_t ih_magic;
uint32_t ih_hcrc;
uint32_t ih_time;
uint32_t ih_size;
uint32_t ih_load;
uint32_t ih_ep;
uint32_t ih_dcrc;
uint8_t ih_os;
uint8_t ih_arch;
uint8_t ih_type;
uint8_t ih_comp;
uint8_t ih_name[IH_NMLEN];
} image_header_t;
我们需要关心:
uint32_t ih_load;
uint32_t ih_ep;
ih_load是加载地址,即内核运行是应该位于的地方
ih_ep是入口地址,即内核的入口地址
这与uboot类似,uboot的加载地址是TEXT_BASE = 0x33F80000;入口地址是start.S中的_start。
从nand读出来的内核可以放在ram中的任意地方,如0x31000000,0x32000000等等,只要它不破坏uboot所占用的内存空间就可以
既然设定好了加载地址和入口地址,为什么内核还能随意放?
因为uImage有一个头部!头部里有加载地址和入口地址,当我们用bootm xxx时,
do_bootm先去读uImage的头部以获取该uImage的加载地址和入口地址,当发现该uImage目前所处的内存地址不等于它的加载地址时,会将uImage移动到它的加载地址上,代码中体现如下:
uboot 1.16/common/cmd_bootm.c中的bootm_load_os()函数
case IH_COMP_NONE::
if (load != image_start)
{
memmove_wd((void *)load, (void *)image_start, image_len, CHUNKSZ);
}
另外,当内核正好处于头部指定的加载地址,便不用uboot的do_bootm函数来帮我们搬运内核了,可以缩短启动时间。这就是为什么我们一般都下载uImage到0x30007FC0的原因。
内核加载地址是0x30008000,而头部的大小64个字节,将内核拷贝到0x30007FC0,加上头部的64个字节,内核正好位于0x30008000处。
总结bootm做了什么:
1.读取头部
2.将内核移动到加载地址
3.启动内核
具体如何启动内核?
使用在/lib_arm/bootm.c定义的do_bootm_linux(),我们已经知道入口地址,只需跳到入口地址就可以启动linux内核了,在这之前需要做一件事———— uboot传递参数(启动参数)给内核。
启动代码在do_bootm_linux()函数:
void (*theKernel)(int zero, int arch,uint params); //定义函数指针theKernel
theKernel = (void (*)(int, int, uint))images->ep; //先是将入口地址赋值给theKernel
theKernel (0, bd->bi_arch_number, bd->bi_boot_params); //然后是调用thekernel,以0,bd->bi_arch_number,bd->bi_boot_params为参数
下面分析这三个参数:
1. 0—相当于mov,ro #0
2.bd->bi_arch_number:uboot机器码,这个在/board/100ask24x0.c设置:gd->bd->bi_arch_number = MACH_TYPE_S3C2440,MACH_TYPE_S3C2440在/arch/arm/asm/mach-types.h定义:362,内核机器码和uboot机器码必须一致才能启动内核
2. bd->bi_boot_parmas--- 启动参数地址
也是在在/board/100ask24x0.c设置:gd->bd->bi_boot_params = 0x30000100;
启动参数(tag)在哪里设置?
在lib_arm/armlinux.c设置:
setup_start_tag (bd);
setup_revision_tag (parmas);
setup_memory_tags (bd);
setup_commandline_tag (bd, commandline);
setup_initrd_tag (bd, images->rd_start, images->rd_end);
setup_videolfb_tag ((gd_t *) gd);
setup_end_tag (bd);
每一个启动参数对应一个tag结构体,所谓的设置传递参数其实就是初始化这些tag的值,想了解这个结构体以及这些tag的值是如何设置的请看嵌入式Linux应用开发完全手册的uboot章节
我们来看setup_start_tag(bd)函数:
static void setup_start_tag (bd_t *bd)
{
params = (struct tag *) bd->bi_boot_params;
params->hdr.tag = ATAG_CORE;
params->hdr.size = tag_size(tag_core);
params->u.core.flags = 0;
params->u.core.pagesize = 0;
params->u.core.rootdev = 0;
params = tag_next (params);
}
再看setup_commandline_tag (bd , commandline):
static void setup_commandline_tag (bd_t *bd, char*commandline)
{
// commandline就是我们的bootargs
char *p;
if (!commandline)
return;
for (p = commandline; *p == ' '; p++);
if (*p == '\0')
return;
params->hdr.tag = ATAG_CMDLINE;
params->hdr.size =
(sizeof(struct tag_header) + strlen (p) + 1 + 4) >> 2;
strcpy (params->u.cmdline.cmdline, p);
params = tag_next (params);
}
内核启动时会读取这些tag(参数)并跳转启动。
更多uboot启动内核的细节观看毕业班视频自己写uboot。
Ⅶ 关于bootloader的一些问题。高手确定的回答。
简单地说,BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。比如在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。
在专用的嵌入式板子运行GNU/Linux系统已经变得越来越流行。一个嵌入式Linux系统从软件的角度看通常可以分为四个层次: 1、 引导加载程序。包括固化在固件(firmware)中的boot代码(可选),和BootLoader两大部分。 2、 Linux内核肆枝。特定于嵌入式板子的定制内核以及内核的启动参数。 3、 文件系统。包括根文件系统和建立于Flash内存设备之上文件系统。通常用ramdisk来作为rootfs。 4、 用户应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式GUI有:MicroWindows和MiniGUI等。 引导加载程序是系统加电后或判运行的第一段软件代码。PC机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的OS BootLoader(比如,LILO和GRUB等)一起组成。BIOS在完成硬件检测和资源分配后,将硬盘MBR中的BootLoader读到系统的RAM中,然后将控制权交给OS BootLoader。BootLoader的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。 通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。裂团敏尽管如此,我们仍然可以对BootLoader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。
编辑本段常见bootloader
Redboot
Redboot是Redhat公司随eCos发布的一个BOOT方案,是一个开源项目。 当前Redboot的最新版本是Redboot-2.0.1,Redhat公司将会继续支持该项目。 Redboot支持的处理器构架有ARM,MIPS,MN10300,PowerPC, Renesas SHx,v850,x86等,是一个完善的嵌入式系统Boot Loader。 Redboot是在ECOS的基础上剥离出来的,继承了ECOS的简洁、轻巧、可灵活配置、稳定可靠等品质优点。它可以使用X-modem或Y-modem协议经由串口下载,也可以经由以太网口通过BOOTP/DHCP服务获得IP参数,使用TFTP方式下载程序映像文件,常用于调试支持和系统初始化(Flash下载更新和网络启动)。Redboot可以通过串口和以太网口与GDB进行通信,调试应用程序,甚至能中断被GDB运行的应用程序。Redboot为管理FLASH映像,映像下载,Redboot配置以及其他如串口、以太网口提供了一个交互式命令行接口,自动启动后,REDBOOT用来从TFTP服务器或者从Flash下载映像文件加载系统的引导脚本文件保存在Flash上。当前支持单板机的移植版特性有: - 支持ECOS,Linux操作系统引导 - 在线读写Flash - 支持串行口kermit,S-record下载代码 - 监控(minitor)命令集:读写I/O,内存,寄存器、 内存、外设测试功能等 Redboot是标准的嵌入式调试和引导解决方案,支持几乎所有的处理器构架以及大量的外围硬件接口,并且还在不断地完善过程中。
ARMboot
ARMboot是一个ARM平台的开源固件项目,它特别基于PPCBoot,一个为PowerPC平台上的系统提供类似功能的姊妹项目。鉴于对PPCBoot的严重依赖性,已经与PPCBoot项目合并,新的项目为U-Boot。 ARMboot发布的最后版本为ARMboot-1.1.0,2002年ARMboot终止了维护。 ARMboot支持的处理器构架有StrongARM ,ARM720T ,PXA250 等,是为基于ARM或者StrongARM CPU的嵌入式系统所设计的。 ARMboot的目标是成为通用的、容易使用和移植的引导程序,非常轻便地运用于新的平台上。ARMboot是GPL下的ARM固件项目中唯一支持Flash闪存,BOOTP、DHCP、TFTP网络下载,PCMCLA寻线机等多种类型来引导系统的。特性为: -支持多种类型的FLASH -允许映像文件经由BOOTP、DHCP、TFTP从网络传输; -支持串行口下载S-record或者binary文件 -允许内存的显示及修改 -支持jffs2文件系统等 Armboot对S3C44B0板的移植相对简单,在经过删减完整代码中的一部分后,仅仅需要完成初始化、串口收发数据、启动计数器和FLASH操作等步骤,就可以下载引导uClinux内核完成板上系统的加载。总得来说,ARMboot介于大、小型Boot Loader之间,相对轻便,基本功能完备,缺点是缺乏后续支持。
U-Boot
U-Boot是由开源项目PPCBoot发展起来的,ARMboot并入了PPCBoot,和其他一些arch的Loader合称U-Boot。2002年12月17日第一个版本U-Boot-0.2.0发布,同时PPCBoot和ARMboot停止维护。 U-Boot自发布以后已更新6次,最新版本为U-Boot-1.1.1,U-Boot的支持是持续性的。 U-Boot支持的处理器构架包括PowerPC (MPC5xx,MPC8xx,MPC82xx,MPC7xx,MPC74xx,4xx), ARM (ARM7,ARM9,StrongARM,Xscale),MIPS (4Kc,5Kc),x86等等, U-Boot(Universal Bootloader)从名字就可以看出,它是在GPL下资源代码最完整的一个通用Boot Loader。 U-Boot提供两种操作模式:启动加载(Boot loading)模式和下载(Downloading)模式,并具有大型Boot Loader的全部功能。主要特性为: -SCC/FEC以太网支持 -BOOTP/TFTP引导 -IP,MAC预置功能 -在线读写FLASH,DOC, IDE,IIC,EEROM,RTC -支持串行口kermit,S-record下载代码 -识别二进制、ELF32、pImage格式的Image,对Linux引导有特别的支持 -监控(minitor)命令集:读写I/O,内存,寄存器、内存、外设测试功能等 -脚本语言支持(类似BASH脚本) -支持WatchDog,LCD logo,状态指示功能等 U-Boot的功能是如此之强大,涵盖了绝大部分处理器构架,提供大量外设驱动,支持多个文件系统,附带调试、脚本、引导等工具,特别支持Linux,为板级移植做了大量的工作。U-Boot1.1.1版本特别包含了对SA1100和44B0芯片的移植,所以44B0移植主要是针对Board 的移植,包括FLASH、内存配置以及串口波特率等等。U-Boot的完整功能性和后续不断的支持,使系统的升级维护变得十分方便。
Blob
Blob(Boot Loader Object)是由Jan-Derk Bakker and Erik Mouw发布的,是专门为StrongARM 构架下的LART设计的Boot Loader。 Blob的最后版本是blob-2.0.5。 Blob支持SA1100的LART主板,但用户也可以自行修改移植。 Blob也提供两种工作模式,在启动时处于正常的启动加载模式,但是它会延时 10 秒等待终端用户按下任意键而将 Blob 切换到下载模式。如果在 10 秒内没有用户按键,则 Blob 继续启动 Linux 内核。其基本功能为: 初始化硬件(CPU速度,存储器,中断,RS232串口) -引导Linux内核并提供ramdisk - 给LART下载一个内核或者ramdisk -给FLASH片更新内核或者ramdisk -测定存储配置并通知内核 -给内核提供一个命令行 Blob功能比较齐全,代码较少,比较适合做修改移植,用来引导Liunx,目前大部分S3C44B0板都用Blob修改移植后来加载uClinux。
Bios-lt
Bios-lt是专门支持三星(Samsung)公司ARM构架处理器S3C4510B的Loader,可以设置CPU/ROM/SDRAM/EXTIO,管理并烧写FLASH,装载引导uClinux内核。这是国内工程师申请GNU通用公共许可发布的。 Bios-lt的最新版本是Bios-lt-0.74,另外还提供了S3C4510B的一些外围驱动。
Bootldr
Bootldr是康柏(Compaq)公司发布的,类似于compaq iPAQ Pocket PC,支持SA1100芯片。它被推荐用来引导Llinux,支持串口Y-modem协议以及jffs文件系统。 Bootldr的最后版本为Bootldr-2.19。