u-boot-2010.09移植到fl2440开发板

第一阶段

1.准备

虚拟机centOS

linux版本2.6.32

交叉编译器4.5.4(可使用buildroot-2012.08制作)

以上工具已经准备好,具体安装步骤不在赘述。

2.从http://ftp.denx.de/pub/u-boot/下载u-boot-2010.09的源码包,注意不要下u-boot-2010.09-rc1.tar.bz2或u-boot-2010.09-rc2.tar.bz2 版本的 ,因为带rc的为测试版本,我们下载u-boot-2010.09.tar.bz2

3.新建u-boot-2010.09用于存放我们下载的源码包

[[email protected] u-boot-2010.09]$ mkdir u-boot-2010.09

4.进入u-boot-2010.09目录,上传u-boot源码包

5.解压源码包

[[email protected] u-boot-2010.09]$ tar -xjf u-boot-2010.09.tar.bz2

6.打开U-boot-2010.09解压目录下的boards.cfg在241行smdk2410后添加fl2440的配置选项:

fl2440          arm arm920t     fl2440      -       s3c24x0

(注意这里不能写错,我曾经就把s3c24x0写成s3c2440,编译会报错)

7.在/board子目录中建立自己的开发板fl2440目录,并以smdk2410为模板,建立文件

[[email protected] u-boot-2010.09]$ cd board

[[email protected] board]$ mkdir fl2440
[[email protected] board]$ cp -arf samsung/smdk2410/* fl2440
[[email protected] board]$ mv fl2440/smdk2410.c fl2440/fl2440.c

修改fl2440目录下的Makefile中的28行

COBJS  := smdk2410.o flash.o为

COBJS  := fl2440.o flash.o

8.在include/configs/中建立开发板的配置头文件

[[email protected] u-boot-2010.09]$ cp include/configs/smdk2410.h include/configs/fl2440.h

9.测试编译是否成功(成功)

[[email protected] u-boot-2010.09]$ make fl2440_config
Configuring for fl2440 board...

第二阶段   串口打印启动信息

1.修改文件arch/arm/cpu/arm920t/start.S

将117,118两行注释掉,这个是用于LED跳转的,没什么用,也没有程序可跳

117 @   bl  coloured_LED_init
118 @   bl  red_LED_on

2.将134-170 行注释掉,这个代码是定义特殊寄存器和屏蔽中断的,我们将在后面的程序中操作

3.进入board/fl2440/lowlevel_init.S

在128行,添加以下寄存器定义

#define S3C24X0_INTERRUPT_BASE      0x4A000000

#define S3C24X0_CLOCK_POWER_BASE    0x4C000000

#define S3C2410_NAND_BASE           0x4E000000

#define S3C24X0_WATCHDOG_BASE       0x53000000

#define S3C24X0_GPIO_BASE           0x56000000

#define GPBCON                      0x56000010

#define GPBDAT                      0x56000014

#define GPBUP                       0x56000018

#define INTMSK_OFFSET               0x08

#define INTSUBMSK_OFFSET            0x1c

#define MPLLCON_OFFSET              0x04

#define CLKDIVN_OFFSET              0x14

#define NFCONF_OFFSET               0x00

#define NFCONT_OFFSET               0x04

#define NFCMD_OFFSET                0x08

#define NFSTAT_OFFSET               0x20

#define MDIV_405                    0x7f << 12

#define PSDIV_405                   0x21

#define MDIV_200                    0xa1 << 12

#define PSDIV_200                   0x31

在155行lowlevel_init:后面添加

关闭看门狗

/****** Disable Watchdog ******/

ldr r0, =S3C24X0_WATCHDOG_BASE

mov r1, #0

str r1, [r0]

接着屏蔽所有中断

/****** Disable interrupt by mask all IRQ mask ******/

ldr r0, =S3C24X0_INTERRUPT_BASE

mvn r1, #0x0

