嵌入式系统原理与开发:第4章bootloader与设备驱动_第1页
嵌入式系统原理与开发:第4章bootloader与设备驱动_第2页
嵌入式系统原理与开发:第4章bootloader与设备驱动_第3页
嵌入式系统原理与开发:第4章bootloader与设备驱动_第4页
嵌入式系统原理与开发:第4章bootloader与设备驱动_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

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

文档简介

1、第4章 Bootloader与设备驱动 BOOTLOADER现在计算机系统多采用“挥发性”的半导体存储器作为内存,系统加电后主存内没有内容,需要非挥发性存储存储器启动时的代码;PC系统中的启动流程:BIOS(EPROM)执行启动流程从硬盘0扇区读取采用操作系统引导程序由操作系统引导程序完成整个操作系统的加载 BOOTLOADER嵌入式系统采用EEPROM或FLASH等介质存储操作系统映像。是内存的一部分,操作系统映像也可以在EEPROM或FLASH中就地运行。但是,实际上大多数嵌入式系统还是采用了引导/装入程序,而不让可执行映像在EEPROM或FLASH中就地执行:首先是效率方面的考虑。操作系

2、统的多样性;有利于嵌入式系统的调试; BOOTLOADER简单地说,Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。 Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 Boot Loader 几乎是不可能的。尽管如此,我们仍然可以对 Boot Loader 归纳出一些通用的概念来,以指导用户特定的 Boot Loader 设计与实现。 一、什么是bootloader(引导

3、加载程序)Bootloader,为引导加载程序,是嵌入式系统加电后运行的第一段代码,相当于PC机的BIOS。 Bootloader的位置:通常固化在硬件上的某个固态存储设备上,加电后自启动。 应用程序实时操作系统(RTOS)输入输出接口处理器/ARM核MMU/CacheSOC/SOPCUSBGPIOIISLCDUART和IrDAADC/DACFPGA/CPLDDSP/浮点运算协处理器DMA电源管理人机交互接口LCD/触摸屏、键盘、鼠标设备驱动程序、HAL、BSP文件系统/图形用户应用程序接口驱动层OS层应用层软件硬件以太网看门狗及复位电路Timer/RTCCANFlashEEPROMSDRAM

4、SRAM内存 典型的嵌入式系统组成Bootloader在系统中的位置BootLoader的主要功能初始化硬件设备建立内存空间的映射图,将部分映像和操作系统装入RAM,再转入这部分映像,此后就在RAM中执行了。从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统的内核准备好正确的环境。系统加电或复位后,所有的CPU通常都从某个由CPU制造商预先安排的地址上取指令。比如,基于 XScale core 的 CPU 在复位时通常都从地址 0 x00000000 取它的第一条指令。而基于 CPU 构建的嵌入式系统通常都有某种类型的固态存储设备(如:PROM、EEPROM 或 FLASH 等)

5、被映射到这个预先安排的地址上。因此在系统加电后,CPU将首先执行Boot Loader程序。 通常的硬件初始化工作: 关闭处理器内部指令/数据cache等 关闭中断 关闭看门狗 配置PLL 配置内存 初始化各工作模式的堆栈 配置中断 拷贝RW段,初始化ZI段Bootloader的地址:在嵌入式系统中,系统加电复位后,几乎所有的 CPU都从由复位地址上取指令。比如,基于 ARM处理器核的CPU在复位时通常都从地址 0 x00000000取它的第一条指令。在这个地址处安排的就是Bootloader。backBootloader是严重地依赖于硬件而实现的。每种不同体系结构的处理器都有不同的Bootl

6、oader。不过Bootloader的发展也趋于支持多种体系结构,如现在比较成熟的vivi、RedBoot和U-Boot等。 几种发布的Bootloader表7-1开放源码的Linux引导程序BootloaderMonitor描 述X86ARMPowerPCLILO否Linux磁盘引导程序是否否GRUB否GNU的LILO替代程序是否否Loadlin否从DOS引导Linux是否否ROLO否从ROM引导Linux而不需要BIOS是否否Etherboot否通过以太网卡启动Linux系统的固件是否否LinuxBIOS否完全替代BUIS的Linux引导程序是否否BLOB否LART等硬件平台的引导程序否是

