第一阶段

1.开发环境

系统:centOS6.5           linux版本:2.6.32         交叉编译器:buildroot-2012.08

以上工具已经准备好,具体安装步骤不再赘述,将着重介绍u-boot-2010.09移植到fl2440开发板的全过程。

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用于存放我们下载的源码包

[weishusheng@centos]$ mkdir u-boot-2010.09

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

[weishusheng@centos]$cd u-boot-2010.09

5.解压源码包

[weishusheng@centos 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为模板,建立文件

[weishusheng@centos u-boot-2010.09]$ cd board

[weishusheng@centos board]$ mkdir fl2440
[weishusheng@centos board]$ cp -arf samsung/smdk2410/* fl2440
[weishusheng@centos board]$ mv fl2440/smdk2410.c fl2440/fl2440.c

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

COBJS  := smdk2410.o flash.o为

COBJS  := fl2440.o flash.o

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

[weishusheng@centos u-boot-2010.09]$ cp include/configs/smdk2410.h include/configs/fl2440.h

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

[weishusheng@centos 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寄存器数值

[weishusheng@centos 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       "[fl2440@wss]# "

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

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

[fl2440@wss]#

[fl2440@wss]#

[fl2440@wss]#

u-boot-2010.09移植(A)的更多相关文章

  1. u-boot-2010.09移植(B)

    前面我们的u-boot只是在内存中运行,要想在nandflash中运行,以达到开机自启的目的,还需作如下修改 一.添加DM9000网卡支持 1.修改board/fl2440/fl2440.c中的boa ...

  2. Linux JDK 安装及卸载 http://www.cnblogs.com/benio/archive/2010/09/14/1825909.html

    参考:http://www.cnblogs.com/benio/archive/2010/09/14/1825909.html

  3. ok6410 u-boot-2012.04.01移植六完善MLC NAND支持

    继ok6410 u-boot-2012.04.01移植四.五后,开发板基本已支持MLC NAND,支持DM9000.但是通过NAND命令更新u-boot到NAND,还存在问题,需要根据u-boot的n ...

  4. Linux移植之内核启动过程start_kernel函数简析

    在Linux移植之内核启动过程引导阶段分析中从arch/arm/kernel/head.S开始分析,最后分析到课start_kernel这个C函数,下面就简单分析下这个函数,因为涉及到Linux的内容 ...

  5. wifi 驱动移植范例

    .改Makefile:  里面没有dm6441平台的,我看到有dm6446的,所以就在这里改了 ifeq ($(PLATFORM),DM6446) LINUX_SRC = /root/work/lin ...

  6. ok6410 u-boot-2012.04.01移植二修改源码支持单板

    继ok6410 u-boot-2012.04.01移植一后修改代码,对ok6410单板初始化,主要包括时钟.串口.NAND.DDR等初始化.这些工作在以前的裸板程序都写了,直接拿来用.我觉得先写裸板程 ...

  7. 让VS 2010在调试字符串时,支持Json数据格式友好显示

    阅读本文如果对Microsoft.VisualStudio.DebuggerVisualizers的用法不熟悉的,可以参考这篇文章.http://www.cnblogs.com/devil0153/a ...

  8. [sharepoint]Office Web Apps for SharePoint 2010

    Office Web Apps for SharePoint 2010 2012年09月20日 ⁄ 综合 ⁄ 共 908字 ⁄ 字号 小 中 大 ⁄ 评论关闭 After you install Of ...

  9. [转]SharePoint 2010 Powershell Feature Cmdlets

    In this installment its time to look at the various cmdlets that have to do with Features. Of course ...

随机推荐

  1. 第三篇——软件之殇,WE ARE THOUSANDS APART!

    软件工程是一门工程性的学科,其目标主要是成功地建造一个大型软件系统.这其中包括:付出较低的开发成本:达到要求的软件功能:取得较好的软件性能:开发的软件易于移植:需要较低的维护费用:能按时完成开发任务, ...

  2. 小型资源管理器,IO操作,读取和写入文件和目录的常用操作

    解决方案: 小总结: 用IO流,的file,DirectoryInfo的方法绑定Treeview控件上和删除,读取, 可以熟练掌握一下IO流 主页面: private void Form1_Load( ...

  3. ListView.post(Runnable {})和ListView.postDelayed

    1. boolean android.view.View.post(Runnable action): 是listview 继承 view,同样具有此方法 post(Runnable action) ...

  4. SQLHelper

    今天学习了.net后,经过老师的一番讲解,似乎对它越来越渴望了,希望自己在接下来的学习当中,能很好的驾驭.net,加油吧, 下面我分享一个操作SQL数据库的代码大全,谢谢观赏.嘿嘿,还是比较长的哦, ...

  5. 使用python编写一个壁纸网站的简单爬虫

    目标网站:http://www.netbian.com/ 目的:实现对壁纸各分类的第一页壁纸的获取 一:分析网站,编写代码: (ps:源代码在文章的最后) 1.获取网站目录部分的一大段代码,下一步再进 ...

  6. SharePoint REST Create Folder

    function createListFolder(siteUrl, listName, foldername) { var serverUrl = _spPageContextInfo.webAbs ...

  7. Java 正则表达式 量词 --- 三种匹配模式【贪婪型、勉强型、占有型】

    1.Greediness(贪婪型):最大匹配X?.X*.X+.X{n,}都是最大匹配.例如你要用“<.+>”去匹配“a<tr>aava</tr>abb”,也许你所期 ...

  8. 黑马----JAVA比较器:Comparable和Comparator

    黑马程序员:Java培训.Android培训.iOS培训..Net培训 一.Comparable接口 1.public interface Comparable{ public int compare ...

  9. WPF(WP7、WP8)多个Listbox嵌套时滚动问题的解决

    内部的ListBox加属性 ScrollViewer.VerticalScrollBarVisibility="Disabled" 即可 如果不需要滚动,可以考虑嵌套换成 Item ...

  10. 易图软件之EaseMap Desktop 1.0发布

    概述 易图软件之EaseMap Desktop 1.0是一款基于arcgis runtime for wpf开发的地图编辑软件. 软件代码编写历时1个月终于完成. 目前这个版本的功能包括: 地图基本操 ...