uboot移植初步成功啦
移植的uboot版本为1.4版,用的编译工具链为arm-elf-。不能用arm-linux编译,原因是用的c库不同。简单的说就是arm-linux是为有MMU硬件单元的处理器配置的,如ARM9器件,而arm-elf-则是用于无MMU的cpu的,如ARM7。(也试了一下,用arm-linux-编译得到的uboot.bin加载到SDRAM中运行后无显示)。arm-elf-gcc版本为2.93版本的(有点低,还需要修改cpus3c44b0config.mk,后面提到)。在uboot1.4版本中符合s3c44b0内核的板子为daveB2板,移植就是基于该板子的,当然实际板子有很多硬件情况与它不同,需要修改。
现在就分别讲讲所要修改的文件和具体修改吧:"uboot"表示uboot的根目录
ubootMakefile:在uboot中,默认的编译器为arm-linux-,所以首先要修改的就是把编译器改为arm-elf-:
ifeq ($(ARCH),arm) CROSS_COMPILE = arm-linux- endif
只需要把arm-linux-改为arm-elf-就行
同时,要增加自己的板子在Makefile中的配置:
B2_config : unconfig
@./mkconfig $(@:_config=) arm s3c44b0 B2 dave
该句增加了B2板子在Makefile中的配置,其中向编译器传递了四个参数:cpu体系 cpu类型 板子 公司
可仿造该板子增加自己板子的设置,其中板子和公司可自取,为了文件,都取为44b0,增加配置如下:
44b0_config:unconfig
@./mkconfig $(@:_config=) arm s3c44b0 44b0 44b0
ubootoard:该文件夹放置了所有uboot支持的板子。故要在此文件夹中增加自己的板子。移植嘛,就是在原有的基础上修改成符合自己的就行了。于是可以把dave复制成44b0放在该文件夹下。同时,把44b0所有插着B2标志的文件夹或文件都复制成44b0(这里我们就不删除daveB2吧)。然后我们修改操作就是针对44b0的,那才是我们需要的。
ubootoard44b044b044b0.c:该文件就两个函数:board_init(),dram_init()。其中dram_init()无需修改,不过却给了我们个信号:关于SDRAM的映射起始地址和SDRAM的大小。而board_init()似乎也是不需要怎么改的。主要是配置一下IO。口但B2板子没有初始化Port c。因为我的板子上有三个LED在Port c,所以还是初始化一下吧。也许后面要用到的话还得到这里来改
ubootincludeconfigs:我们的配置文件也还是要借用B2的,(哎,谁叫咱是兄弟呢)和前面一样,把所有标着B2的文件夹和文件都复制成44b0(不要删除了B2)。现在就修改一下44b0.h吧
ubootincludeconfigs44b0.h:这个文件就是配置板子的各个参数。配置项还是比较多的,主要是根据板子的实际硬件情况来修改相应的数值或定义。主要修改的如下:
#define CONFIG_B2-------->#define CONFIG_44b0
#define CONFIG_S3C44B0_CLOCK_SPEED 75
定义板子的系统时钟,我的板子配置成40M比较麻烦,后见分晓~~~
#undef CONFIG_USE_IRQ
不定义USE_IRQ堆栈。如果要在SDRAM中用到IRQ堆栈的话,这里就应该定义了
#define CONFIG_BOOTDELAY 5------>#define CONFIG_BOOTDELAY 6
定义UBOOT引导系统的选择延时:如果定义自动加载系统的话,超过了这个定义 的计数之后,UBOOT将自己加载系统。我把计数数改为6了,在SDRAM中调试的时候,看着显示的倒计时数为5开始时,就知道移植成功了
#define CFG_MEMTEST_START 0x0C400000 /* memtest works on */
#define CFG_MEMTEST_END 0x0C800000 /* 4 ... 8 MB in DRAM */
这个都是根据B2板子来设定的,而我的板子则不是它们,而是下面的:
#define CFG_MEMTEST_START 0x0C040000 起始值还是应该计算计算滴
#define CFG_MEMTEST_END 0x0C100000 /这个最大什为TEXT_BASE
#define CFG_LOAD_ADDR 0x0c700000 /* default load address */
默认的加载系统的地址,还是改了吧,这个地址太大了,不合适啊,
#define CFG_LOAD_ADDR 0x0c008000
#define PHYS_SDRAM_1 0xc0000000 /* SDRAM Bank #1 */
#define PHYS_SDRAM_1_SIZE 0x01000000 /* 16 MB */
#define PHYS_FLASH_1 0x00000000 /* Flash Bank #1 */
#define PHYS_FLASH_SIZE 0x00400000 /* 4 MB */
关于SDRAM和flash的起始地址和大小的宏定义。当然,也是不符合实际情况的
#define PHYS_SDRAM_1 0x0c000000 映射起始地址 0x0c000000
#define PHYS_SDRAM_1_SIZE 0x00800000 大小:8M
#define PHYS_FLASH_1 0x00000000 映射起始地址 0x00000000
#define PHYS_FLASH_SIZE 0x00200000 大小:2M
#de
uboot移 相关文章:
- minis3c2440移植之uboot移植(11-24)
- uboot移植详解(11-13)
- uboot移植到S3C44B0X开发板的经历(11-11)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)