7、否U-Boot是通用引导程序是是是RedBoot是基于eCos的引导程序是是是1、vivivivi是韩国Mizi公司开发的Bootloader,适用于ARM9处理器。2、RedBoot RedBoot即红帽(Red Hat)嵌入式调试引导程序,是一种用于嵌入式系统的独立开放源代码引导/装载器。3、U-Boot U-Boot(Universal Bootloader)由德国DENX小组开发,是一款目前功能较为强大的开源Bootloader程序,它支持多种处理器平台,包括ARM、PowerPC、MIPS等。 backBootloader操作模式 大多数Bootloader都有两种不同的操作模式:“

8、启动加载”模式和“下载”模式。其区别对于开发人员才有意义。从最终用户的角度看,Bootloader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载模式的区别。 loadermemorybitsflashbits1、启动加载(Bootloading)模式启动加载模式称为“自举”(Autonomous)模式。即Bootloader从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。启动加载模式是 Bootloader的正常工作模式,在嵌入式产品发布的时侯,Bootloader必须工作在这种模式下。 2、下载(Downloading)模式下载方式:

9、在这种模式下,目标机上的Bootloader将通过串口连接或网络连接等通信手段从主机下载文件。下载内容及存储:主要是下载内核映像和根文件系统映像等。从主机下载的文件通常首先被Bootloader保存到目标机的RAM中,然后再被 Bootloader写到目标机上的FLASH 类固态存储设备中。下载模式应用场合:Bootloader的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用到这种工作模式。用户应用接口:工作于这种模式下的Bootloader通常都会向它的终端用户提供一个简单的命令行接口。 如在RedBoot下,将出现“RedBoot”提示符;在vivi Boo

10、tloader 下出现“vivi”提示符。下载(Downloading)模式示例RedBoot的Bootloader像RedBoot或U-Boot等功能强大的Bootloader通常都可同时支持这两种工作模式,而且允许用户在这两种工作模式之间进行切换。比如,RedBoot在启动时处于正常的启动加载模式,但是它会延时3秒等待终端用户按下任意键而将RedBoot切换到下载模式。如在等待时间内没有接收到用户按键,则继续启动 Linux 内核。 backBootloader启动过程Bootloader的启动可以分为两个阶段1、第一阶段阶段1主要包含依赖于CPU体系结构及硬件设备的初始化等。通常都用汇编

11、语言来实现。这个阶段的任务有5:(1)、基本的硬件设备初始化这是 Bootloader 一开始就执行的操作,其目的是为阶段2 的执行、以及随后kernel 的执行准备好一些基本的硬件环境。 它通常包括以下工作: 关闭处理器内部指令/数据cache等 关闭中断 关闭看门狗 配置PLL 配置内存 初始化各工作模式的堆栈 配置中断 拷贝RW段,初始化ZI段ARM7引导程序示例(2)、为阶段2代码准备RAM空间为了获得更快的执行速度,通常把 阶段2 的代码加载到 RAM 空间中来执行。 准备RAM空间考虑的因素:阶段2代码大小、堆栈、页大小(4KB的倍数)、安排位置等。 (3)、拷贝阶段2代码到RAM

12、空间(4)、设置好堆栈堆栈指针sp设置在1MB 的 RAM 空间的最顶端(堆栈向下生长)。(5)、跳转到阶段2的C程序入口点在上述一切都就绪后,就可以跳转到 Bootloader 的 stage2 去执行了。 Bootloader的stage2可执行映像刚被拷贝到RAM空间时的系统内存布局2、第二阶段阶段2通常用C语言来实现,以便实现更复杂的功能,也使程序有更好的可读性和可移植性。这个阶段的主要任务有5:(1)、初始化本阶段要使用到的硬件至少初始化一个串口,以便和终端用户进行 I/O 输出信息等。(2)、检测系统内存映射(memory map)所谓内存映射,就是指在整个物理地址空间中有哪些地址

