分享

ixp425 redboot linux

 womking 2009-06-17
ixp425 redboot linux
这几天弄一块ixp425的板子,64M的SDRAM,64M的Flash,infineon adm6996L交换芯片。
拿到手的时候redboot已经可以跑了,但是网络不通,网络接口硬件提供的GPIO12,
在main.c第387行填加
 HAL_GPIO_OUTPUT_ENABLE(12);//configure gpio 12 as output
 HAL_GPIO_OUTPUT_CLEAR(12);   
 HAL_DELAY_US(500000);
 HAL_GPIO_OUTPUT_SET(12);
redboot 成功跑起来,网络通,能tftp下载文件系统和内核。然后修改硬件环境,改64M sdram为32M sdram
 
由于redboot用得比较少,网上关于这方面的介绍几乎没有,所以打算写下来,希望给需要的提供点思路,我的redboot是基于intel提供的参考包
1 packages\hal\arm\xscale\ixdp425\current\include\ixpdp425.h
原文件为86行
#define IXP425_SDRAM_CONFIG_INIT_64M  (SDRAM_CONFIG_CAS_3 | SDRAM_CONFIG_2x16Mx16)
#define IXP425_SDRAM_CONFIG_INIT_128M  (SDRAM_CONFIG_CAS_3 | SDRAM_CONFIG_4x16Mx16)
#define IXP425_SDRAM_CONFIG_INIT_256M  (SDRAM_CONFIG_CAS_3 | SDRAM_CONFIG_4x32Mx16)
前加入32M定义
#define IXP425_SDRAM_CONFIG_INIT_32M  (SDRAM_CONFIG_CAS_3 | SDRAM_CONFIG_2x8Mx16)
 
2 将packages\hal\arm\xscale\ixdp425\current\include\hal_platform_setup.h
IXP425_SDRAM_CONFIG_INIT_64M改为IXP425_SDRAM_CONFIG_INIT_32M
 
3 将packages\hal\arm\xscale\ixdp425\current\include\pkgconf\mlt_arm_xscale_ixdp425_ram.h
原文件为
#ifndef __ASSEMBLER__
#include <cyg/infra/cyg_type.h>
#include <stddef.h>
#endif
#define CYGMEM_REGION_ram (0x01000000)
#define CYGMEM_REGION_ram_SIZE (0x03000000)
#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
#ifndef __ASSEMBLER__
extern char CYG_LABEL_NAME (__heap1) [];
#endif
#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1))
#define CYGMEM_SECTION_heap1_SIZE (0x04000000 - (size_t) CYG_LABEL_NAME (__heap1))
修改为
#ifndef __ASSEMBLER__
#include <cyg/infra/cyg_type.h>
#include <stddef.h>
#endif
#define CYGMEM_REGION_ram (0x01000000)
#define CYGMEM_REGION_ram_SIZE (0x01000000)
#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
#ifndef __ASSEMBLER__
extern char CYG_LABEL_NAME (__heap1) [];
#endif
#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1))
#define CYGMEM_SECTION_heap1_SIZE (0x02000000 - (size_t) CYG_LABEL_NAME (__heap1))
 
4 将packages\hal\arm\xscale\ixdp425\current\include\pkgconf
\mlt_arm_xscale_ixdp425_rom.h
原文件
#ifndef __ASSEMBLER__
#include <cyg/infra/cyg_type.h>
#include <stddef.h>
#endif
#define CYGMEM_REGION_ram (0)
#define CYGMEM_REGION_ram_SIZE (0x04000000)
#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
#define CYGMEM_REGION_rom (0x50000000)
#define CYGMEM_REGION_rom_SIZE (0x400000)
#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R)
#ifndef __ASSEMBLER__
extern char CYG_LABEL_NAME (__heap1) [];
#endif
#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1))
#define CYGMEM_SECTION_heap1_SIZE (0x04000000 - (size_t) CYG_LABEL_NAME (__heap1))
修改为
#ifndef __ASSEMBLER__
#include <cyg/infra/cyg_type.h>
#include <stddef.h>
#endif
#define CYGMEM_REGION_ram (0)
#define CYGMEM_REGION_ram_SIZE (0x02000000)
#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
#define CYGMEM_REGION_rom (0x50000000)
#define CYGMEM_REGION_rom_SIZE (0x400000)
#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R)
#ifndef __ASSEMBLER__
extern char CYG_LABEL_NAME (__heap1) [];
#endif
#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1))
#define CYGMEM_SECTION_heap1_SIZE (0x02000000 - (size_t) CYG_LABEL_NAME (__heap1))
 
