移植u-boot-2011.09-rc1到FL2440(1)
最近工作稳定下来,开始折腾我那可怜的开发板,首先我想为它移植一个uboot,顺便记录下,以便以后查阅。下载最新的uboot,u-boot-2011.09-rc1.tar.gz,解压后,CD到其目录下。移植环境:主机:ubuntu10.4 vbox虚拟机编译器:
最近工作稳定下来,开始折腾我那可怜的开发板,首先我想为它移植一个uboot,顺便记录下,以便以后查阅。
下载最新的uboot,u-boot-2011.09-rc1.tar.gz,解压后,CD到其目录下。
移植环境:
主机:ubuntu10.4 vbox虚拟机
编译器:arm-linux-gcc 4.3.2
参考平台:SMDK2410
1.创建板子文件夹和配置文件:
cp board/samsung/smdk2410 board/samsung/fl2440 –rf
mv board/samsung/fl2440/smdk2410.c board/samsung/fl2440/fl2440.c
vi board/samsung/fl2440/Makefile
修改COBJS :=fl2440.o
cp include/configs/smdk2410.h include/configs/fl2440.h
vi 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等时钟的,关于这一部分有篇博客写得很好:保存,修改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。
更多推荐
所有评论(0)