13、范围被分配用来作为系统的 RAM 单元。为后面使用RAM、运行程序做好准备。(3)、将kernel和根文件系统映像从flash读到RAM空间(4)、为kernel设置启动参数这是在调用内核之前应该做的准备工作。Linux 2.4.x 以后的内核都期望以标记列表(tagged list)的形式来传递启动参数。启动参数标记列表方法:以ATAG_CORE标记开始,以ATAG_NONE标记结束。在嵌入式 Linux 系统中,通常需要由 Boot Loader 设置的启动参数有:ATAG_CORE、ATAG_MEM(内存映射)、ATAG_NONE等。(5)、调用内核Bootloader调用Linux k

14、ernel的方法是直接跳转到内核的第一条指令处。在跳转时必须满足下列条件:1)、CPU寄存器的设置:R0为0;R1为机器类型ID;R2为启动参数,标记列表在RAM中的起始基地址。 (机器类型参见 linux/arch/arm/tools/mach-types目录)2)、CPU模式: CPU必须设置为SVC模式,必须禁止中断(IRQs和FIQs)。3)、 MMU 和 Cache的设置:MMU 必须关闭;指令 Cache 可以打开也可以关闭; 数据 Cache 必须关闭。back.2 U-Boot工程简介 最早,DENX软件工程中心的Wolfgang Denk基于8xxrom的源码创建了PPCBO

15、OT工程,并且不断添加处理器的支持。后来,Sysgo Gmbh把PPCBOOT移植到ARM平台上,创建了ARMBOOT工程。然后以PPCBOOT工程和ARMBOOT工程为基础,创建了U-Boot工程。 现在,U-Boot已经能够支持PowerPC、ARM、X86、MIPS体系结构的上百种开发板,已经成为功能最多、灵活性最强并且开发最积极的开放源码Bootloader。目前仍然由DENX的Wolfgang Denk维护。u-boot系统启动流程大多数bootloader都分为stage1和stage2两大部分,u-boot也不例外。依赖于CPU体系结构的代码(如设备初始化代码等)通常都放在sta

16、ge1且可以用汇编语言来实现,而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。stage1 (start.s代码结构)u-boot的stage1代码通常放在start.s文件中,它用汇编语言写成,其主要代码部分如下:(1) 定义入口 。由于一个可执行的IMage必须有一个入口点,并且只能有一个全局入口,通常这个入口放在ROM(flash)的0 x0地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本来完成。 (2)设置异常向量(Exception Vector)。(3)设置CPU的速度、时钟频率及中断控制寄存器。(4)初始化内存控制器

17、 。(5)将ROM中的程序复制到RAM中。(6)初始化堆栈 。(7)转到RAM中执行,该工作可使用指令Ldr PC来完成。2.2 stage2C语言代码部分 Lib ARM/board.c中的start armboot是C语言开始的函数,也是整个启动代码中C语言的主函数,同时还是整个u-boot(armboot)的主函数,该函数主要完成如下操作:(1)调用一系列的初始化函数。(2)初始化Flash设备。 (3)初始化系统内存分配函数。(4)如果目标系统拥有NAND设备,则初始化NAND设备。(5)如果目标系统有显示设备,则初始化该类设备。(6)初始化相关网络设备,填写IP、MAC地址等。(7)

18、进入命令循环(即整个boot的工作循环),接受用户从串口输入的命令,然后进行相应的工作。 .3 U-Boot编译 解压U-Boot-1.3.1.tar.bz2就可以得到全部U-Boot源程序。在顶层目录下有18个子目录,分别存放和管理不同的源程序。 (1)与处理器体系结构或者开发板硬件直接相关。 (2)一些通用的函数或者驱动程序。 (3)U-Boot的应用程序、工具或者文件。表7-2U-Boot的源码顶层目录说明目 录特 性解 释 说 明board平台依赖存放电路板相关的目录文件,如RPXlite(mpc8xx)、smdk2410(arm920t)、sc520_cdp(x86) 等目录cpu平

19、台依赖存放CPU相关的目录文件,如mpc8xx、ppc4xx、arm720t、arm920t、xscale、i386等目录lib_ppc平台依赖存放对PowerPC体系结构通用的文件,主要用于实现PowerPC平台通用的函数lib_arm平台依赖存放对ARM体系结构通用的文件,主要用于实现ARM平台通用的函数lib_i386平台依赖存放对X86体系结构通用的文件,主要用于实现X86平台通用的函数include通用头文件和开发板配置文件,所有开发板的配置文件都在configs目录下common通用通用的多功能函数实现lib_generic通用通用库函数的实现Net通用存放网络的程序Fs通用存放文

