Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19403
  • 博文数量: 10
  • 博客积分: 460
  • 博客等级: 下士
  • 技术积分: 115
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-22 15:10
文章分类
文章存档

2010年(10)

我的朋友
最近访客

分类:

2010-03-23 14:18:44

 at91sam9263上面移植u-boot以及kernel的详细步骤 收藏
文章摘自:%B2%DC%BF%AA%C6%EB/blog/item/7882778d2dbfc215b21bba36.html
我的板子是ATMEL的芯片,杭州一个小厂生产的,质量比较次,不支持从nandflash直接启动。所以需要自己编译Bootstrap放到dataflash里面用来引导u-boot。
u-boot在我们的板子上面可以烧写到dataflash也可以烧写到nandflash,所以下面分情况讨论。
1 编译Bootstrap
1.1 从dataflash启动uboot
(1)修改:board/at91sam9263ek/dataflash/at91sam9263ek.h文件,如下内容
    //#define   CRYSTAL_16_36766MHZ 1 //注释这一行
    #define CRYSTAL_18_432MHZ 1    //添加这一行,因为我们at91sam9263ek这块板子的晶振是18.432M
   
(2)修改board/at91sam9263ek/dataflash/Makefile
    CROSS_COMPILE=arm-elf-   
   
(3) 然后运行:
    cd board/at91sam9263ek/dataflash/
    make clean && make
   
(4)将生成的dataflash_at91sam9263ek.bin烧录到dataflash的0X0地址。
1.2 从nandflash启动uboot
(1)修改:board/at91sam9263ek/nandflash/at91sam9263ek.h文件,如下内容
    //#define    CRYSTAL_16_36766MHZ    1
    #define CRYSTAL_18_432MHZ 1
  
(2)修改board/at91sam9263ek/dataflash/Makefile
    CROSS_COMPILE=arm-linux-    //这个改为你机器的交叉编译工具的前缀
   
(3)修改include/nand_ids.h 文件
static struct SNandInitInfo NandFlash_InitInfo[] = {
    {0xecda, 0x800, 0x20000, 0x800, 0x40, 0x0, "Samsung K9F2G08U0M 256Mb\0"},
    {0x2cca, 0x800, 0x20000, 0x800, 0x40, 0x1, "Micron MT29F2G16AAB 256Mb\0"},   
    {0x2cda, 0x800, 0x20000, 0x800, 0x40, 0x0, "Micron MT29F2G08AAC 256Mb\0"},   
    {0xecf1, 0x400, 0x20000, 0x800, 0x40, 0x0, "Samsung K9F1G08U0M 128Mb\0"}, //增加这一行,支持板子上面的nandflash
    {0x2cda, 0x800, 0x20000, 0x800, 0x40, 0x0, "Micron MT29F2G08AAC 256Mb\0"},
    {0,}
};
   
(4) 然后运行:
    cd board/at91sam9263ek/nandflash
    make clean && make
   
(5)将生成的nandflash_at91sam9263ek.bin烧录到nandflash的0X20000地址。//这个地址在第一步中的头文件中定义

2 编译u-boot
2.1 从dataflash中启动uboot
(1)make at91sam9263ek_config
       make
(2)最后将源文件主目录下生成的u-boot.bin烧录到dataflash的0X8400地址。//这个地址在bootstrap的相应的头文件board/at91sam9263ek/dataflash/at91sam9263ek.h定义
2.2 从nandflash启动uboot
(1)修改include/configs/at91sam9263ek.h
      #undef CFG_USE_DATAFLASH       
      #define CFG_USE_NANDFLASH    1
(2)然后
      make at91sam9263ek_config
      make
(3)最后将源文件主目录下生成的u-boot.bin烧录到nandflash的0X20000地址。//这个地址在bootstrap的相应的头文件board/at91sam9263ek/nandflash/at91sam9263ek.h定义

3 编译内核
(1)修改arch/arm/mach-at91/board-sam9263ek.c
    第57行:at91sam9263_initialize(18432000); //改一下时钟频率
    找到类似如下的行,改成没有被注释的。   (这个与我的LCD屏幕有关)
   
    //.left_margin = 1,        .right_margin   = 33,
     .left_margin    = 48,       .right_margin   = 16,
    //.upper_margin = 1,        .lower_margin   = 0,
    .upper_margin   = 31,       .lower_margin   = 12,
     //.hsync_len    = 5,        .vsync_len = 1,
    .hsync_len = 96,       .vsync_len = 2,
(2)配置编译
    cp ./arch/arm/configs/at91sam9263ek_defconfig .config
    make ARCH=arm oldconfig
    make ARCH=arm menuconfig    //在这里设置你需要的模块或者功能
    make ARCH=arm CROSS_COMPILE=arm-linux- uImage
   (在编译之前将u-boot下的tools/mkimage复制到/bin目录下,否则会报错找不到mkimage命令)
(3)烧录
    将生成的uImage文件烧写到nandflash的0x20 0000。
   
4 上板子
板子上电运行
4.1 nandflash启动内核
(1)设置环境变量
    setenv ipaddr 172.16.100.103       //板子的ip地址
    setenv serverip 172.16.100.100    //服务器ip地址
    setenv ethaddr a:a:a:f:d:1             //mac地址
(2)启动内核
    nboot 0x22000000 0 0x200000
    bootm 0x22000000
4.2 tftp加载,启动内核
(1)设置环境变量
    setenv ipaddr 172.16.100.102       //板子的ip地址
    setenv serverip 172.16.100.103    //服务器ip地址
    setenv ethaddr a:a:a:f:d:1             //mac地址
    setenv bootargs 'mem=64M console=ttyS0,115200 root=/dev/nfs rw nfsroot=172.16.100.103:/maxwit/rootfs ip=172.16.100.102:172.16.100.1:255.255.255.0'
    saveenv(保存设置)
    ping 172.16.100.103 //测试服务器是否连通,alive或者unreachable
   
   注释:第四个环境变量用来加载nfs根文件系统的。
  
(2)加载内核
i. 设置主机的tftp服务
     vi /etc/inetd.conf //将存放uImage的目录添加进来
     /etc/init.d/openbsd-inetd restart //重启tftp服务
ii. 板子加载
    tftp 0x22008000 uImage//或者tftpboot 0x22008000 uImage
    bootm 0x22008000ls
  
5 自动加载内核
    setenv bootcmd 'nboot 0x22000000 0 0x200000; saveenv; bootm 0x22000000'
   
自动加载文件系统
        setenv bootargs 'mem=64M console=ttyS0,115200 root=/dev/mtdblock2 rootfstype=jffs2'
        reset之后就可以看到u-boot自动加载内核了
 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kailan818/archive/2009/12/14/5003837.aspx
阅读(1357) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~