




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
博客首页 注册 建议与交流 排行榜 加入友情链接 窗体顶端推荐 投诉 搜索: 帮助窗体底端linux学习 本博客是我在学习linux的过程中的一些记录.心得,转载文章都注明出处,若有侵权,请及时通知我,我一定会马上删除!谢谢! 用U-BOOT构建嵌入式系统的引导装载程序 (转载) 1 U-BOOT简介U-BOOT是由德国的工程师Wolfgang Denk从8XXROM代码发展而来的,它支持很多处理器,比如PowerPC、ARM、MIPS和x86。目前,U-BOOT源代码在sourceforge网站的社区服务器中,Internet上有一群自由开发人员对其进行维护和开发,它的项目主页是/projects/U-BOOT。U-BOOT的最新版本源代码可以在Sourceforge的CVS服务器中匿名获得。#cvs -d:pserver::/cvsroot/U-BOOT login#cvs -z6 -d:pserver::/cvsroot/U-BOOT co -P modulename1.1 U-BOOT源代码目录结构 board:和一些已有开发板有关的文件,比如Makefile和u-boot.lds等都和具体开发板的硬件和地址分配有关。 common:与体系结构无关的文件,实现各种命令的C文件。 cpu:CPU相关文件,其中的子目录都是以U-BOOT所支持的CPU为名,比如有子目录arm926ejs、mips、mpc8260和nios等,每个特定的子目录中都包括cpu.c和interrupt.c,start.S。其中cpu.c初始化CPU、设置指令Cache和数据Cache等;interrupt.c设置系统的各种中断和异常,比如快速中断、开关中断、时钟中断、软件中断、预取中止和未定义指令等;start.S是U-BOOT启动时执行的第一个文件,它主要是设置系统堆栈和工作方式,为进入C程序奠定基础。 disk:disk驱动的分区处理代码。 doc:文档。 drivers:通用设备驱动程序,比如各种网卡、支持CFI的Flash、串口和USB总线等。fs:支持文件系统的文件,U-BOOT现在支持cramfs、fat、fdos、jffs2和registerfs。 include:头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和对文件系统支持的文件。 net:与网络有关的代码,BOOTP协议、TFTP协议、RARP协议和NFS文件系统的实现。 lib_arm:与ARM体系结构相关的代码。 tools:创建S-Record格式文件 和U-BOOT images的工具。1.2 U-BOOT的特点U-BOOT支持SCC/FEC以太网、OOTP/TFTP引导、IP和MAC的预置功能,这一点和其它BootLoader(如BLOB和RedBoot等)类似。但U-BOOT还具有一些特有的功能。 在线读写Flash、DOC、IDE、IIC、EEROM、RTC,其它的BootLoader根本不支持IDE和DOC的在线读写。 支持串行口kermit和S-record下载代码,U-BOOT本身的工具可以把ELF32格式的可执行文件转换成为 S-record格式,直接从串口下载并执行。 识别二进制、ELF32、uImage格式的Image,对Linux引导有特别的支持。U-BOOT对Linux 内核进一步封装为uImage。封装如下:#CROSS_COMPILE-objcopy -O binary -R.note -R.comment -S vmlinux linux.bin #gzip -9 linux.bin#tools/mkimage -A arm -O linux -T kernel -C gzip -a 0xc0008000 -e0xc0008000 -n “Linux-2.4.20” -d linux.bin.gz /tftpboot/uImage即在Linux内核镜像vmLinux前添加了一个特殊的头,这个头在include/image.h中定义,包括目标操作系统的种类(比如Linux,VxWorks等)、目标CPU的体系机构(比如ARM、PowerPC等)、映像文件压缩类型(比如gzip、bzip2等)、加载地址、入口地址、映像名称和映像的生成时间。当系统引导时,U-BOOT会对这个文件头进行CRC校验,如果正确,才会跳到内核执行。如下所示:WT-ARM9# bootm 0xc1000000# Checking Image at 0xc100000 .Image Name: Linux-2.4.20Created: 2004-07-02 22:10:11 UTCImage Type: ARM Linux Kernel Image (gzip compressed)Data Size: 550196 Bytes = 537 kB = 0 MBLoad Address: 0xc0008000Entry Point: 0xc0008000Verifying Checksum . OKUncompressing Kernel Image OK 单任务软件运行环境。U-BOOT可以动态加载和运行独立的应用程序,这些独立的应用程序可以利用U-BOOT控制台的I/O函数、内存申请和中断服务等。这些应用程序还可以在没有操作系统的情况下运行,是测试硬件系统很好的工具。 监控(minitor)命令集:读写I/O,内存,寄存器、内存、外设测试功能等 脚本语言支持(类似BASH脚本)。利用U-BOOT中的autoscr命令,可以在U-BOOT中运行“脚本”。首先在文本文件中输入需要执行的命令,然后用tools/mkimage封装,然后下载到开发板上,用autoscr执行就可以了。 编辑如下的脚本example.script。echoecho Network Configuration:echo -echo Target:printenv ipaddr hostnameechoecho Server:printenv serverip rootpathecho 用tools/mkimage对脚本进行封装。# mkimage -A ARM -O linux -T script -C none -a 0 -e 0 -n autoscr example script -d example.script /tftpboot/example.imgImage Name: autoscr example scriptCreated: Wes Sep 8 01:15:02 2004Image Type: ARM Linux Script (uncompressed)Data Size: 157 Bytes = 0.15 kB = 0.00 MBLoad Address: 0x00000000Entry Point: 0x00000000Contents:Image 0: 149 Bytes = 0 kB = 0 MB 在U-BOOT中加载并执行这个脚本。WT-ARM9# tftp 100000 /tftpboot/example.imgARP broadcast 1TFTP from server ; our IP address is 9Filename /tftpboot/TQM860L/example.img.Load address: 0x100000Loading: #doneBytes transferred = 221 (dd hex)WT-ARM9# autoscr 100000# Executing script at 00100000Network Configuration:-Target:ipaddr=9hostname=armServer:serverip=rootpath=/nfsrootWT-ARM9# 支持WatchDog、LCD logo和状态指示功能等。如果系统支持splash screen,U-BOOT启动时,会把这个图像显示到LCD上,给用户更友好的感觉。 支持MTD和文件系统。U-BOOT作为一种强大的BootLoader,它不仅支持MTD,而且可以在MTD基础上实现多种文件系统,比如cramfs、fat和jffs2等。 支持中断。由于传统的BootLoader都分为stage1和stage2,所以在stage2中添加中断处理服务十分困难,比如BLOB;而U-BOOT是把两个部分放到了一起,所以添加中断服务程序就很方便。 详细的开发文档。由于大多数BootLoader都是开源项目,所以文档都不是很充分。U-BOOT的维护人员意识到了这个问题,充分记录了开发文档,所以它的移植要比BLOB等缺少文档的BootLoader方便。2 对U-BOOT-1.1.0的修改为了使U-BOOT-1.1.0支持新的开发板,一种简便的做法是在U-BOOT已经支持的开发板中选择一种接近的进行修改。由于U-BOOT-1.10不支持ARM-922T内核,所以选择基于ARM-920T内核的smdk2400为模板。相关的源代码在board/smdk2400/下。2.1 支持ARM-922T内核的代码修改修改以下代码,使U-BOOT支持arm-922t内核。 在include/目录下新建文件arm922t.h,内容如下:#ifndef _ARM922T_H_#define _ARM922T_H_#endif 在include/目录下新建文件wt-arm9.h,该文件描述了ARM922T中Timer、UART等寄存器的结构及若干宏定义。具体内容要参考相关处理器手册。 在cpu/目录下新建目录arm922t,将目录arm920t下的内容复制后,参考手册分别修改cpu.c、interrupts.c和serial.c,其它文件不修改。2.2 开发板的支持建立自己开发板的目录和相关文件。 在include/configs目录中添加头文件lh7a400.h。这个文件是lh7a400开发板的配置文件,它包括开发板的CPU、系统时钟、RAM、Flash系统及其它相关的配置信息。其格式可参考include/configs/smdk2400.h。 在board/目录下新建wt-arm9目录,创建如下文件:flash.c、lhmemsetup.c、wt- arm9.c、Makefile和u-boot.lds。 flash.c。U-BOOT 读、写和删除Flash设备的源代码文件。由于不同开发板中Flash存储器的种类各不相同,所以,修改flash.c时需参考相应的Flash芯片手册。它包括如下几个函数:unsigned long flash_init (void ),Flash初始化;void flash_print_info (flash_info_t *info),打印Flash信息;int flash_erase (flash_info_t *info, int s_first, int s_last),Flash擦除;volatile static int write_dword (flash_info_t *info, ulong dest, ulong data),Flash写入;int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt),从内存复制数据。 lhmemsetup.c。初始化时钟、SMC控制器和SDRAM控制器。 wt-arm9.c。设置各种总线时钟,打开数据Cache和指令Cache,并设置相关内存参数。 Makefile。直接拷贝board/smdk2400/Makefile,作如下修改:OBJS := wt-arm9.o flash.o lhmemsetup.o u-boot.lds。设置U-BOOT中各个目标文件的连接地址,直接拷贝 board/smdk2400/u-boot.lds,作如下修改:.textcpu/arm922t/start.o (.text)*(.text)2.3 添加网口设备控制程序在drivers/目录中添加网口设备控制程序dm9000.c 和dm9000.h,其中dm9000.c 主要包括以下函数:int eth_init (bd_t *bd),初始化网络设备;void eth_halt (void),关闭网络设备;int eth_send (volatile void *packet,int len),发送数据包;int eth_rx (void) 接收数据包。用中断方式处理数据包的收发,因此还定义了另外两个函数:void InitInterrupt (void) ,中断初始化;void dm9000_irq (void) ,中断处理。以上两个函数在cpu/arm922t/interrupts.c中被调用,最后在drivers/Makefile中加入dm9000.o。2.4 修改Makefile在u-boot-1.1.0/Makefile中加入lh7a400_config : unconfig./mkconfig $(:_config=) arm arm922t wt-arm9其中“arm”是CPU的种类, arm922t 是ARM CPU对应的代码目录,wt-arm9是自己开发板对应的目录。交叉编译器安装在/opt/arm/3.3/bin/目录下,所以把CROSS_COMPILE设置成相应的路径:export CROSS_COMPILE = /opt/arm/3.3/bin/arm-elf-2.5 生成目标文件 先运行make clean,zenglocalhost u-boot-1.1.0$make clean然后运行make lh7a400_config,zenglocalhost u-boot-1.1.0$ make lh7a400_configConfiguring for lh7a400 board.再运行make,zenglocalhost u-boot-1.1.0$make之后会生成三个文件:u-bootELF格式的文件,可以被大多数Debug程序识别;u-boot.bin二进制bin文件,纯粹的U-BOOT二进制执行代码,不保存ELF格式和调试信息。这个文件一般用于烧录到用户开发板中;u-boot.srecMotorola S-Record格式,可以通过串行口下载到开发板中。2.6 测 试通过JTAG口将u-boot.bin烧写到Flash的零地址,复位后执行u-boot。若运行正常,会从串口返回如下信息:U-Boot 1.1.0 (Aug 21 2004 ?18:44:37)U-BooT code: C3F80000 - C3FA51A0 BSS: - C3FA96ECIRQ Stack: c3f1ff7cFIQ Stack: c3f1ef7cRAM Configuration:Bank #0: c0000000 8 MBBank #1: c1000000 8 MBFlash: 32 MBIn: serialOut: serialErr: serialWT-ARM9 #输入help得到所有命令列表,help command 列出该命令的功能。紧接着测试Flash和网卡,如果都正常工作的话,表明移植U-BOOT的工作基本完成,可以接着调试内核和文件系统。结 语BootLoader是操作系统和硬件的枢纽,它为操作系统内核的启动提供了必要的条件和参数。在移植过程中,开发人员除了要掌握BootLoader的结构和工作流程外,还要对相关硬件有一定的了解。目前,笔者移植的U-BOOT已经能够稳定地运行在开发板上,而且可以通过Flash和网络加载内核和文件系统,为后续开发,特别是驱动程序的开发奠定了良好的基础。基于Atmel at91rm9200的armlinux的bootloader启动代码分析前阶段做了一次基于at91rm9200引导部分的技术分析,主要采用了u-boot,这里只面向使用at91rm9200板子的的朋友做个简单的推敲,希望起到抛砖引玉的作用Author : balanceslimail : 前阶段做了一次基于at91rm9200引导部分的技术分析,主要采用了u-boot,这里只面向使用at91rm9200板子的的朋友做个简单的推敲,希望起到抛砖引玉的作用.关键词 : u-boot: 一个开源的面向多个目标平台(ppc, mips, arm, x86)的bootloader.at91rm9200 : Atmel 公司生产的基于arm9核的Soc处理器.以下先给出at91rm9200引导流程图Boot program Flow Diagram Device Setup|Boot SPI DataFlash Boot - Download from DataFlash - run| TWI EEPROM Boot - Download from EEPROM - run|Parallel Boot - Download from 8-bit Device - | | Xmodem protocol | |-DBGU Serial Download - run|_| DFU protocol|-USB download - run 在这里我主要介绍通过片内引导和片外引导, 片内引导主要采用串口下载并引导u-boot,并完成程序被烧写到Flash上, 然后就可以通过跳线的方式从片外引导执行已经烧写到片外Flash上的引导程序(bootloader).这里要提及的是at91rm9200内部本身有128k的片内rom,其固化了一个bootloader和uploader, 用来支持程序的下载和引导,而且其内部固化的程序提供了很多内部服务接口(Internel Service)供我们来使用,例如Xmodem,TempoDataFlash, CRC, Sine服务接口,这样我们就可以利用它所提供的Service interface API完成程序的下载。这里主要介绍Xmodem接口服务。at91rm9200内部固化的代码在设计上采用了面向对象的设计方法,如下:typedef struct _AT91S_Service char data;char (*MainMethod)();char (*ChildMethod)();AT91S_Service, *AT91PS_Service;char AT91F_MainMethod()char AT91F_ChildMethod()/*init the Service */AT91PS_Service AT91F_OpenDevice(AT91PS_Service pService)pService-data = 0;pService-MainMethod = AT91F_MainMethod;pService-ChildMethod = AT91F_ChildMethod;/使用方法如下AT91S_Service service;AT91PS_Service pService = AT91F_OpenDevice(&service);pService-AT91F_MainMethmod();.通过如上代码片断可以看出它采用了类似面向对象的设计方法。其实如果各位朋友接触过的话或者看过这本书的话,应该很容易便接受它。下面以Xmodem服务为例子介绍:at91rm9200内部提供的服务包含了几个服务对象, 这些对象在片内启动xmodem协议Host端和Targe端通讯时会用到.typedef struct _AT91S_RomBoot const unsigned int version;/ Peripheral descriptorsconst AT91S_MEMCDesc MEMC_DESC;const AT91S_STDesc SYSTIMER_DESC;const AT91S_Pio2Desc PIOA_DESC;const AT91S_Pio2Desc PIOB_DESC;const AT91S_USART2Desc DBGU_DESC;const AT91S_USART2Desc USART0_DESC;const AT91S_USART2Desc USART1_DESC;const AT91S_USART2Desc USART2_DESC;const AT91S_USART2Desc USART3_DESC;const AT91S_TWIDesc TWI_DESC;const AT91S_SPIDesc SPI_DESC;/ Objects entryconst AT91PF_OpenPipe OpenPipe;const AT91PF_OpenSBuffer OpenSBuffer;const AT91PF_OpenSvcUdp OpenSvcUdp;const AT91PF_OpenSvcXmodem OpenSvcXmodem;const AT91PF_OpenCtlTempo OpenCtlTempo;const AT91PF_OpenDfuDesc OpenDfuDesc;const AT91PF_OpenUsbDesc OpenUsbDesc;const AT91PF_OpenSvcDataFlash OpenSvcDataFlash;const AT91PF_SVC_CRC16 CRC16;const AT91PF_SVC_CRCCCITT CRCCCITT;const AT91PF_SVC_CRCHDLC CRCHDLC;const AT91PF_SVC_CRC32 CRC32;/ Arrayconst AT91PS_SVC_CRC_BIT_REV Bit_Reverse_Array;const AT91PS_SINE_TAB SineTab;const AT91PF_Sinus Sine; AT91S_RomBoot;/AT91S_Pipetypedef struct _AT91S_Pipe/ A pipe is linked with a peripheral and a bufferAT91PS_SvcComm pSvcComm;AT91PS_Buffer pBuffer;/ Callback functions with their argumentsvoid (*WriteCallback) (AT91S_PipeStatus, void *);void (*ReadCallback) (AT91S_PipeStatus, void *);void *pPrivateReadData;void *pPrivateWriteData;/ Pipe methodsAT91S_PipeStatus (*Write) (struct _AT91S_Pipe *pPipe,char const * pData,unsigned int size,void (*callback) (AT91S_PipeStatus, void *),void *privateData);AT91S_PipeStatus (*Read) (struct _AT91S_Pipe *pPipe,char *pData,unsigned int size,void (*callback) (AT91S_PipeStatus, void *),void *privateData);AT91S_PipeStatus (*AbortWrite)(struct _AT91S_Pipe *pPipe);AT91S_PipeStatus (*AbortRead)(struct _AT91S_Pipe *pPipe);AT91S_PipeStatus (*AbortRead)(struct _AT91S_Pipe *pPipe);AT91S_PipeStatus (*Reset)(struct _AT91S_Pipe *pPipe);char (*IsWritten)(struct _AT91S_Pipe *pPipe, char const *pVoid);char (*IsReceived) (struct _AT91S_Pipe *pPipe, char const *pVoid); AT91S_Pipe;/AT91S_Bufftypedef struct _AT91S_SBufferAT91S_Buffer parent;char *pRdBuffer;char const *pWrBuffer;unsigned int szRdBuffer;unsigned int szWrBuffer;unsigned int stRdBuffer;unsigned int stWrBuffer; AT91S_SBuffer;/ AT91S_SvcTempotypedef struct _AT91S_SvcTempo/ Methods:AT91S_TempoStatus (*Start) (struct _AT91S_SvcTempo *pSvc,unsigned int timeout,unsigned int reload,void (*callback) (AT91S_TempoStatus, void *),void *pData);AT91S_TempoStatus (*Stop) (struct _AT91S_SvcTempo *pSvc);struct _AT91S_SvcTempo *pPreviousTempo;struct _AT91S_SvcTempo *pNextTempo;/ Dataunsigned int TickTempo; /* timeout valueunsigned int ReloadTempo;/* Reload value for periodic executionvoid (*TempoCallback)(AT91S_TempoStatus, void *);void *pPrivateData;AT91E_SvcTempo flag; AT91S_SvcTempo;/ AT91S_CtrlTempotypedef struct _AT91S_CtlTempo/ Members:/ Start and stop for Timer hardwareAT91S_TempoStatus (*CtlTempoStart) (void *pTimer);AT91S_TempoStatus (*CtlTempoStop) (void *pTimer);/ Start and stop for Tempo serviceAT91S_TempoStatus (*SvcTempoStart) (struct _AT91S_SvcTempo *pSvc,unsigned int timeout,unsigned int reload,void (*callback) (AT91S_TempoStatus, void *),void *pData);AT91S_TempoStatus (*SvcTempoStop) (struct _AT91S_SvcTempo *pSvc);AT91S_TempoStatus (*CtlTempoSetTime)(struct _AT91S_CtlTempo *pCtrl, unsigned int NewTime);AT91S_TempoStatus (*CtlTempoGetTime)(struct _AT91S_CtlTempo *pCtrl);AT91S_TempoStatus (*CtlTempoIsStart)(struct _AT91S_CtlTempo *pCtrl);AT91S_TempoStatus (*CtlTempoCreate) (struct _AT91S_CtlTempo *pCtrl,struct _AT91S_SvcTempo *pTempo);AT91S_TempoStatus (*CtlTempoRemove) (struct _AT91S_CtlTempo *pCtrl,struct _AT91S_SvcTempo *pTempo);AT91S_TempoStatus (*CtlTempoTick) (struct _AT91S_CtlTempo *pCtrl);/ Data:void *pPrivateData; / Pointer to devived classvoid const *pTimer; / hardwareAT91PS_SvcTempo pFirstTempo;AT91PS_SvcTempo pNewTempo; AT91S_CtlTempo;/以下代码是上面几个对象的使用范例,通过这样就可以完成Host端和Targe端之间的xmodem通讯,并可以下载代码了。AT91S_RomBoot const *pAT91;AT91S_SBuffer sXmBuffer;AT91S_SvcXmodem svcXmodem;AT91S_Pipe xmodemPipe;AT91S_CtlTempo ctlTempo;AT91PS_Buffer pXmBuffer;AT91PS_SvcComm pSvcXmodem;unsigned int SizeDownloaded; /* Init of ROM services structure */pAT91 = AT91C_ROM_BOOT_ADDRESS;/这里取得内部ROM服务的入口地址/* Tempo Initialization */pAT91-OpenCtlTempo(&ctlTempo, (void *) &(pAT91-SYSTIMER_DESC);ctlTempo.CtlTempoStart(void *) &(pAT91-SYSTIMER_DESC);/* Xmodem Initialization */pXmBuffer = pAT91-OpenSBuffer(&sXmBuffer);pSvcXmodem = pAT91-OpenSvcXmodem(&svcXmodem, (AT91PS_USART)AT91C_BASE_DBGU, &ctlTempo);pAT91-OpenPipe(&xmodemPipe, pSvcXmodem, pXmBuffer);xmodemPipe.Read(&xmodemPipe, (char *)AT91C_UBOOT_BASE_ADDRESS, AT91C_UBOOT_MAXSIZE, AT91F_XmodemProtocol, 0); while(XmodemComplete !=1);/上面部分主要针对at91rm9200片内启动时我们可以使用的片内接口服务介绍,玩H9200的朋友可以参考一下便知道缘由。下面主要介绍at91rm9200片外启动时所使用的bootloader-u-boot.一. bootloader BootLoader(引导装载程序)是嵌入式系统软件开发的非常重要的环节,它把操作系统和硬件平台衔接在一起,是跟硬件体系密切相关的。1.1 典型的嵌入式系统软件部分Image memory layout : bootloader , bootloader param, kernel, rootfs.1.2 引导模式 : 1. bootstrap或download2. autoboot1.3 u-boot简介 :u-boot是由Wolfgang Denk开发,它支持(mips, ppc, arm, x86)等目标体系,可以在 上下载获得源码,1.4 u-boot源代码目录结构board:开发板相关的源码,不同的板子对应一个子目录,内部放着主板相关代码。at91rm9200dk/at91rm9200.c, config.mk, Makefile, flash.c ,u-boot.lds等都和具体开发板的硬件和地址分配有关。common:与体系结构无关的代码文件,实现了u-boot所有命令,其中内置了一个shell脚本解释器(hush.c, a prototype Bourne shell grammar parser), busybox中也使用了它.cpu:与cpu相关代码文件,其中的所有子目录都是以u-boot所支持的cpu命名.at91rm9200/at45.c, at91rm9200_ether.c, cpu.c, interrupts.c serial.c, start.S, config.mk, Makefile等.其中cpu.c负责初始化CPU、设置指令Cache和数据Cache等;interrupt.c负责设置系统的各种中断和异常,比如快速中断、开关中断、时钟中断、软件中断、预取中止和未定义指令等;start.S负责u-boot启动时执行的第一个文件,它主要是设置系统堆栈和工作方式,为跳转到C程序入口点.disk:设备分区处理代码。doc:u-boot相关文档。drivers:u-boot所支持的设备驱动代码, 网卡、支持CFI的Flash、串口和USB总线等。fs: u-boot所支持支持文件系统访问存取代码, 如jffs2.include:u-boot head文件,主要是与各种硬件平台相关的头文件,如include/asm-arm/arch-at91rm9200/, include/asm-arm/proc-armvnet:与网络有关的代码,BOOTP协议、TFTP协议、RARP协议代码实现.lib_arm:与arm体系相关的代码。(这里我们主要面向的是ARM体系,所以该目录是我们主要研究对象)tools:编译后会生成mkimage工具,用来对生成的raw bin文件加入u-boot特定的image_header.1.5 u-boot的功能介绍u-boot支持SCC/FEC以太网、OOTP/TFTP引导、IP和MAC的功能.读写Flash、DOC、IDE、IIC、EEROM、RTC支持串行口kermit和S-record下载代码, 并直接从串口下载并执行。在我们生成的内核镜像时,要做如下处理.1. arm-linux-objcopy -O binary -R.note -R.comment -S vmlinux linux.bin 2. gzip -9 linux.bin3. mkimage -A arm -O linux -T kernel -C gzip -a 0xc0008000 -e 0xc0008000 -n Linux-2.4.19-rmk7” -d linux.bin.gz uImage即在Linux内核镜像vmLinux前添加了一个特殊的头,这个头在include/image.h中定义,typedef struct image_header uint32_t ih_magic; /* Image Header Magic Number */uint32_t ih_hcrc; /* Image Header CRC Checksum */uint32_t ih_time; /* Image Creation Timestamp */uint32_t ih_size; /* Image Data Size */uint32_t ih_load; /* Data Load Address */uint32_t ih_ep; /* Entry Point Address */uint32_t ih_dcrc; /* Image Data CRC Checksum */uint8_t ih_os; /* Operating System */uint8_t ih_arch; /* CPU architecture */uint8_t ih_type; /* Image Type */uint8_t ih_comp; /* Compression Type */uint8_t ih_nameIH_NMLEN; /* Image Name */ image_header_t;当u-boot引导时会对这个文件头进行CRC校验,如果正确,才会跳到内核执行.如果u-boot启动以后会出现u-boot敲入help, 会出现大量的命令提示,Monitor commandgo - start application at address addrrun - run commands in an environment variablebootm - boot application image from memorybootp - boot image via network using BootP/TFTP protocoltftpboot- boot image via network using TFTP protocoland env variables ipaddr and serverip(and eventually gatewayip)rarpboot- boot image via network using RARP/TFTP protocoldiskboot- boot from IDE devicebootd - boot default, i.e., run bootcmdloads - load S-Record file over serial lineloadb - load binary file over serial line (kermit mode)md - memory displaymm - memory modify (auto-incrementing)nm - memory modify (constant address)mw - memory write (fill) cp - memory copycmp - memory comparecrc32 - checksum calculationimd - i2c memory displayimm - i2c memory modify (auto-incrementing)inm - i2c memory modify (constant address)imw - i2c memory write (fill)icrc32 - i2c checksum calculationiprobe - probe to discover valid I2C chip addressesiloop - infinite loop on address rangeisdram - print SDRAM configuration informationsspi - SPI utility commandsbase - print or set address offsetprintenv- print environment variablessetenv - set environment variab
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人教版八年级数学上册《角的平分线》同步测试题(附答案)
- 首字母填空(重难词汇100题)-人教版七年级英语上册期末复习(含答案)
- 人教A版高考数学复习讲义:空间点直线平面之间的位置关系
- 训课件-大穿插施工如何执行落地
- 重力式码头课件
- 醉酒驾驶法律知识培训课件
- 醉酒后急救知识培训内容课件
- 统编版五年级道德与法治上册全册教案设计(表格式)
- 实验基础(专练)-高考化学二轮复习考点突破(原卷版)
- 老年人健身知识培训课件
- 麻醉科常用操作规范
- 医疗CT中碲锌镉CZT探测器的工作原理
- 义务教育语文课程标准(2022)测试题带答案(20套)
- GB/T 27818-2011化学品皮肤吸收体外试验方法
- GB/T 22512.2-2008石油天然气工业旋转钻井设备第2部分:旋转台肩式螺纹连接的加工与测量
- 通过测试-失效测试-老化测试-三者有何区别
- 动漫人物欣赏课件
- 让主动问好成为一种习惯(优秀主题班会)
- DB15T 2412-2021 蒙餐 蒙式牛肉丁
- ACLS-PC-SA课前自我测试试题及答案
- OTN技术概述PPT课件
评论
0/150
提交评论