20、件系统的程序Post通用存放上电自检程序drivers通用通用的设备驱动程序,主要有以太网接口的驱动Disk通用硬盘接口程序Rtc通用RTC的驱动程序Dtt通用数字温度测量器或者传感器的驱动examples应用例程一些独立运行的应用程序的例子,如helloworldtools工具存放制作S-Record或者U-Boot格式的镜像等工具,如mkimageDoc文档开发使用文档与移植相关的主要文件夹 (1)CPU它的每个子文件夹里都有如下文件:makefileconfig.mkcpu.c 和处理器相关的代码interrupts.c 中断处理代码serial.c 串口初始化代码start.s 全局开

21、始启动代码与移植相关的主要文件夹 (2)BOARD它的每个子文件夹里都有如下文件:makefileconfig.mksmdk2410.c 和板子相关的代码(以smdk2410为例)flash.c flash操作代码memSetup.s 初始化SDRAM代码u-boot.lds 对应的连接文件与移植相关的主要文件夹(3)lib_ARM体系结构下的相关实现代码,比如memcpy等的汇编语言的优化实现。1顶层目录下的Makefile2开发板配置头文件3编译结果支持ARM- 920T内核的代码修改 由于U-Boot-2.1.1 提供对ARM-920T 内核的直接支持,所以本步骤不需要做任何工作,本文为

22、了让读者了解BootLoder 移植的通用模式,在此只是稍加提示。 配置自己的开发板 建立自己开发板的目录和相关文件。 1) 在include/ configs目录中以smdk2410.h为模板添加头文件S3C2410. h(cp smdk2410.h S3C2410.h) 。 这个文件是开发板的配置文件,它包括开发板的CPU、系统时钟、RAM、Flash系统及其它相关的配置信息。 2) 在board/目录下创建S3C2410目录。拷贝smdk2410目录下所有文件到S3C2410目录下,共有如下六个文件:flash.c、memsetup.c、S3C2410.c、Makefile、U-Boot

23、 .lds 和config.mk,根据开发板实际情况对各个文件进行修改。 Flash.cU-Boot读、写和删除Flash 设备的源代码文件。由于不同开发板中Flash 存储器的种类各不相同,所以,修改flash.c时需参考相应的Flash 芯片手册。它包括如下几个函数: unsigned long flash-init (void ),Flash初始化; int flash-erase (flash-info-t *info,ints-first,ints -last),Flash擦除; volatile static int write- hword (flash-info-t *info

24、,ulong dest , ulong data) ,Flash 写入; int write-buff (flash-info-t *info,uchar *src ,ulong addr,ulong cnt),从内存复制数据。 memsetup.c初始化时钟、SMC控制器和SDRAM控制器。为了以后能用U-Boot的GO命令执行修改过的用loadb或tftp下载的U-Boot.在标记符“0:”上加入五句: mov r3,pc ldr r4,= 0 x3FFF0000 and r3,r3,r4 / /以上三句得到实际启动的内存地址 add r0,r0,r3 / /用GO 命令调试uboot时,

25、启动地址在RAM add r2,r2,r3 / /把初始化内存信息的地址,加上实际起动地址 S3C2410.C设置各种总线时钟,打开数据Cache和指令Cache,并设置相关内存参数。 Makefile修改:OBJS := S3C2410.o flash.o memsetup.o U-Boot.lds.作如下修改: .text cpu/ arm920t/ start.o ( .text) * (.text) config.mk用于设置程序连接的起始地址,如果想在U-Boot 中增加功能,可以留下6M 的空间,修改33F80000 为33A00000。 修改顶层Makefile 回到u-boot

26、-2.1.1目录 rootlocalhost u-boot-2.1.1#gedit Makefilesmdk2410_config : unconfig$(MKCONFIG) $(:_config=) arm arm920t smdk2410 NULL s3c24x0在后面添加自己的配置:S3C2410_config : unconfig$(MKCONFIG) $(:_config=) arm arm920t S3C2410 NULL s3c24x0各项的意思如下arm: CPU的架构(ARCH) arm920t: CPU的类型(CPU),其对应于cpu/arm920t子目录。 S3C2410

