340 likes | 491 Views
skyeye下运行u-boot. 实验内容. 1、在u-boot-1.2.0下实现对ep7312的移植 2、在u-boot-1.1.6下实现对s3c2410的移植. u-boot介绍. U-BOOT是Sourceforge上一个开源的固件程序,提供了对PowerPC(MPC5xx,MPC8xx,MPC82xx,4xx)、ARM(ARM7,ARM9,strongARM,Xscale)、MIPS、X86等处理器的支持。主要用来开发嵌入式系统的初始化代码和bootloader. u-boot介绍.
E N D
实验内容 1、在u-boot-1.2.0下实现对ep7312的移植 2、在u-boot-1.1.6下实现对s3c2410的移植
u-boot介绍 • U-BOOT是Sourceforge上一个开源的固件程序,提供了对PowerPC(MPC5xx,MPC8xx,MPC82xx,4xx)、ARM(ARM7,ARM9,strongARM,Xscale)、MIPS、X86等处理器的支持。主要用来开发嵌入式系统的初始化代码和bootloader.
u-boot介绍 • U-Boot的源代码布局和Linux类似,使用了按照模块划分的结构,并且充分考虑了体系结构和跨平台问题,右图为整体架构:
U-Boot启动流程分析 • U-Boot支持许多的处理器和开发板,主要是该软件有良好的架构,以使用ARM处理器的smdk2410开发板为例分析U-Boot的启动流程,在其他的处理器架构上,U-Boot也执行类似的启动流程。 • 关键点: • 每个处理器下的start.S(_start)
U-Boot移植的一般步骤 1.检查U-Boot工程是否支持目标平台 主要检查U-Boot根目录下的Readme文件是否提到目标平台处理器,cpu目录下是否有目标平台的处理器目录,以及board目录下是否有目标平台类似的工程。如果U-Boot已经编写了与目标平台类似的工程文件,移植工作会大大减轻。 2.分析目标平台类似工程目录结构 如果U-Boot有与目标平台类似的工程,需要分析一下目标板工程目录的结构。不同的目标板可能差别很大,分析工程目录中有哪些文件可以被新的目标开发板利用。 3.分析目标平台代码 目标平台代码分析可以按照U-Boot启动流程分析,看哪些代码是额外的,是否需要去掉额外的代码。 4.建立新的开发板平台目录 在board目录下建立新的开发板平台目录,目录下的文件可以从现有类似的开发板平台目录下复制得到。 5.对照手册修改平台差异部分代码 对照硬件手册,按照U-Boot启动流程修改现有代码与新平台有差异的部分。 6.调试新代码 新修改的代码很可能启动不了,需要通过JTag调试器跟踪调试。找出原因修改后再调试,直到正确启动。 以上分析的6个步骤并非必须严格遵守,这里仅是提供一个一般的思路,在移植的时候需要结合自己的目标板情况来分析。
1、在u-boot-1.2.0下实现对ep7312的移植 • 实验环境: u-boot-1.2.0 arm-linux-gcc (3.3.2) skyeye
1、在u-boot-1.2.0下实现对ep7312的移植 • 下载u-boot-1.2.0.tar.bz2 • 解压缩: • tar xjvf u-boot-1.2.0.tar.bz2
1、在u-boot-1.2.0下实现对ep7312的移植 • 因为要模拟EP7312的芯片,而uboot已经支持一个基于EP7312的开发板,所以只要对uboot里面有关EP7312的板子的配置略做修改就可以了。 • uboot里面有关主板的配置文件都在“include/configs/*.h”下 • 所以找到 include/configs/ep7312.h
1、在u-boot-1.2.0下实现对ep7312的移植 • 找到 #define CONFIG_DRIVER_CS8900 1 改为: #define CONFIG_DRIVER_CS8900 0
1、在u-boot-1.2.0下实现对ep7312的移植 • 找到 #define CONFIG_COMMANDS(CONFIG_CMD_DFL | CFG_CMD_JFFS2) • 改为 #define CONFIG_COMMANDS(CONFIG_CMD_DFL )
1、在u-boot-1.2.0下实现对ep7312的移植 • 为编译通过,还需要修改:cpu/arm720t/config.mk
1、在u-boot-1.2.0下实现对ep7312的移植 • 修改include/asm-arm/processor.h中 • union debug_insn{ • u32 Arm; • u16 thumb; • }
1、在u-boot-1.2.0下实现对ep7312的移植 • 修改example/Makefile中:(红框为增加内容)
1、在u-boot-1.2.0下实现对ep7312的移植 • 然后再uboot根目录下,配置,编译: • 执行:make ep7312_config
1、在u-boot-1.2.0下实现对ep7312的移植 • 在此注意一点,与u-boot-1.2.0相匹配的编译器是arm-linux-gcc为3.3.2版本 • 则要将根目录下的Makefile中的CROSS_COMPILE设置为3.3.2的路径 • 如下图为我的实验环境:
1、在u-boot-1.2.0下实现对ep7312的移植 • 之后执行 make all • 得到如下结果:
1、在u-boot-1.2.0下实现对ep7312的移植 u-boot.map 将地址和符号的映射关系 u-boot u-boot.bin 二进制文件 u-boot.srec 描述地址与数据的文件格式
1、在u-boot-1.2.0下实现对ep7312的移植 • 将上述四个文件拷贝到新建的目录中:
1、在u-boot-1.2.0下实现对ep7312的移植 • 将skyeye配置文件放在相同目录下:
1、在u-boot-1.2.0下实现对ep7312的移植 • 在/test-uboot/目录下执行 : • skyeye -c skyeye.conf -e u-boot可看到最终结果:
2、在u-boot-1.1.6下实现对s3c2410的移植 • 实验环境: • u-boot-1.1.6 • arm-linux-gcc 版本为3.3.2
2、在u-boot-1.1.6下实现对s3c2410的移植 • 配置板子SDROM和FLASH参数为板子实际大小,找到u-boot-1.1.6/include/configs/smdk2410.h,修改其中的PHYS_SDRAM_1_SIZE为板子实际SDRAM大小,CFG_MAX_FLASH_SECT为128,修改PHYS_FLASH_SIZE为板子实际FLASH大小。并保存。 • 修改如下:
2、在u-boot-1.1.6下实现对s3c2410的移植 • 之后依次执行: make distclean make msdk2410_config make all 执行完毕后,依然可以看到根目录下生成的文件:
2、在u-boot-1.1.6下实现对s3c2410的移植 新建文件命名为skyeye.conf并放在TestArm目录下,文件内容如下 cpu: arm920t mach: s3c2410x mem_bank:map=I,type=RW,addr=0x48000000,size=0x20000000 #注意此处的addr一定要与上面smdk2410.h配置的SDRAM和FLASH的大小与基地址一定要相同,否则启动不起来,卡在那里。 #下面这一句和FLASH一样 mem_bank:map=M,type=RW,addr=0x00000000,size=0x04000000,file=u-boot,boot=yes #下面这一句和SDRAM一样 mem_bank:map=M,type=RW,addr=0x30000000,size=0x04000000
2、在u-boot-1.1.6下实现对s3c2410的移植 • 该skyeye.conf已经提供:
2、在u-boot-1.1.6下实现对s3c2410的移植 • 之后执行命令: • skyeye -c skyeye.conf -e u-boot • 可得到如下结果:
实验报告 • 1、U-BOOT移植步骤; • 2、分析U-BOOT代码结构、执行流程;