首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

移植LINUX ARM篇(转)(8)

移植LINUX ARM篇(转)(8)

自己先用u-boot-1.1.1,主要步骤如下:
(1)下载u-boot-1.1.1
http://sourceforge.net/projects/u-boot
(2)解压
用户:armlinux
$mkdir bootloader
$cd bootloader
$tar jxvf ../source/u-boot-1.1.1.tar.bz2
$cd u-boot-1.1.1
(3)修改
首先看一下结构
$ tree -L 1 -d
.
|-- board  平台依赖,存放电路板相关的目录文件
|-- common  通用多功能函数的实现
|-- cpu  平台依赖,存放cpu相关的目录文件
|-- disk  通用。硬盘接口程序
|-- doc  文档
|-- drivers  通用的设备驱动程序,如以太网接口驱动
|-- dtt
|-- examples  应用例子
|-- fs  通用存放文件系统的程序
|-- include  头文件和开发板配置文件,所有开发板配置文件放在其configs里
|-- lib_arm  平台依赖,存放arm架构通用文件
|-- lib_generic  通用的库函数
|-- lib_i386  平台依赖,存放x86架构通用文件
|-- lib_m68k  平台依赖
|-- lib_microblaze  平台依赖
|-- lib_mips  平台依赖
|-- lib_nios   平台依赖
|-- lib_ppc平台依赖,存放ppc架构通用文件
|-- net  存放网络的程序
|-- post  存放上电自检程序
|-- rtc  rtc的驱动程序
`-- tools  工具
然后具体步骤为:
(一)在board文件夹下面建立自己的开发板的文件夹。一般的,要选取与自己的开发板硬件设置最为接近的型号。在u-boot-1.1.1中,已经支持at91rm9200,所以可以选取at91rm9200dk作为模板进行修改。设置你的开发板的名字,随意即可,我的设置为:myboard。
[armlinux@lqm u-boot-1.1.1]$ cd board
[armlinux@lqm board]$ cp -R at91rm9200dk/ myboard/
[armlinux@lqm board]$ cd myboard
[armlinux@lqm myboard]$ ls
at91rm9200dk.c  config.mk  flash.c  Makefile  u-boot.lds
(二)可以看到,这里共有5个文件。首先,要修改主文件的名字,即要把at91rm9200dk.c更改为 myboard.c。其次,要更改config.mk中TEXT_BASE的数值,与loader等一级bootloader的要一致。接下来,因为在 at91rm9200dk用的是AMD的flash,而我的开发板上用的是Intel的28F640J3,那么需要另外找Intel的flash.C,以减少工作量。在这里,推荐用source insight这个查看代码的工具。我是在win下面使用的,它可以很方便的读代码,并且查找调用函数等等的工作。在strong ARM构架里有xm250,它的flash是Intel的,修改的东西并不是很多。需要注意的是,xm250的flash位宽是32,而我的位宽是16,要根据这个进行相应的修改。最后,修改Makefile,主要是修改生成文件的名字。具体操作如下:
[armlinux@lqm myboard]$ mv at91rm9200dk.c myboard.c
[armlinux@lqm myboard]$ cat config.mk
TEXT_BASE = 0x21f80000
[armlinux@lqm myboard]$ vi config.mk
修改成:TEXT_BASE = 0x21f00000,然后保存退出。
[armlinux@lqm myboard]$ vi Makefile
include $(TOPDIR)/config.mk
LIB     = lib$(BOARD).a
OBJS    := myboard.o flash.o
SOBJS   :=
$(LIB): $(OBJS) $(SOBJS)
        $(AR) crv $@ $(OBJS) $(SOBJS)
clean:
        rm -f $(SOBJS) $(OBJS)
[armlinux@lqm myboard]$ rm flash.c
[armlinux@lqm myboard]$ cp ../xm250/flash.c ./
[armlinux@lqm myboard]$ ls
config.mk  flash.c  Makefile  myboard.c  u-boot.lds
[armlinux@lqm myboard]$ vi flash.c

     34 #undef FLASH_PORT_WIDTH32   /*不定义位宽32*/
     35 #define FLASH_PORT_WIDTH16  /*定义位宽16*/
    216         switch (value) {
    217
    218         case (FPW) INTEL_ID_28F128J3A:
    219                 info->flash_id += FLASH_28F128J3A;
    220                 info->sector_count = 128;
    221                 info->size = 0x01000000;
    222                 break;                          /* => 16 MB     */
    223
    224         case (FPW) INTEL_ID_28F640J3A:     /*就是这个芯片*/
    225                 info->flash_id += FLASH_28F640J3A;
    226                 info->sector_count = 64;
    227                 info->size = 0x00800000;
    228                 break;                          /* => 8 MB     */

[armlinux@lqm myboard]$ cd ../..
[armlinux@lqm u-boot-1.1.1]$ vi Makefile
#########################################################################
## AT91RM9200 Systems
#########################################################################
at91rm9200dk_config     :       unconfig
        @./mkconfig $(@:_config=) arm at91rm9200 at91rm9200dk
myboard_config  :       unconfig
        @./mkconfig $(@:_config=) arm at91rm9200 myboard
#########################################################################
在这里,可以在命令模式下输入“/at91rm9200”快速查找 at91rm9200dk,仿照它的例子,写出自己板子的配置。注意的是,第二行开头要用TAB键,不是空格,否则报错。选项arm表示目标板架构, at91rm9200表是片上系统,myboard是你自己的开发板名字。
[armlinux@lqm u-boot-1.1.1]$ vi MAKEALL
LIST_ARM9="     \
        at91rm9200dk    integratorcp  integratorap                    \
        omap1510inn     omap1610h2      omap1610inn                     \
        smdk2400        smdk2410        trab                            \
        VCMA9           versatile       myboard                         \
继承事业,薪火相传
返回列表