一:建立工程文件HdKLinux联盟 1.修改/board/dave/B2为/board/dave/ULong44b0HdKLinux联盟 2.修改/board/dave/ULong44b0/B2.c为ULong44b0.cHdKLinux联盟 3.修改/board/dave/ULong44b0/Makefile中B2.o为ULong44b0.oHdKLinux联盟 4.修改/include/configs/B2.h为ULong44b0.h 5.修改/MakefileHdKLinux联盟 B2_config : unconfigHdKLinux联盟 @./mkconfig $(@:_config=) arm s3c44b0 B2 daveHdKLinux联盟 为HdKLinux联盟 ULong44b0_config : unconfigHdKLinux联盟 @./mkconfig $(@:_config=) arm s3c44b0 ULong44b0 dave 二:详细修改HdKLinux联盟 1. /include/configs/ULong44b0.h #define CONFIG_B2 1 /* on an B2 Board */HdKLinux联盟 修改为HdKLinux联盟 #define CONFIG_ULong44b0 1 /* on an tti44b Board */ #define CONFIG_S3C44B0_CLOCK_SPEED 75 /* we have a 75Mhz S3C44B0*/HdKLinux联盟 修改为HdKLinux联盟 #define CONFIG_S3C44B0_CLOCK_SPEED 60 /* we have a 60 Mhz S3C44B0*/ #define CONFIG_DRIVER_ LAN91C96 HdKLinux联盟 #define CONFIG_LAN91C96_BASE 0x04000300 /* base address */HdKLinux联盟 修改为HdKLinux联盟 #define CONFIG_DRIVER_RTL8019 //we have a RTL8019AS chipHdKLinux联盟 #define RTL8019_BASE 0x6000000 //修改 原值为0c700000HdKLinux联盟 //#define CFG_LOAD_ADDR 0x0c800000 /* default load address */HdKLinux联盟 //这是uclinux加载的地址,将uclinux内核下载到sdram后运行的地址 HdKLinux联盟 修改HdKLinux联盟 //sdram和Nor flash的参数地址和大小,修改为自己开发办上相应的值。HdKLinux联盟 /* Physical Memory Map*/HdKLinux联盟 #define CONFIG_NR_DRAM_BANKS 1 /* we have 1 banks of DRAM */HdKLinux联盟 #define PHYS_SDRAM_1 0x0c000000 /* SDRAM Bank #1 */HdKLinux联盟 #define PHYS_SDRAM_1_SIZE 0x00800000 /* 8 MB */ #define PHYS_FLASH_1 0x00000000 /* Flash Bank #1 */HdKLinux联盟 #define PHYS_FLASH_SIZE 0x00200000 /* 2MB */ #define CFG_FLASH_BASE PHYS_FLASH_1 HdKLinux联盟 2. /cpu/s3c44b0/serial.c #if CONFIG_S3C44B0_CLOCK_SPEED==60 HdKLinux联盟 divisor = 32; 3. cpu/s3c44b0/start.S: ldr r1, =PLLCON #if CONFIG_S3C44B0_CLOCK_SPEED==60 HdKLinux联盟 ldr r0, = 0x88042HdKLinux联盟 #elif CONFIG_S3C44B0_CLOCK_SPEED==75 HdKLinux联盟 ldr r0, =0x610c1 /*B2: Xtal=20mhz Fclk=75MHz */ HdKLinux联盟 #elif CONFIG_S3C44B0_CLOCK_SPEED==64 HdKLinux联盟 ldr r0, =((M_DIV<<12)+(P_DIV<<4)+S_DIV) //Fin=8MHz,Fout=64MHz HdKLinux联盟 #else HdKLinux联盟 #error CONFIG_S3C44B0_CLOCK_SPEED undefined HdKLinux联盟 #endif 中断向量表部分:HdKLinux联盟 add pc, pc, #0x0c000000HdKLinux联盟 add pc, pc, #0x0c000000HdKLinux联盟 add pc, pc, #0x0c000000HdKLinux联盟 add pc, pc, #0x0c000000HdKLinux联盟 add pc, pc, #0x0c000000HdKLinux联盟 add pc, pc, #0x0c000000HdKLinux联盟 add pc, pc, #0x0c000000HdKLinux联盟 修改为:HdKLinux联盟 LDR PC, Undefined_Addr HdKLinux联盟 LDR PC, SWI_Addr HdKLinux联盟 LDR PC, Prefetch_Addr HdKLinux联盟 LDR PC, Abort_Addr HdKLinux联盟 LDR PC,RESERVE_Addr HdKLinux联盟 LDR PC, IRQ_Addr HdKLinux联盟 /* subs pc,lr,#4*/ HdKLinux联盟 LDR PC, IRQ_Addr HdKLinux联盟 /* subs pc,lr,#4*/ Undefined_Addr: HdKLinux联盟 .word 0x0c000004 HdKLinux联盟 SWI_Addr: HdKLinux联盟 .word 0x0c000008 HdKLinux联盟 Prefetch_Addr: HdKLinux联盟 .word 0x0c00000C HdKLinux联盟 Abort_Addr: HdKLinux联盟 .word 0x0c000010 HdKLinux联盟 RESERVE_Addr: HdKLinux联盟 .word 0x0c000014 HdKLinux联盟 IRQ_Addr: HdKLinux联盟 .word 0x0c000018 HdKLinux联盟 FIQ_Addr: HdKLinux联盟 .word 0x0c00001C HdKLinux联盟 4. /board/dave/common/flash.c flash_get_offsets函数中的flash芯片块的大小如下HdKLinux联盟 /* set up sector start address table */HdKLinux联盟 if (((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_SST) ||HdKLinux联盟 ((info->flash_id & FLASH_TYPEMASK) == FLASH_AM640U)) {HdKLinux联盟 for (i = 0; i < info->sector_count; i++)HdKLinux联盟 info->start[i] = base + (i * 0x00008000);//39VF1601 每块大小为32K flash_get_size函数中增加flash芯片信息HdKLinux联盟 case (CFG_FLASH_WORD_SIZE)SST_ID_xF1601://增加VF1601的判断语句HdKLinux联盟 info->flash_id += FLASH_SST160A;HdKLinux联盟 info->sector_count = 64;//总共2M,每块32k,共64HdKLinux联盟 info->size = 0x00200000;HdKLinux联盟 break; /* => 2 MB */ 文件中B2全修改为ULong44b0 5. /drivers/rtl8019.h 36 #define ETH_ADDR_SFT (8) HdKLinux联盟 37 #define EI_SHIFT(x) ((x)<<ETH_ADDR_SFT) HdKLinux联盟 38 HdKLinux联盟 39 #define RTL8019_REG_00 (RTL8019_BASE + EI_SHIFT(0x00)) HdKLinux联盟 40 #define RTL8019_REG_01 (RTL8019_BASE + EI_SHIFT(0x01)) #define RTL8019_REG_02 ...HdKLinux联盟 ... HdKLinux联盟 6. /board/dave/ULong44b0/lowlevel_init.S MEMORY_CONFIG: HdKLinux联盟 .long 0x11010102 HdKLinux联盟 .long 0x600 HdKLinux联盟 .long 0x7ffc HdKLinux联盟 .long 0x7ffc HdKLinux联盟 .long 0x7ffc HdKLinux联盟 .long 0x7ffc HdKLinux联盟 .long 0x2610 HdKLinux联盟 .long 0x18000 HdKLinux联盟 .long 0x18000 HdKLinux联盟 .long 0x960459 HdKLinux联盟 .long 0x10 HdKLinux联盟 .long 0x20 HdKLinux联盟 .long 0x20 7. /include/configs/ULong44b0.h 79 #define CONFIG_COMMANDS ( CONFIG_CMD_DFL | \ HdKLinux联盟 80 CFG_CMD_DATE | \ HdKLinux联盟 81 CFG_CMD_ELF | \ HdKLinux联盟 82 CFG_CMD_NET | \ HdKLinux联盟 CFG_CMD_PING | \HdKLinux联盟 83 CFG_CMD_ENV|CFG_CMD_FLASH ) HdKLinux联盟 173 #define CFG_ENV_IS_IN_FLASH HdKLinux联盟 174 #undef CFG_ENV_IS_NOWHERE HdKLinux联盟 175 HdKLinux联盟 176 #define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x20000) /* environment start address */ HdKLinux联盟 177 #define CFG_ENV_SECT_SIZE 0x10000 /* Total Size of Environment Sector */ 增加宏HdKLinux联盟 #define CFG_MONITOR_BASE PHYS_SDRAM_1HdKLinux联盟 HdKLinux联盟 三:编译出错后的修改 HdKLinux联盟 /cpu/s3c44b0/下的config.mk:HdKLinux联盟 PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)HdKLinux联盟 改成:HdKLinux联盟 PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,$(call cc-option,-mabi=apcs-gnu),)HdKLinux联盟
|