at91rm9200移植u-boot

本文档详细介绍了如何将 U-Boot 1.3.4 移植到 at91rm9200 开发板上,包括编译环境设置、配置 U-Boot、烧录固件到 NOR Flash 和 NAND Flash,以及 CS8900 网卡驱动的配置。通过一系列步骤,最终实现了 U-Boot 的成功启动并检测到 Flash 和网卡。
摘要由CSDN通过智能技术生成
我是一个基督徒,今年36岁了,目前在一家上市公司担任维修组的负责人,2018.7月份开始了业余编程,到现在已经2年的时间了,因着上帝的恩典和怜悯,从零开始,现在把linux系统跑起来了。圣经上面说:“你们白白的得来,也要白白的舍去”。我要和大家一起分享我这两个年来做出来的东西,希望能够帮助有需要的人。
荣耀归于神,平安归于他所喜悦的人。

硬件介绍:
CPU: at91rm9200
SDRAM: IS42S16160C-7TLI 	32M
NAND FALSH: H27U1G8F2BTR(或nand512w3a2snb)
NORFLASH): S29AL016J70TFI020 	SST39VF6401-70-4C-B1K
NET: CS8900A-IQ3Z
扩展网卡: CS8900A-IQ3Z 或 DM9000

编译环境介绍:
linux系统: Ubuntu 18.04.3 LTS (GNU/Linux 5.3.0-53-generic x86_64)
编译器: arm-linux-gcc-4.1.1-920t.tar.bz2