27、: 开发板的型号(BOARD),对应于board/S3C2410目录。 NULL: 开发者/或经销商(vender)。 s3c24x0: 片上系统(SOC)。 编译U-Boot编译命令rootlocalhost# cd u-boot-2.1.1rootlocalhost# make distcleanrootlocalhost# make s3C2410_configrootlocalhost# make编译结果u-boot in ELF formatu-boot.bin a raw binary imageu-boot.srec in MotorolaTM srec format表7-3U-

28、Boot编译生成的镜像文件文 件 名 称说 明文 件 名 称说 明System.mapU-Boot映像的符号表U-Boot.binU-Boot映像原始的二进制格式U-BootU-Boot映像的ELF格式U-Boot.srecU-Boot映像的S-Record格式.4 U-Boot的移植思路 U-Boot能够支持多种体系结构的处理器,支持的开发板也越来越多。因为Bootloader是完全依赖硬件平台的,所以在新电路板上需要移植U-Boot程序。 开始移植U-Boot之前,要先熟悉硬件电路板和处理器。 以S3C2410处理器的开发板为例,U-Boot的高版本已经支持SMDK2410开发板。我们可以

29、基于SMDK2410移植,那么先把SMDK2410编译通过。移植U-Boot的基本步骤如下。 (1)在顶层Makefile中为开发板添加新的配置选项,使用已有的配置项目为例。 (2)创建一个新目录存放开发板相关的代码,并且添加新文件。 (3)为开发板添加新的配置文件。 (4)配置开发板。 (5)编译U-Boot。 (6)添加驱动或者功能选项。 (7)调试U-Boot源代码,直到U-Boot在开发板上能够正常启动。.5 U-Boot的烧写 新开发的电路板没有任何程序可以执行,也就不能启动,需要先将U-Boot烧写到Flash中。如果主板上的EPROM或者Flash能够取下来,就可以通过编程器烧写