另外有两个文件可能就有点隐秘了
4 将packages\hal\arm\xscale\ixdp425\current\include\pkgconf\mlt_arm_xscale_ixdp425_ram.ldi
将原文件
// eCos memory layout - Fri Oct 20 05:56:24 2000
// This is a generated file - do not edit
#include <cyg/infra/cyg_type.inc>
MEMORY
{
    ram : ORIGIN = 0x01000000, LENGTH = 0x04000000
}
SECTIONS
{
    SECTIONS_BEGIN
    SECTION_fixed_vectors (ram, 0x01000020, LMA_EQ_VMA)
    SECTION_rom_vectors (ram, 0x01020000, LMA_EQ_VMA)
    SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA)
    CYG_LABEL_DEFN(__heap1) = ALIGN (0x8);
    SECTIONS_END
}
改为
// eCos memory layout - Fri Oct 20 05:56:24 2000
// This is a generated file - do not edit
#include <cyg/infra/cyg_type.inc>
MEMORY
{
    ram : ORIGIN = 0x01000000, LENGTH = 0x02000000
}
SECTIONS
{
    SECTIONS_BEGIN
    SECTION_fixed_vectors (ram, 0x01000020, LMA_EQ_VMA)
    SECTION_rom_vectors (ram, 0x01020000, LMA_EQ_VMA)
    SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA)
    CYG_LABEL_DEFN(__heap1) = ALIGN (0x8);
    SECTIONS_END
}
 
6
4 将packages\hal\arm\xscale\ixdp425\current\include\pkgconf\mlt_arm_xscale_ixdp425_rom.ldi
将原文件
/ eCos memory layout - Tue Jul 02 10:03:04 2002
// This is a generated file - do not edit
#include <cyg/infra/cyg_type.inc>
MEMORY
{
    ram : ORIGIN = 0, LENGTH = 0x04000000
    rom : ORIGIN = 0x50000000, LENGTH = 0x40000
}
SECTIONS
{
    SECTIONS_BEGIN
    SECTION_rom_vectors (rom, 0x50000000, LMA_EQ_VMA)
    SECTION_text (rom, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_rodata (rom, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_rodata1 (rom, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_gcc_except_table (rom, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_mmu_tables (rom, ALIGN (0x4000), LMA_EQ_VMA)
    SECTION_fixed_vectors (ram, 0x20, LMA_EQ_VMA)
    SECTION_data (ram, 0x8000, FOLLOWING (.mmu_tables))
    SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA)
    CYG_LABEL_DEFN(__heap1) = ALIGN (0x8);
    SECTIONS_END
}
 
改为
/ eCos memory layout - Tue Jul 02 10:03:04 2002
// This is a generated file - do not edit
#include <cyg/infra/cyg_type.inc>
MEMORY
{
    ram : ORIGIN = 0, LENGTH = 0x02000000
    rom : ORIGIN = 0x50000000, LENGTH = 0x40000
}
SECTIONS
{
    SECTIONS_BEGIN
    SECTION_rom_vectors (rom, 0x50000000, LMA_EQ_VMA)
    SECTION_text (rom, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_rodata (rom, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_rodata1 (rom, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_gcc_except_table (rom, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_mmu_tables (rom, ALIGN (0x4000), LMA_EQ_VMA)
    SECTION_fixed_vectors (ram, 0x20, LMA_EQ_VMA)
    SECTION_data (ram, 0x8000, FOLLOWING (.mmu_tables))
    SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA)
    CYG_LABEL_DEFN(__heap1) = ALIGN (0x8);
    SECTIONS_END
}
 
这样绝对ok
测试通过
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多