收藏 分销(赏)

uboot-1.1.4在smdk2410上移植.doc

上传人:天**** 文档编号:2391918 上传时间:2024-05-29 格式:DOC 页数:17 大小:174.54KB
下载 相关 举报
uboot-1.1.4在smdk2410上移植.doc_第1页
第1页 / 共17页
uboot-1.1.4在smdk2410上移植.doc_第2页
第2页 / 共17页
uboot-1.1.4在smdk2410上移植.doc_第3页
第3页 / 共17页
uboot-1.1.4在smdk2410上移植.doc_第4页
第4页 / 共17页
uboot-1.1.4在smdk2410上移植.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

1、uboot-1.1.4在smdk2410上移植 作者: 日期:17 个人收集整理 勿做商业用途uboot的移植1。1u-boot介绍Uboot是德国DENX小组的开发用于多种嵌入式CPU的bootloader程序, UBoot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。UBoot除了支持PowerPC系列的处理器外,还能支持MIPS、 x86、ARM、NIOS、XScale等诸多常用系列的处理器。本文的代码取自于uboot1。1。4。1。2获取u-boot从下面地址下载uboot的源代码

2、.http:/ubootlocalhost uboottar xjvf uboot1.1.4.tar。bz2ubootlocalhost ubootcd uboot1.1。41.3uboot体系结构1。 目录树.board|commoncpu|disk|doc|drivers|dttexamplesfs|includelib_arm|lib_genericlib_i386lib_m68k|lib_microblaze|lib_mips|lib_nioslib_nios2|lib_ppcnetpostrtctools2。 board:和一些已有开发板有关的文件. 每一个开发板都以一个子目录出现在

3、当前目录中,比如说:SMDK2410,子目录中存放与开发板相关的配置文件。3。 common:实现uboot命令行下支持的命令,每一条命令都对应一个文件.例如bootm命令对应就是cmd_bootm.c.4。 cpu:与特定CPU架构相关目录,每一款Uboot下支持的CPU在该目录下对应一个子目录,比如有子目录arm920t等.5。 disk:对磁盘的支持.5。 doc:文档目录。Uboot有非常完善的文档,推荐大家参考阅读。6。 drivers:Uboot支持的设备驱动程序都放在该目录,比如各种网卡、支持CFI的Flash、串口和USB等。7. fs: 支持的文件系统,Uboot现在支持cr

4、amfs、fat、fdos、jffs2和registerfs.8。 include:Uboot使用的头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和对文件系统支持的文件。该目录下configs目录有与开发板相关的配置头文件,如smdk2410.h。该目录下的asm目录有与CPU体系结构相关的头文件,asm对应的是asmarm.9. lib_xxxx: 与体系结构相关的库文件。如与ARM相关的库放在lib_arm中。10。 net:与网络协议栈相关的代码,BOOTP协议、TFTP协议、RARP协议和NFS文件系统的实现。11。 tools:生成Uboot的工具,如:mkimage, c

5、rc等等.1.4u-boot编译及配置1.4。1uboot的Makefile分析u-boot的Makefile从功能上可以分成两个部分。一部分是用来编译生成uboot。bin文件;另一部分是用来执行每种board相关的配置。下面以smdk2410为例来说明作了哪些配置。$make smdk2410_config在shell执行以上命令,对应于Makefile执行的命令是smdk2410_config:unconfig。/mkconfig (:_config=) arm arm920t smdk2410 NULL s3c24x0首先执行如下命令,删除文件include/config。h incl

6、ude/config。mk board/config。tmp,后续会发现这些文件是如何建立的。unconfig:rm f include/config.h include/config.mk board/config。tmp然后运行命令。/mkconfig $(:_config=) arm arm920t smdk2410 NULL s3c24x0,mkconfig是脚本文件,传入的参数$1至$6分别为:smdk2410 arm arm920t smdk2410 NULL s3c24x0,根据传入的参数执行如下命令cd 。/includerm f asmln s asm-arm asmrm f

7、 asm-arm/archln s archs3c24x0 asm-arm/archrm f asmarm/procln s proc-armv asmarm/proc生成文件config。mk,文件内容为:ARCH = armCPU = arm920tBOARD = smdk2410SOC = s3c24x0生成文件config.h,文件内容为:/ Automatically generated - do not edit */#include configs/smdk2410.h至此make smdk2410_config的命令全部执行完毕。配置完成与board相关的信息,下面就可以编译此

8、board的u-boot。bin文件,执行如下命令:$make CROSS_COMPILE=arm-linux-Makefile的执行首先包含include include/config。mk文件,获取ARCH CPU BOARD VENDOR SOC的定义,然后根据宏的配置编译指定的文件,最终生成u-boot。bin文件,执行流程请自行分析。1.4。2u-boot.bin的生成根据以上对于makefile的分析,uboot。bin的生成分为两步。如下:对于board进行配置:$make smdk2410_config进行编译生成uboot.bin:make CROSS_COMPILE=arm

