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


    原文

    参考 :http://www.linuxidc.com/Linux/2012-07/64158.htm

    以前移植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/101649/showart.php?id=2105215

    http://blog.chinaunix.net/space.php?uid=23787856&do=blog&id=115382

    http://blogimg.chinaunix.net/blog/upfile2/100811115954.pdf

    下载并解压源文件

    1,下载u-boot-2012.07,可以从官方网站下载u-boot-2012.07 下载地址:http://ftp.denx.de/pub/u-boot/

    2,#tar -jxvf u-boot-2010.07.tar.bz2    //解压源码

    移植步骤

    1.1,了解u-boot启动流程,请参考U-Boot启动过程分析

    启动流程

    1.2,建立fl2440开发板文件并编译测试

    在项目根目录u-boot-2009.08上单击右键->浏览文件夹

    【1】定位到board/samsung,将目录smdk2410复制并粘贴到当前目录下,将其重命名为fl2440。

     # cp board/samsung/smdk2410 board/samsung/fl2440 -r

    【2】打开fl2440目录,将smdk2410.c重命名为fl2440.c,

    【3】用vim打开当前目录下的Makefile

    include $(TOPDIR)/config.mk

    LIB     = $(obj)lib$(BOARD).o

    COBJS   := fl2440.o

    SOBJS   := lowlevel_init.o
    然后保存。

    【4】在根目录下定位到include/configs,将smdk2410.h复制并粘贴到当前目录下,将其重命名成fl2440.h。

    【5】用vim打开根目录下的boards.cfg文件,然后搜索smdk2410,找到下列语句

    在smdk2410下面添加fl2440  arm arm920t  -  samsung s3c24x0

    注:Uboot 2012的板配置文件是在boards.cfg中配置的,不用修改根目录的Makefile

    然后保存。
    *说明:

    mini2440 :对应在board目录下建立新的开发板项目的目录

    arm      :CPU的架构(ARCH)
    arm920t  :CPU的类型

    -                             :表示在samsung目录下      

    Samsung :新开发板项目目录的上级目录,如直接在board下建立新的开发板项目的目录,则这里就为NULL

    s3c24x0:CPU型号

    【6】编译测试

    打开终端,进入到u-boot-2012.07根目录下执行

    [root@localhost u-boot-2012.07]# make distclean
    [root@localhost u-boot-2012.07]# make fl2440_config
    Configuring for fl2440 board...
    [root@localhost u-boot-2012.07]# make

    【7】加入调试选项,启用DEBUG宏,有两种办法办法

    <1>参考文章Makefile,如何传递宏定义DEBUG和Debug版和Release版的程序

    在编译时,直接在make 后面传入参数 -d ,表示Debug模式,输出有关文件和检测时间的详细信息,如

    make -d

    可以输出源程序中定义的DEBUG宏定义的调试信息

    <2>用gedit打开根目录下的config.mk文件,然后搜索“DDEBUG”,找到如下语句

    DBGFLAGS= -g # -DDEBUG

    将注释掉的DDEBUG选项打开,修改后下面语句

    DBGFLAGS= -g  -DDEBUG

    但是此种办法需要在调试完成时需要在将其注释掉。

    【8】根据启动流程修改或添加基本的u-boot源码,使其能够在内存中启动

    vi include /cnfigs/fl2440.h  把

    #define CONFIG_S3C2410 改为 #define CONFIG_S3C2440

    并且把做出如下改正:

    #define CONFIG_SYS_TEXT_BASE 0x32000000

    将NAND和YAFFS2配置先注释起来,不然会有很多错误:


    更改内存范围,将:

    #defineCONFIG_SYS_MEMTEST_END 0x33F00000

    修改为:

    #defineCONFIG_SYS_MEMTEST_END 0x34000000 fl2440sdram64M

    #defined config_lowlevel_init 1 ;内存中测试不需要初始化sdram

    【9】修改时钟

    vi arch/arm/cpu/arm920t/start.S

    找到如下

    # if defined(CONFIG_S3C2410)
    ldr r1,=0x3ff
    ldr r0,=INTSUBMSK
    str r1, [r0]
    # endif

    在后面加上

    # 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]

    改为:
    ldr r0,=CLKDIVN
    mov r1, #5
    str r1, [r0]


    vi board/samsung/fl2440/fl2440.c

    将这段改为:

    #define FCLK_SPEED 1

    #ifFCLK_SPEED==0
    #define M_MDIV 0xC3
    #define M_PDIV 0x4
    #define M_SDIV 0x1
    #elifFCLK_SPEED==1
    #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 FCLK_SPEED 2

    #ifFCLK_SPEED==0
    #define M_MDIV 0xC3
    #define M_PDIV 0x4
    #define M_SDIV 0x1
    #elifFCLK_SPEED==1
    #define M_MDIV 0xA1
    #define M_PDIV 0x3
    #define M_SDIV 0x1

    #elifFCLK_SPEED==2 

    #define M_MDIV 0x7f
    #define M_PDIV 0x2
    #define M_SDIV 0x1
    #endif
    #define USB_CLOCK 2

    #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

    #elif USB_CLOCK==2
    #define U_M_MDIV 0x38
    #define U_M_PDIV 0x2
    #define U_M_SDIV 0x2
    #endif


    因为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 2012.07 (Oct 07 2012 - 14:52:20)

     

     

    CPUID: 32440001

     

    FCLK:      405 MHz

     

    HCLK:  101.250 MHz

     

    PCLK:   50.625 MHz

     

    DRAM:  64 MiB

     

    WARNING: Caches not enabled

     

    Flash: *** failed ***

     

    ### ERROR ### Please RESET the board ###

    接下来将进入u-boot的第二阶段,为u-boot-2012.07增加nandflash支持。

  • 相关阅读:
    HDU 1394Minimum Inversion Number 数状数组 逆序对数量和
    2016中国大学生程序设计竞赛(长春)-重现赛 1010Ugly Problem 回文数 模拟
    Codeforces 723C. Polycarp at the Radio 模拟
    hihoCode 1078 : 线段树的区间修改
    hihocode 1077 : RMQ问题再临-线段树
    POJ 2352Stars 树状数组
    Codeforces 714C. Sonya and Queries Tire树
    Codeforces 710C. Magic Odd Square n阶幻方
    Codeforces 709C 模拟
    ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) D. The Door Problem 2-SAT
  • 原文地址:https://www.cnblogs.com/ganrui/p/3718105.html
Copyright © 2020-2023  润新知