at91sam9263上面移植u-boot以及kernel的详细步骤

文章摘自:http://hi.baidu.com/%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自动加载内核了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值