9、linux-1。5uboot的启动过程及工作原理1。5。1启动模式介绍大多数 Boot Loader 都包含两种不同的操作模式:”启动加载模式和下载”模式,这种区别仅对于开发人员才有意义.但从最终用户的角度看,Boot Loader 的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。启动加载(Boot loading)模式:这种模式也称为”自主”(Autonomous)模式。也即 Boot Loader 从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入.这种模式是 BootLoader 的正常工作模式,因此在嵌入式产品发布的时

10、侯,Boot Loader 显然必须工作在这种模式下。下载(Downloading)模式:在这种模式下,目标机上的 Boot Loader 将通过串口连接或网络连接等通信手段从主机(Host)下载文件,比如:下载内核映像和根文件系统映像等。从主机下载的文件通常首先被 BootLoader 保存到目标机的 RAM 中,然后再被 BootLoader 写到目标机上的FLASH 类固态存储设备中.BootLoader 的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用 BootLoader 的这种工作模式。工作于这种模式下的 Boot Loader 通常都会向它的终端用

11、户提供一个简单的命令行接口.UBoot这样功能强大的 Boot Loader 同时支持这两种工作模式,而且允许用户在这两种工作模式之间进行切换。大多数bootloader都分为阶段1(stage1)和阶段2(stage2)两大部分,uboot也不例外.依赖于CPU体系结构的代码(如CPU初始化代码等)通常都放在阶段1中且通常用汇编语言实现,而阶段2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。1。5.2阶段1介绍uboot的stage1代码通常放在start。s文件中,它用汇编语言写成,其主要代码部分如下:1。5.2。1定义入口由于一个可执行的Image必须有一个入

12、口点,并且只能有一个全局入口,通常这个入口放在ROM(Flash)的0x0地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本来完成。1. board/smdk2410/uboot。lds: ENTRY(_start) = cpu/arm920t/start。o(.text)2。 uboot在ram的代码区(TEXT_BASE = 0x33F80000)定义在board/smdk2410/config.mk1.5。2。2设置异常向量.globl _start_start:b resetldrpc, _undefined_instructionldrpc, _software

13、_interruptldrpc, _prefetch_abortldrpc, _data_abortldrpc, _not_usedldrpc, _irqldrpc, _fiq当发生异常时,执行cpu/arm920t/interrupts.c中定义的中断处理函数1。5.2。3设置CPU 的模式为SVC 模式mrsr0,cpsrbicr0,r0,#0x1forrr0,r0,#0xd3msrcpsr,r01.5。2。4关闭看门狗,禁掉所有中断,设置CPU 的频率if defined(CONFIG_S3C2400) | defined(CONFIG_S3C2410)ldr r0, =pWTCONmo

14、v r1, #0x0str r1, r0/ mask all IRQs by setting all bits in the INTMR default /movr1, 0xffffffffldrr0, =INTMSKstrr1, r0 if defined(CONFIG_S3C2410)ldrr1, =0x3ffldrr0, =INTSUBMSKstrr1, r0 endif/* FCLK:HCLK:PCLK = 1:2:4 */ default FCLK is 120 MHz ! */ldrr0, =CLKDIVNmovr1, 3strr1, r0#endif/* CONFIG_S3C24

15、00 | CONFIG_S3C2410 /1。5.2。5与内存管理相关寄存器的设置,cp15协处理器,配置内存区控制寄存器cpu_init_crit:/* * flush v4 I/D caches */movr0, 0mcrp15, 0, r0, c7, c7, 0/* 失效I/D cache, 见S3C2410手册附录的216 /mcrp15, 0, r0, c8, c7, 0/ 失效TLB, 见S3C2410手册附录的218 */ * disable MMU stuff and caches */mrcp15, 0, r0, c1, c0, 0bicr0, r0, 0x00002300/

16、* 清除 bits 13, 9:8 (-V- -RS)* Bit 8: Disable System Protection* Bit 7: Disable ROM Protection* Bit 13: 异常向量表基地址: 0x0000 0000/bicr0, r0, #0x00000087/* 清除 bits 7, 2:0 (B- CAM)* Bit 0: MMU disabled Bit 1: Alignment Fault checking disabled* Bit 2: Data cache disabled Bit 7: 0 = Little-endian operation*/o

17、rrr0, r0, 0x00000002 set bit 2 (A) Alignorrr0, r0, 0x00001000 set bit 12 (I) I-Cachemcrp15, 0, r0, c1, c0, 0/ before relocating, we have to setup RAM timing because memory timing is board-dependend, you will * find a lowlevel_init。S in your board directory. */movip, lrbllowlevel_init/*寄存器的具体值的设置需要对总

18、线周期及外围芯片非常熟悉, 根据所采用的内存芯片确定*/movlr, ipmovpc, lr1。5。2。6把u-boot。lds定义的text段,rodata段,data段,got段,_u_boot_cmd_start段搬移到ram区#ifndef CONFIG_SKIP_RELOCATE_UBOOTrelocate:/* relocate UBoot to RAM /adrr0, _start/ r0 current position of code /ldrr1, _TEXT_BASE/* test if we run from flash or RAM /cmp r0, r1 / don

