原创 S3C2440之uboot移植

2010-11-27 20:26 7108 10 11 分类: MCU/ 嵌入式

S3C2440之uboot移植 


 


邮箱:junjietianya@163.com


QQ:286015867


裸奔S3C2440断断续续快搞完了,该linx还是wince呢?犹豫了几天,打算wince吧,可是电脑装vs2005+wince6.0成功后投标时灰的了,呵呵!还是选择linux。但linux和windows差别很大,还是一步步来,一个星期学习了基本的指令,并学习了韦东山的书后了解了Makefile,哈哈,刚开始还不知Makefile是一个文件还是像记事本的txt的后缀。又逢周末,还是先uboot吧,免费的,符合linux的发展。废话少说,先动手吧!


一、移植环境


1,宿主机:vmware+fedora9


2,开发板:友善之臂MICRO2440-64M NANDFLASH

3,UBOOT: u-boot:u-boot-2009.08.tar.bz2
(下载网站:ftp://ftp.denx.de/pub/u-boot/)里面有最新的UBOOT。
二,uboot目录结构

    u-boot的stage1代码通常放在cpu/xxxx/start.S文件中,他用汇编语言写成;


    u-boot的stage2代码通常放在lib_xxxx/board.c文件中,他用C语言写成。

三,建立符合自己开发板的UBOOT
1,解压UBOOT:解压到的目录任意。
#tar –xjvf u-boot-2009.08.tar.bz2
2,建立自己开发项目的路径:由于2440与2410差不多,所以我们建立的项目以2410为模板,在2410的基础上作小量修改即可。
        A,进入u-boot-2009.08/board/samsung/   目录
                               cd u-boot-2009.08/board/samsung/   
               B,建立目录:zjj-2440
                               mkdir zjj-2440
2,将smdk2410里面的文件复制到刚才创建的目录
        cp smdk2410 /*  zjj-2440/
3,进入zjj-2440修改smdk2410.c为zjj-2440.c
        cd zjj-2440
        mv smdk2410.c zjj-2440.c
4,修改zjj-2440目录下的Makefile
        vim Makefile打开Makefile
COBJS    := zjj-2440.o flash.o  //因在zjj-2440下我们将smdk2410.c改名为zjj-2440.c
 
5,使用cd ../../../回到根目录,
 
6,建立zjj-2440的头文件
   cp include/configs/smdk2410.h include/configs/zjj-2440.h
7,修改根目录下的Makefile

      CROSS_COMPILE ?= arm-linux-        //指定交叉编译器为arm-linux-gcc


smdk2410_config    :    unconfig   //2410编译选项格式
    @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0


 


zjj-2440_config    :    unconfig     //2440编译选项格式
    @$(MKCONFIG) $(@:_config=) arm arm920t zjj-2440 samsung s3c24x0


8, zjj-2440开发板u-boot的stage1入口点分析。
一般在嵌入式系统软件开发中,在所有源码文件编译完成之后,链接器要读取一个链接分配文件,在该文件中定义了程序的入口点,代码段、数据段等分配情况等。那么我们的zjj-2440开发板u-boot的这个链接文件就是cpu/arm920t/u-boot.lds,打开该文件部分代码如下:


     vim 


OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)    //定义生成文件的目标平台是arm
ENTRY(_start)       //定义程序的入口点是_start

SECTIONS
{
    //其他一些代码段、数据段等分配
    . = 0x00000000;

    . = ALIGN(4);
    .text :
{
        cpu/arm920t/start.o    (.text)
        *(.text)
    }
    ..................
    ..................
}


 


 


9,定义了程序的入口点是_start,所以打开cpu/arm920t/start.S(即u-boot的stage1部分)


    vim cpu/arm920t/start.S


.globl _start
_start: b       start_code    //将程序的执行跳转到start_code处


/*
 * the actual start code
 */

start_code:
    /*
     * set the cpu to SVC32 mode
     */
    mrs    r0,cpsr
    bic    r0,r0,#0x1f
    orr    r0,r0,#0xd3
    msr    cpsr,r0
因为下面的led不适合我们开发板的led所以注释掉,添加我们的led



 


 


10,在include/configs/my2440.h头文件中添加CONFIG_S3C2440宏


vim 在include/configs/my2440.h


#define CONFIG_ARM920T        1    /* This is an ARM920T Core     */
#define CONFIG_S3C2410        1    /* in a SAMSUNG S3C2410 SoC    */
#define CONFIG_SMDK2410       1    /* on a SAMSUNG SMDK2410 Board */
#define CONFIG_S3C2440        1    /* in a SAMSUNG S3C2440 SoC    */

11,测试编译
        make zjj-2440_config
(如果出现Configuring for。。。表示编译通过)
12,make   编译

 


13,在DNW下使用【a】absolute 。。。。下载。将开发打到nandflash启动就可以看到想要的效果了。我刚才编写的是中间两个灯灭了。


 

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户377235 2012-12-10 09:32

这就没了?我是想看看我的为什么就时保存不了环境变量到nand flash
相关推荐阅读
用户1431527 2011-11-18 16:59
Linux终端快捷键
常用: 复制为ctrl-shift-c 粘贴为ctrl-shift-v tab=补全 ctrl+a=开始位置 ctrl+e=最后位置 ctrl+k=删除此处至末尾所有内容 ctr...
用户1431527 2011-08-13 18:58
NMOS与PMOS的选择
NMOS与PMOS的选择可参考一下几点: 1,相同尺寸的芯片,NMOS的导通电阻要比PMOS的低。 2,相同额定电流的PMOS要比NMOS贵。 3,PMOS不适合作通过很大电流的场合。 4,NMOS的...
用户1431527 2011-07-19 16:36
关于电压增益A=1的同向放大器的作用
1,  在引入电压跟随器(电压增益A=1的同向放大器)的时候,先介绍一下同向放大器。 很显然有:Vo=(R1/(R1+R2))V-             Vo=a((V+)-(V-) )   ...
用户1431527 2011-07-15 10:06
HDI是什么?
  HDI 是高功率密度逆变器(High Density Inverter)的缩写,是生产印制板的一种(技术),使用微盲埋孔技术的一种线路分布密度比较高的电路板。 HDI专为小容量用户设计的紧凑型产品...
用户1431527 2010-10-23 21:43
S3C2440外部中断
#include "2440addr.h"#include "def.h"#include "option.h"/*EINT8(GPG0),EINT11(GPG3),EINT13(GPG5),EINT...
我要评论
1
10
关闭 站长推荐上一条 /3 下一条