微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > uboot移植初步成功啦

uboot移植初步成功啦

时间:11-29 来源:互联网 点击:
 先说说移植吧,代码上的移植:只是基于代码的改动,而不包括知道代码改动的背后~~

 移植的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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top