str r1, [r0, #INTMSK_OFFSET]

str r1, [r0, #INTSUBMSK_OFFSET]

接着初始化系统时钟,总线时钟

/****** Initialize System Clock, FCLK:HCLK:PCLK = 1:4:8,default FCLK is 120MHz ******/

ldr r0, =S3C24X0_CLOCK_POWER_BASE

mov r1, #5

str r1, [r0, #CLKDIVN_OFFSET]

mrc p15, 0, r1, c1, c0, 0

orr r1, r1, #0xc0000000

mcr p15, 0, r1, c1, c0, 0

mov r2, #MDIV_405

add r2, r2, #PSDIV_405

str r2, [r0, #MPLLCON_OFFSET]

接着初始化nandflash

/***** Initialize Nandflash controller ******/
     mov r1, #S3C2410_NAND_BASE
    ldr r2, =( (7<<12)|(7<<8)|(7<<4)|(0<<0) )
     str r2, [r1, #NFCONF_OFFSET]
 
     ldr r2, =( (1<<4)|(0<<1)|(1<<0) )   @ Active low CE controller
     str r2, [r1, #NFCONT_OFFSET]
     ldr r2, =(0x6)                      @ RnB Clear
     str r2, [r1, #NFSTAT_OFFSET]
     mov r2, #0xff                       @ Reset Nandflash
     strb    r2, [r1, #NFCMD_OFFSET]
     mov r3, #0       @ Delay for a while

delay:
     add r3, r3, #0x1
     cmp r3, #0xa
     blt delay

wait:
     ldr r2, [r1, #NFSTAT_OFFSET]  @ wait ready
     tst r2, #0x4
     beq wait

4.修改include/asm/arch-s3c24x0/s3c24x0.h

将该文件中所有的#if defined(CONFIG_S3C2410)

都修改为#if defined(CONFIG_S3C2410) || defined (CONFIG_S3C2440)

支持s3c2440开发板

在160行左右修改nandflash的寄存器定义,修改s3c2410_nand结构体为如下

#if defined (CONFIG_S3C2440)

/*   NAND FLASH (see S3C2440 manual chapter 6) */

struct s3c2410_nand

{

u32 NFCONF;
    u32 NFCONT;
    u32 NFCMD;
    u32 NFADDR;
    u32 NFDATA;
    u32 NFMECCD0;
    u32 NFMECCD1;
    u32 NFSECCD;
    u32 NFSTAT;
    u32 NFESTAT0;
    u32 NFESTAT1;
    u32 NFMECC0;                
    u32 NFMECC1;
    u32 NFSECC;
    u32 NFSBLK;
    u32 NFEBLK;

};

#endif

124行左右修改s3c24x0_clock_power结构体如下

struct s3c24x0_clock_power

{

u32 LOCKTIME;

u32 MPLLCON;

u32 UPLLCON;

u32 CLKCON;

u32 CLKSLOW;

u32 CLKDIVN;

#if defined (CONFIG_S3C2440)

u32 CAMDIVN;

#endif

};

5.include/asm/arch/s3c24x0_cpu.h,补充对s3c2440的支持

23行,修改#elif defined (CONFIG_S3C2410)为

#elif defined (CONFIG_S3C2410) || (CONFIG_S3C2440)

6.修改arch/arm/cpu/arm920t/s3c24x0/timer.c文件

184行添加支持s3c2440

defined(CONFIG_S3C2440) || \

7.修改arch/arm/cpu/arm920t/s3c24x0/speed.c

在static ulong get_PLLCLK(int pllreg)函数里大概66行(return (CONFIG_SYS_CLK_FREQ * m) / (p << s);的上一行)添加

#if defined(CONFIG_S3C2440) /* add by weishusheng */

if(pllreg == MPLL)

return((CONFIG_SYS_CLK_FREQ * m * 2) / (p << s));

else if(pllreg == UPLL)

#endif

80行左右修改get_HCLK()函数如下

ulong get_HCLK(void)

{

struct s3c24x0_clock_power *clk_power = s3c24x0_get_base_clock_power();

//return (readl(&clk_power->CLKDIVN) & 2) ? get_FCLK() / 2 : get_FCLK();

#if defined(CONFIG_S3C2440) /* Modify by hurryliu*/

if (readl(&clk_power->CLKDIVN) & 0x6)

{

if ((readl(&clk_power->CLKDIVN) & 0x6)==2)

return(get_FCLK()/2);

if ((readl(&clk_power->CLKDIVN) & 0x6)==6)

return((readl(&clk_power->CAMDIVN) & 0x100) ? get_FCLK()/6 : get_FCLK()/3);

if ((readl(&clk_power->CLKDIVN) & 0x6)==4)

return((readl(&clk_power->CAMDIVN) & 0x200) ? get_FCLK()/8 : get_FCLK()/4);

return(get_FCLK());

}

else

return(get_FCLK());

#else

return((readl(&clk_power->CLKDIVN) & 0x2) ? get_FCLK()/2 : get_FCLK());

#endif /* Modify end*/

}

8.修改lowlevel_init.S  修改各个bank寄存器数值

[[email protected] u-boot-2010.09]$ vim board/fl2440/lowlevel_init.S

54行的#define B1_BWSCON       (DW32)    改为#define B1_BWSCON       (DW16)

88行左右B3_改为如下(前面的数字是我的行号)

88 #define B3_Tacs         0xc

89 #define B3_Tcos         0x7 
 90 #define B3_Tacc         0xf 
 91 #define B3_Tcoh         0x1 
 92 #define B3_Tah          0x0 
 93 #define B3_Tacp         0x0     
 94 #define B3_PMC          0x0

144行左右修改为如下

104 #define B5_Tacs         0xc 
105 #define B5_Tcos         0x7 
106 #define B5_Tacc         0xf 
107 #define B5_Tcoh         0x1 
108 #define B5_Tah          0x0 
109 #define B5_Tacp         0x0
110 #define B5_PMC          0x0

120行左右 /* REFRESH parameter */改为如下

120 /* REFRESH parameter */
121 #define REFEN           0x1 /* Refresh enable */
122 #define TREFMD          0x0 /* CBR(CAS before RAS)/Auto refresh */
123 #define Trc             0x3 /* 7clk     add by wei*/
124 #define Tchr            0x2 /* 3clk */
125 
126 
127 #if defined(CONFIG_S3C2440)
128 #define Trp         0x2 /* 4clk */
129 #define REFCNT          1012
130 #else
131 #define Trp         0x0 /* 2clk */
132 #define REFCNT      0x0459
133 #endif
134 /**************************************/

9.修改include/configs/fl2440.h

在38行添加#define CONFIG_S3C2440     1

在31行定义在内存中运行的宏,支持在内存中运行(当需下载到nandflash时把以下这个宏去掉)

#define  CONFIG_SKIP_LOWLEVEL_INIT     1

在120行,修改为自己的开发板启动信息

#define CONFIG_SYS_PROMPT       "[[email protected]]# "

这些工作做完后,下载到内存中运行,连接串口,就可以看到打印的信息了(如下)

U-Boot 2010.09 (Aug 18 2014 - 11:17:12)

DRAM:  64 MiB

Flash: 512 KiB

*** Warning - bad CRC, using default environment

In:    serial

Out:   serial

Err:   serial

Net:   CS8900-0

[[email protected]]#

[[email protected]]#

[[email protected]]#

u-boot-2010.09移植到fl2440开发板

时间: 2024-10-06 00:27:52

u-boot-2010.09移植到fl2440开发板的相关文章

u-boot-2010.09移植到fl2440开发板(B)

前面我们的u-boot只是在内存中运行,要想在nandflash中运行,以达到开机自启的目的,还需作如下修改 一.添加DM9000网卡支持 1.修改board/fl2440/fl2440.c中的board_eth_init函数,支持DM9000网卡 #ifdef CONFIG_CMD_NET int board_eth_init(bd_t *bis) { int rc = 0; #ifdef CONFIG_CS8900 rc = cs8900_initialize(0, CONFIG_CS890

uboot-2012.07移植到fl2440开发板(一)

原文 以前移植uboot总是用相同的版本按照网上的步骤进行移植,现在我想尝试一下移植最新版本的uboot,可能会遇到很多困难,但我会一步一步来,顺便记录下下移植过程,便于以后的回顾. 移植环境 1,主机环境:VMare下fedora9 ,1G内存. 3,编译编译环境:arm-linux-gcc 4.3.2 4,开发板:fl2440,256M nand flash. 5,u-boot版本:u-boot-2012.07 6,参考文章: http://blogold.chinaunix.net/u3/

qt-embedded-4.5.3移植到FL2440开发板

1. 2.configure配置 ./configure -opensource -confirm-license -release -shared -fast -no-qt3support -no-libtiff -no-libmng -no-openssl -no-phonon -no-nis -no-opengl -no-cups -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-xkb -no-sm -no-xinerama -no-xs

在fl2440开发板上移植第三方程序lrzsz,tree

移植第三方程序有几种情况 一 .如果源码包有Makefile文件,直接改Makefile,修改CC, AS, LD, CFLAGS,INST_PATH.. 二.源码包没有Makefile文件,但有configure/config文件: 1.设置 CC, LD ,AS, LDFLAGS ,AR,RANLIB等环境变量,如下面的lrzsz命令移植中的 CC=/opt/buildroot-2011.11/arm920t/usr/bin/arm-linux-gcc AR=/opt/buildroot-2

fl2440开发板添加wifi模块

fl2440开发板,linux3.0内核,交叉编译器路径/opt/buildroot-2011.11/arm920t/usr/bin/arm-linux-,无线网卡RT3070 一.配置linux内核支持wireless无线上网 [*] Networking support  ---> -*-   Wireless  ---> <*>   cfg80211 - wireless configuration API [ ]     nl80211 testmode command [

linux 3.4.103 内核移植到 S3C6410 开发板 移植失败 (问题总结,来日再战!)

linux 3.4.103 内核移植到 S3C6410 开发板 这个星期几乎就搭在这里面了,一开始感觉很不值得,移植这种浪费时间的事情,想立马搞定,然后安安静静看书 & coding. 坑爹的事情就是一个多星期的时间搭进去了,还是没成功.我把我的移植失败的经验留下来做为笔记,为下次做准备,也让和我一起做移植的道友少走弯路.大家一起共同分享经验,营造更好的开发环境. 查了很多资料,在此谢谢那些bloger, thanks for your spirit of sharing. 一. 从官网获得干净

linux 3.4.103 内核移植到 S3C6410 开发板 移植失败 (问题总结,日本再战!)

linux 3.4.103 内核移植到 S3C6410 开发板 这个星期差点儿就搭在这里面了,一開始感觉非常不值得,移植这样的浪费时间的事情.想立刻搞定,然后安安静静看书 & coding. 坑爹的事情就是一个多星期的时间搭进去了,还是没成功. 我把我的移植失败的经验留下来做为笔记,为下次做准备.也让和我一起做移植的道友少走弯路.大家一起共同分享经验,营造更好的开发环境. 查了非常多资料,在此谢谢那些bloger, thanks for your spirit of sharing. 一. 从官

关于FL2440开发板USB驱动安装 成功用于WIN7 64位

前几天,在飞凌淘宝官店购置了一块FL2440开发板进行学习,购置时没有留意FL2440的USB驱动不支持win7 64位. 在到货后进行测试才发现其USB驱动不支持win7驱动,为了能使用这个DNW,我在VirtualBox下安装了xp虚拟机,但是在安装驱动时无法从虚拟机中加载设置进行驱动安装. 我便上网寻找支持64位USB下载驱动,发现网上有一个驱动可安装USB驱动"Supervivi USB Transfer Tool" 在按照安装驱动教程使用成功安装驱动,使用了这个驱动后便能在V

emWin 移植 - 基于红牛开发板

一直想利用所学的东西自己设计一个精致一些的作品,手头正好有一块红牛开发板,就先用它来写一些软件,熟悉一下过程和一些想法的可行性.首先当然是选择一个操作系统了,对比了几种之后选择了emWin.那就移植一下吧. 这里首先要感谢一下http://www.openedv.com/posts/list/0/27697.htm 这篇帖子.我的思路基本是照着这个帖子做的.感谢楼主把辛苦的研究成果贡献出来,让我这个菜鸟能够快些入门. STemWin下载地址: http://www.st.com/web/en/c