19、t reloc during debug */beq stack_setupldrr2, _armboot_startldrr3, _bss_startsubr2, r3, r2/* r2 - size of armboot /addr2, r0, r2/* r2 start = 0x30000000 (SDRAM起始地址)- size = 0x04000000 (SDRAM大小)-ethaddr = 01:23:45:67:89:AB (以太网地址)-ip_addr = 192。168.1。5 (IP地址)baudrate = 115200 bps (波特率)lbootp通过网络使用Boot

20、p或者TFTP协议引导境像文件。# help bootpbootp loadAddress bootfilenamelbootelf默认从0x30008000引导elf格式的文件(vmlinux) help bootelfbootelf address load address of ELF image。lbootd(=boot)引导的默认命令,即运行U-BOOT中在“include/configs/smdk2410.h” 中设置的“bootcmd” 中的命令.如下:define CONFIG_BOOTCOMMAND ”tftp 0x30008000 uImage; bootm 0x30008

21、000;在命令下做如下试验:# set bootcmd printenv bootbootdelay=3baudrate=115200ethaddr=01:23:45:67:89:ab bootdbootdelay=3baudrate=115200ethaddr=01:23:45:67:89:abltftp(tftpboot)即将内核镜像文件从PC中下载到SDRAM的指定地址,然后通过bootm来引导内核,前提是所用PC要安装设置tftp服务。下载信息: tftp 0x30008000 zImageTFTP from server 10.0。0。1; our IP address is 10。

22、0。0.110Filename zImage。Load address: 0x30008000Loading: #doneBytes transferred = 913880 (df1d8 hex)lbootm内核的入口地址开始引导内核。 bootm 0x30008000# Booting image at 30008000 。.Starting kernel 。UncompressingLinux.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.done, 。lgo直接跳转到可执行文件的入口地址,执行可执行文件.# go 0x30008000# Starting appl

23、ication at 0x30008000 .lcmp对输入的两段内存地址进行比较。# cmp 0x30008000 0x30008040 64word at 0x30008000 (0xe321f0d3) != word at 0x30008040 (0xc022020c)Total of 0 words were the same# cmp 0x30008000 0x30008000 64Total of 100 words were the samelconinfo打印所有控制设备和信息,例如-List of available devices:serial 80000003 SIO s

24、tdin stdout stderrlcp内存拷贝,cp 源地址 目的地址 拷贝大小(字节) help cpcp .b, 。w, 。l source target countANE2410 # cp 0x30008000 0x3000f000 64ldate获得/设置/重设日期和时间# dateDate: 200666 (Tuesday) Time: 06:06:06lerase(F)擦除FLASH MEMORY, 由于该ARM板没有Nor Flash, 所有不支持该命令。 help eraseerase start end erase FLASH from addr start to add

25、r enderase start +len erase FLASH from addr start to the end of sect w/addr start+len-1erase N:SF-SL- erase sectors SF-SL in FLASH bank # Nerase bank N erase FLASH bank # Nerase all erase all FLASH bankslflinfo(F)打印Nor Flash信息, 由于该ARM板没有Nor Flash, 所有不支持该命令.liminfo打印和校验内核镜像头, 内核的起始地址由CFG_LOAD_ADDR指定:

26、define CFG_LOAD_ADDR 0x30008000 /* default load address /该宏在include/configs/zte2410。h中定义。# iminfo# Checking Image at 30008000 。.。Image Name: Linux-2。6。14.1Created: 2006-06-28 7:43:01 UTCImage Type: ARM Linux Kernel Image (uncompressed)Data Size: 1047080 Bytes = 1022.5 kBLoad Address: 30008000Entry P

27、oint: 30008040Verifying Checksum . OKlloadb从串口下载二进制文件# loadb Ready for binary (kermit) download to 0x30008000 at 115200 bps.# Total Size = 0x00000000 = 0 Bytes Start Addr = 0x30008000lmd显示指定内存地址中的内容 md 000000000: ea000012 e59ff014 e59ff014 e59ff014 .。.。.。.。00000010: e59ff014 e59ff014 e59ff014 e59ff0

28、14 .。.。.。.。.。.。00000020: 33f80220 33f80280 33f802e0 33f80340 。3.。3。.3。.300000030: 33f803a0 33f80400 33f80460 deadbeef .。3.。.3。.3.。.00000040: 33f80000 33f80000 33f9c0b4 33fa019c 。.3.。.3。.3.。300000050: e10f0000 e3c0001f e38000d3 e129f000 .。.。.。.)。00000060: e3a00453 e3a01000 e5801000 e3e01000 S.。.。.。.。

29、.00000070: e59f0444 e5801000 e59f1440 e59f0440 D。.。.。.。.。00000080: e5801000 e59f043c e3a01003 e5801000 。.。.00000090: eb000051 e24f009c e51f1060 e1500001 Q。.。.O.。P。000000a0: 0a000007 e51f2068 e51f3068 e0432002 .。h 。h0。 C。000000b0: e0802002 e8b007f8 e8a107f8 e1500002 。 .。.。.。P。000000c0: dafffffb e51f008c e2400803 e

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 考试专区 > 中考

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服