j-link工程文件: arm9v2.jflash
非常非常重要,用j-link下载程序全靠它!

  1. 在本机下载u-boot1.3.4,然后利用ftp工具把u-boot1.3.4上传到服务器上/RM9200/soft下:
    ftp://ftp.denx.de/pub/u-boot/

  2. 解压:$tar xjf u-boot-1.3.4.tar.bz2 -C …/

  3. 配置u-boot:
    在Makefile line2352找到:
    at91rm9200dk_config : unconfig
    @$(MKCONFIG) $(@:_config=) arm arm920t at91rm9200dk atmel at91rm9200

    $make at91rm9200dk_config
    Configuring for at91rm9200dk board…

    $make
    … …
    arm-linux-objcopy --gap-fill=0xff -O srec u-boot u-boot.srec
    arm-linux-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin

    测试:把u-boot.bin文件下载到开发板中,重新上电串口无反应

  4. 改变为norflash启动:
    修改/u-boot-1.3.4/cpu/arm920t/start.s:
    line181: #ifdef CONFIG_AT91RM9200 /* change1: ifnodef->if defined /
    line266: /
    #else / / change2: 注释掉 #else*/

    保存文件后重新编译: @make

    测试:把u-boot.bin文件下载到开发板中,重新上电串口输出:
    U-Boot 1.3.4 (Jul 24 2020 - 09:58:49)
    DRAM: 32 MB
    Atmel: Flash: 0 kB
    NAND: 0 MB
    *** Warning - bad CRC, using default environment
    In: serial
    Out: serial
    Err: serial
    U-Boot>

  5. 配置norflash: S29AL016J70TFI020(CFI标准的flash) manufacturer id:0x1 device id: 0x2249
    入口函数在/u-boot-1.3.4/lib_arm/board.c:
    line333: ifndef CFG_NO_FLASH
    /* configure available FLASH banks /
    size = flash_init ();
    display_flash_config (size);
    #endif /
    CFG_NO_FLASH */

    /u-boot-1.3.4/board/atmel/at91rm9200dk/Makefile:
    注释: line28: COBJS := at91rm9200dk.o led.o mux.o partition.o # 去掉flash.o

    /u-boot-1.3.4/include/configs/at91rm9200dk.h:
    添加在#define PHYS_FLASH_1 0x10000000 上一行:
    /* NOR FLASH START*/
    #define CFG_FLASH_CFI 1
    #define CFG_FLASH_CFI_DRIVER 1
    #define CFG_FLASH_USE_BUFFER_WRITE 1
    #define CFG_FLASH_INCREMENT 0
    #define CFG_FLASH_PROTECTION 1
    #define CFG_FLASH_BANKS_LIST { CFG_FLASH_BASE }
    #define CFG_FLASH_CFI_WIDTH FLASH_CFI_16BIT

     	/* S29AL016J70TFI020 */
    

    保存后重新编译: $make

    测试:把u-boot.bin文件下载到开发板中,重新上电串口输出:
    U-Boot 1.3.4 (Jul 24 2020 - 13:24:13)
    DRAM: 32 MB
    Flash: 2 MB
    NAND: 0 MB
    *** Warning - bad CRC, using default environment
    In: serial
    Out: serial
    Err: serial
    U-Boot>
    “Flash: 2 MB”, 找到了第一个flash
    在"U-Boot>"后输入flinfo 打印如下信息
    Bank # 1: CFI conformant FLASH (16 x 16) Size: 2 MB in 35 Sectors
    AMD Standard command set, Manufacturer ID: 0x01, Device ID: 0x2249
    Erase timeout: 8192 ms, write timeout: 1 ms
    Sector Start Addresses:
    10000000 10004000 10006000 10008000 10010000
    10020000 10030000 10040000 10050000 10060000 RO
    10070000 10080000 10090000 100A0000 100B0000
    100C0000 100D0000 100E0000 100F0000 10100000
    10110000 10120000 10130000 10140000 10150000
    10160000 10170000 10180000 10190000 101A0000
    101B0000 101C0000 101D0000 101E0000 101F0000

  6. 配置norflash: SST39VF6401(jedec标准的flash) JEDEC PROBE: manufacturer id:0xbf device id: 0x236d
    /u-boot-1.3.4/include/configs/at91rm9200dk.h:
    修改:#define CFG_FLASH_BANKS_LIST { CFG_FLASH_BASE }
    为:#define CFG_FLASH_BANKS_LIST { CFG_FLASH_BASE, CFG_FLASH2_BASE }
    修改:#define CFG_MAX_FLASH_BANKS 1
    为:#define CFG_MAX_FLASH_BANKS 2

     添加在#define CFG_FLASH_WRITE_TOUT		(2*CFG_HZ) /* Timeout for Flash Write */下一行:
     	/* SST39VF6401 */
     	#define CONFIG_FLASH_CFI_LEGACY	1
     	#define CFG_FLASH_LEGACY_8Mx8	1
     	#define PHYS_FLASH_2			0x30000000
     	#define PHYS_FLASH2_SIZE			0x4000000  /* 64 megs bit main flash */
     	#define CFG_FLASH2_BASE			PHYS_FLASH_2
     	/* NOR FLASH END*/
    

    /u-boot-1.3.4/drivers/mtd/cfi_flash.c:
    修改: line66: #define CFG_FLASH_BANKS_LIST { CFG_FLASH_BASE }
    为:#define CFG_FLASH_BANKS_LIST { CFG_FLASH_BASE, CFG_FLASH2_BASE }

    /u-boot-1.3.4/board/atmel/at91rm9200dk/at91rm9200dk.c:
    添加在最后一行:
    #if defined(CONFIG_FLASH_CFI_LEGACY)
    /*
    * Hardcoded flash setup:
    * Flash 0 is a non-CFI AMD AM29F040 flash, 8 bit flash / 8 bit bus.
    /
    ulong board_flash_get_legacy (ulong base, int banknum, flash_info_t * info)
    {
    if (banknum == 1) { /
    non-CFI boot flash */
    AT91C_BASE_SMC2->SMC2_CSR[2] = 0x1100318A;
    info->portwidth = FLASH_CFI_16BIT;
    info->chipwidth = FLASH_CFI_BY16;
    info->interface = FLASH_CFI_X16;
    return 1;
    } else
    return 0;
    }
    #endif

    /u-boot-1.3.4/drivers/mtd/jedec_flash.c:
    添加line68:
    #define SST39VF6401 0x236d

     添加line189: 
     	#ifdef CFG_FLASH_LEGACY_8Mx8
     		{
     
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值