Welcome 微信登录

首页 / 操作系统 / Linux / 移植u-boot-2011.09-rc1到FL2440

最近工作稳定下来,开始折腾我那可怜的开发板,首先我想为它移植一个uboot,顺便记录下,以便以后查阅。下载最新的uboot,u-boot-2011.09-rc1.tar.gz,解压后,CD到其目录下。U-Boot源代码下载地址 http://www.linuxidc.com/Linux/2011-07/38897.htm移植环境:
主机:Ubuntu 10.4 vbox虚拟机编译器:arm-linux-gcc 4.3.2参考平台:SMDK2410
1.创建板子文件夹和配置文件:
cp board/samsung/smdk2410  board/samsung/fl2440 –rfmv board/samsung/fl2440/smdk2410.c  board/samsung/fl2440/fl2440.cvi board/samsung/fl2440/Makefile      修改COBJS :=fl2440.ocp include/configs/smdk2410.h  include/configs/fl2440.hvi include/configs/fl2440.h      增加#define  CONFIG_SKIP_LOWLEVEL_INIT 1 //首先将在SDRAM中测试,所以跳过CPU初始化过程vi Makefile      930行增加:      fl2440_config:unconfig       @$(MKCONFIG) $(@:_config=) arm arm 920t  fl2440 samsung s3c24x0      161行修改:      CROSS_COMPILE ?= arm-linux-保存后,可以进行测试:    make clean    make fl2440_config    make然后会生成二进制文件u-boot.bin, 这个时候把程序放到开发板上是运行不了的,因为通过DNW下载的程序,它会从指定位置运行,而u-boot默认代码地址为0。修改DNW配置,设置下载地 址为0x32000000(FL2440的DRAM空间是0x30000000~0x34000000,共64M),然后修改fl2440.h:vi include/configs/fl2440.h#define CONFIG_SYS_TEXT_BASE    0x32000000然后重新生成uboot.bin,在DNW主菜单中选择0,就可以通过USB将uboot.bin下载到开发板运行了,当然运行会出错的。
2.修改配置
网上大部分的博客都是使用S3C2410的配置,我不想用这个,因为uboot已支持S3C2440。修改include/configs/fl2440.h去掉这两行:#defineCONFIG_S3C2410          /*specifically a SAMSUNG S3C2410 SoC */
#define CONFIG_SMDK2410         /* on aSAMSUNG SMDK2410 Board */增加:#define CONFIG_S3C2440
将NAND配置先注释起来,不然会有很多错误:/*#define CONFIG_CMD_NAND*/
更改内存范围,将:#defineCONFIG_SYS_MEMTEST_END         0x33F00000 修改为:#defineCONFIG_SYS_MEMTEST_END         0x34000000
3.修改时钟
vi arch/arm/cpu/arm920t/start.S在163行处增加:# if defined(CONFIG_S3C2440)
        ldr     r1,=0x7fff
        ldr     r0,=INTSUBMSK
        str     r1, [r0]
# endif这里是屏蔽中断,S3C440用到了15位,所以把值设置成0x7fff将下面这段去掉:ldr     r0, =CLKDIVN
mov     r1, #3
str     r1, [r0]

增加这样一段:# if defined(CONFIG_S3C2440)
        ldr     r0,=CLKDIVN
        mov     r1, #5
        str     r1, [r0]
#endif
这里主要是设置FCLK,HCLK,PCLK等时钟的,关于这一部分有篇博客写得很好:FCLK,HCLK和PCLK的关系保存,修改fl2440.c:vi board/samsung/fl2440/fl2440.c将这段去掉:#define FCLK_SPEED 1

#ifFCLK_SPEED==0              /* Fout = 203MHz, Fin = 12MHz for Audio */
#define M_MDIV  0xC3
#define M_PDIV  0x4
#define M_SDIV  0x1
#elifFCLK_SPEED==1            /* Fout = 202.8MHz */
#define M_MDIV  0xA1
#define M_PDIV  0x3
#define M_SDIV  0x1
#endif
#define USB_CLOCK 1

#if USB_CLOCK==0
#define U_M_MDIV        0xA1
#define U_M_PDIV        0x3
#define U_M_SDIV        0x1
#elif USB_CLOCK==1
#define U_M_MDIV        0x48
#define U_M_PDIV        0x3
#define U_M_SDIV        0x2
#endif

增加这段:
#define M_MDIV 0x7f
#define M_PDIV 0x2
#define M_SDIV 0x1

#define U_M_MDIV 0x38
#define U_M_PDIV 0x2
#define U_M_SDIV 0x2
因为FL2440的晶振为12M,在芯片手册可以查到这些值,使得CPU频率为405M,USB时钟频率为48M在board_init函数中,修改:
gd->bd->bi_arch_number = MACH_TYPE_SMDK2410;
为:
gd->bd->bi_arch_number = MACH_TYPE_S3C2440; 这样,时钟就设置好了,保存,重新生成u-boot.bin,下载到开发板运行,就可以看到串口打印信息了:U-Boot 2011.09-rc1 (Oct 03 2011 - 20:32:32)


DRAM:  64 MiB

WARNING: Caches not enabled

Flash: *** failed ***

### ERROR ### Please RESET the board ###
下一步的话,考虑让UBOOT支持NAND FLASH。