30、。例如,计算机BIOS就存储在一块256KB的Flash上,通过插座与主板连接。但是多数嵌入式单板使用贴片的Flash,不能取下来烧写。这种情况可以通过处理器的调试接口,直接对板上的Flash编程。 处理器调试接口是为处理器芯片设计的标准调试接口,包含BDM、JTAG和EJTAG三种接口标准。 JTAG(Joint Test Action Group,联合测试行动小组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。JTAG接口需要专用的硬件工具来连接。 开发板加电(或者复位)时,烧写程序探测到处理器是否存在,并开始通信,然后把Bootloader下载并烧写到Fla

31、sh中。这种方式速率很慢,平均每秒钟可以烧写100200个字节,不过价格却非常便宜。烧写完成后,复位实验板,串口终端应该显示U-Boot的启动信息。Memory Commandsbase print or set address offset crc32 checksum calculation cmp memory compare cp memory copy md memory display mm memory modify (autoincrementing) mtest simple RAM test mw memory write (fill) nm memory modify (

32、constant address) loop infinite loop on address range.6 U-Boot的常用命令U-Boot的常用命令Flash Memory Commandscp memory copy (program flash) flinfo print FLASH memory information erase erase FLASH memory protect enable or disable FLASH write protectionU-Boot的常用命令Execution Control Commandsbootm boot application

33、 image from memory bootelf Boot from an ELF image in memory go start application at address addrU-Boot的常用命令Othersbootp boot image via network using bootp/tftp protocol echo ehco args to console nand legacy NAND sub-system iminfo print header information for application imageloadb load binary file ov

34、er serial lineU-Boot的常用命令Othersloadsload S-Record file over serial linenfs boot image via network using NFS protocolprintenv print environment variablesrarpboot boot image via network using RARP/TFTP protocolrun run commands in an environment variablesetenv set environment variablessleep delay execu

35、tion for some time1、bootmbootm addr arg . - boot application image stored in memory passing arguments arg .; when booting a Linux kernel, arg can be the address of an initrd imagebootm命令可以引导启动存储在内存中的程序映像。这些内存包括RAM和可以永久保存的Flash。第1个参数addr是程序映像的地址,这个程序映像必须转换成U-Boot的格式。第2个参数对于引导Linux内核有用,通常作为U-Boot格式的RA

36、MDISK映像存储地址;也可以是传递给Linux内核的参数(缺省情况下传递bootargs环境变量给内核)。 2、bootpbootp loadAddress bootfilenamebootp命令通过bootp请求,要求DHCP服务器分配IP地址,然后通过TFTP协议下载指定的文件到内存。第1个参数是下载文件存放的内存地址。第2个参数是要下载的文件名称,这个文件应该在开发主机上准备好。 3、cmpcmp .b, .w, .l addr1 addr2 count - compare memorycmp命令可以比较2块内存中的内容。.b以字节为单位;.w以字为单位;.l以长字为单位。注意:cmp

37、.b中间不能保留空格,需要连续敲入命令。第1个参数addr1是第一块内存的起始地址。第2个参数addr2是第二块内存的起始地址。第3个参数count是要比较的数目,单位按照字节、字或者长字。 4、cpcp .b, .w, .l source target count - copy memorycp命令可以在内存中复制数据块,包括对Flash的读写操作。第1个参数source是要复制的数据块起始地址。第2个参数target是数据块要复制到的地址。这个地址如果在Flash中,那么会直接调用写Flash的函数操作。所以U-Boot写Flash就使用这个命令,当然需要先把对应Flash区域擦干净。第3

38、个参数count是要复制的数目,根据cp.b cp.w cp.l分别以字节、字、长字为单位。 5、crc32crc32 address count addr - compute CRC32 checksum save at addr crc32命令可以计算存储数据的校验和。第1个参数address是需要校验的数据起始地址。第2个参数count是要校验的数据字节数。第3个参数addr用来指定保存结果的地址。6、echoecho args. - echo args to console; c suppresses newlineecho命令回显参数。7、eraseerase start end -

39、 erase FLASH from addr start to addr enderase N:SF-SL - erase sectors SF-SL in FLASH bank # Nerase bank N - erase FLASH bank # Nerase all - erase all FLASH bankserase命令可以擦Flash。参数必须指定Flash擦除的范围。按照起始地址和结束地址,start必须是擦除块的起始地址;end必须是擦除末尾块的结束地址。这种方式最常用。举例说明:擦除0 x20000 0 x3ffff区域命令为erase 20000 3ffff。按照组和扇

40、区,N表示Flash的组号,SF表示擦除起始扇区号,SL表示擦除结束扇区号。另外,还可以擦除整个组,擦除组号为N的整个Flash组。擦除全部Flash只要给出一个all的参数即可。8、flinfoflinfo - print information for all FLASH memory banksflinfo N - print information for FLASH memory bank # Nflinfo命令打印全部Flash组的信息,也可以只打印其中某个组。一般嵌入式系统的Flash只有一个组。 9、gogo addr arg . - start application at

41、address addr passing arg as argumentsgo命令可以执行应用程序。第1个参数是要执行程序的入口地址。第2个可选参数是传递给程序的参数,可以不用。10、minfoiminfo addr addr . - print header information for application image starting at address addr in memory; this includes verification of the image contents (magic number, header and payload checksums)iminfo

42、可以打印程序映像的开头信息,包含了映像内容的校验(序列号、头和校验和)。第1个参数指定映像的起始地址。可选的参数是指定更多的映像地址。11、loadbloadb off baud - load binary file over serial line with offset off and baudrate baudloadb命令可以通过串口线下载二进制格式文件。12、loadsloads off - load S-Record file over serial line with offset offloads命令可以通过串口线下载S-Record格式文件。 13、mwmw .b, .w, .l address value count - write memorymw命令可以按照字节、字、长字写内存,.b .w .l的用法与cp命令相同。第1个参数address是要写的内存地址。第2个参数value是要写的值。第3个可选参数count是要写单位值的数目。14、nfsnfs loadAddress host ip addr:bootfilenamenfs命令可以使用NFS网络协议通过网络启动映像。15、nmnm .b, .w, .l address - memory modify, read and keep addressnm命令可以修改内存,可以按照字节、字、长字

温馨提示

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

评论

0/150

提交评论