uboot_分析.docx_第1页
uboot_分析.docx_第2页
uboot_分析.docx_第3页
uboot_分析.docx_第4页
全文预览已结束

下载本文档

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

文档简介

1. 配置开发板查找当前使用开发板对应的配置头文件是否存在?根据REDEME文件可知,在编译uboot之前要配置开发板,通过以下命令:make 开发板名_config 输入:make qq2440_config,显示如下错误:make: * 没有规则可以创建目标“qq2440_config”。 停止。显然uboot不支持qq2440开发板,我们要自己进行配置,QQ2400是山寨的三星的smdk2410的开发板输入:make smdk2410_config,配置成功2. 分析Makefile文件1879行里是对应smdk2410开发板的配置参数,通过分析知道,其实执行make smdk2410_config就是调用mkconfig smdk2410 arm arm920t smdk2410 NULL s3c24x0我们可以通过增加qq2440的选项方式来增加对qq2440开发板的支持:在1882行,添加复制smdk2410选项代码,修改为(红色部分为修改部分):1882 qq2440_config : unconfig1883 $(MKCONFIG) $(:_config=) arm arm920t smdk2410 NULL s3c24x03. 分析mkconfigMkconfig是根据传递过来的6个参数sdmk2410 arm arm920t smdk2410 NULL s3c24x0做相关的一些配置,主要完成以下功能:1 打印配置信息:28 echo Configuring for $BOARD_NAME board.2 创建和指定开发板体系结构相关的引入头文件目录(33行至62行)3 生成include/config.mk1 ARCH = arm2 CPU = arm920t3 BOARD = smdk24104 SOC = s3c24x04 生成include/config.h 1 /* Automatically generated - do not edit */ 2 #include 最后一步生成的config.h里是行包含文件代码。该包含文件smdk2410.h里都是和smdk2410开发板相关的硬件配置选项。下面要分析一下smdk2410.h4. 分析include/configs/smdk2410.h全文看下可知,里面全是一些宏定义,这些宏主要是用来配置具体开发板上的硬件。例如下面代码:36 #define CONFIG_ARM920T 1 /* This is an ARM920T Core */37 #define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */38 #define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */ 39 40 /* input clock of PLL */41 #define CONFIG_SYS_CLK_FREQ 12000000/* the SMDK2410 has 12MHz input clock */36行是指:开发板使用ARM920T CPU37行:使用s3c2410平台41行:指定系统输入时钟为12MHz,也就是外部晶振为12MHz由于QQ2440是山寨的SMDK2410开发板所以将该头文件复制成qq2440.h头文件即可,由前面mkconfig分析可知,第四个参数要改为qq2440,因此:cp include/configs/smdk2410.h include/configs/qq2440.h将根目录下的Makefile第1883行smdk2410改为qq24401882 qq2440_config : unconfig1883 $(MKCONFIG) $(:_config=) arm arm920t qq2440 NULL s3c24x0到现在就可以执行make qq2440_config再执行make命令,将编译出的结果uboot.bin烧写到开发板上,没有任何结果,说明还需要进行配置,由于配置已经完毕,下面只能通过分析uboot源码来看到底是哪儿出了问题。5. 分析uboot源码通过Makefile第167行注解可知,第一个编译进uboot.bin的文件是cpu/$(CPU)/start.o对应的cpu/arm/start.S,它也是uboot最先运行的代码,先从它开始分析。166 # 167 # U-Boot objects.order is important (i.e. start must be first) 168 169 OBJS = cpu/$(CPU)/start.o Start.S第一条指令(41行):_start:b reset跳转到reset符号处(110行),主要完成以下操作:1 设置CPU为管理模式2 关闭mmu,Data cache,跳转到内存初始化代码(160行,调用241行代码,跳转到Board/smdk2410/lowlevel_init.S中)3 内存已经初始化,拷贝Uboot代码到内存(164行至180行)4 初始化栈指针(183行至190行)5 初始化BSS段(192行至200行)6 223行跳转到start_armboot函数,并且运行在内存中(C程序Board.c中236行)6. 分析Board.c 函数start_armboot1 开发板相关数据gd, bdgd指针:存放全局数据,例如,开发板数据信息bd,串口波特率baudrate,uboot环境变量地址env_addr,内存大小ram_size等typedefstructglobal_data bd_t*bd;unsigned longflags;unsigned longbaudrate;unsigned longhave_console;/* serial_init() was called */unsigned longreloc_off;/* Relocation Offset */unsigned longenv_addr;/* Address of Environment struct */unsigned longenv_valid;/* Checksum of Environment valid? */unsigned longfb_base;/* base address of frame buffer */#ifdef CONFIG_VFDunsigned charvfd_type;/* display type */#endif#if 0unsigned longcpu_clk;/* CPU clock in Hz!*/unsigned longbus_clk;unsigned longram_size;/* RAM size */unsigned longreset_status;/* reset status register at boot */#endifvoid*jt;/* jump table */ gd_t;bd指针:保存开发板相关信息,如开发板Ip,主机ip地址,内存开始,结束地址,flash开始,结束地址等。typedef struct bd_info int bi_baudrate;/* serial console baudrate */unsigned long bi_ip_addr;/* IP Address */unsigned char bi_enetaddr6;/* Ethernet adress */unsigned long bi_arch_number;/* unique id for this board */unsigned long bi_boot_params;/* where this board expects params */unsigned long bi_memstart;/* start of DRAM memory */unsigned long bi_memsize;/* size of DRAM memory in bytes */unsigned long bi_flashstart;/* start of FLASH memory */unsigned long bi_flashsize;/* size of FLASH memory */unsigned long bi_flashoffset;/* reserved area for startup monitor */ bd_t;通过函数指针init_fnc_ptr依次调用函数指针数组init_sequence中的函数:init_fnc_t *init_sequence = cpu_init,/* basic cpu dependent setup */board_init,/* basic board dependent setup */interrupt_init,/* set up exceptions */env_init,/* initialize environment */init_baudrate,/* initialze baudrate settings */serial_init,/* serial communications setup */console_init_f,/* stage 1 init of console */display_banner,/* say that we are here */#if defined(CONFIG_DISPLAY

温馨提示

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

评论

0/150

提交评论