![Rank: 8](images/default/star_level3.gif) ![Rank: 8](images/default/star_level3.gif)
- UID
- 872238
|
![](http://images.eccn.com/silabs/silicon_chip_980x60_202203.jpg)
首先,拿我的4510板开工做实验,尝试修改内核的一些参数。
一、修改波特率1、INCLUDE/ASM-armNOMMU/ARCH-SNDS100/HARDWARE.H中将#define DEBUG_UBRDIV_REG_VAL (0x500) 改为#define DEBUG_UBRDIV_REG_VAL (0x1a0)
此为启动期间输出信息所用串口波特率分频系数2、DRIVERS/CHAR/SERIAL-SAMSUNG.C中将serial_console_setup函数中int baud = 19200 改为 57600此为CONSOLE STARTUP时设置的波特率,此时用的是这个文件,到后面移植到44B0X时换为另一个文件。
3、VENDERS/SAMSUNG/4510B/CONFIG-ARCH 19200->57600 不知有用否,为防止出错先改了。
编译运行成功。
二、修改运行地址1、ARCH/ARMNOMMU/MAKEFILE TEXTADDR 决定KERNEL起始运行地址,即IMAGE.RAM应DOWN到的位置2、ARCH/armNOMMU/BOOT/MAKEFILE ZREALADDR 决定KERNEL解压后数据输出的地址,同1 ZTEXTADDR 带BOOTLOADER的压缩内核文件烧入FLASH的起始地址,即从哪个位置开始执行BOOTLOADER,若启动时直接执行,将其设为0,若自带BIOS可以跳到你想要的地址,可改为你要的位置。
我把KERNEL运行地址改为0X00208000,编译运行成功。
三、(重点)
修改uC使其在不REMAP的情况下在4510上运行。因为44B0与4510第一点区别就是4510可REMAP而44B0不行。在这点上遇到点问题花了我三天时间才搞掂,其实是在个很简单的地方设置一下。
1、修改存储器参数ARCH/ARMNOMMU/CONFIG.IN里面对应的SNDS100下的参数:DRAM_BASE,DRAM_SIZE,FLASH_MEM_BASE,FLASH_SIZE针对不同的开发板,这些参数也可能不同,我的4510板原值分别为0X00000000,0X01000000,0X01000000,0X00200000这些参数意思一看就明,我将它们分别改为0X01000000,0X01000000,0X00000000,0X00200000即不对内存分配REMAP. 2、把第二步中的KERNEL运行地址改为0X01008000. 3、修改VECTORS_BASE的宏定义,原值在INCLUDE/ARMNOMMU/PROC-armV/SYSTEM.H中定义为0,意思是KERNEL将向量表COPY到DRAM中的地址,现改DRAM_BASE即0X01000000,因为实际向量还是在0地址即FLASH起始地址,所以在FLASH中向量处做个跳转:0: LDR PC,=0X01000000 4: LDR PC,=0X01000004……
我的BIOS有下载和运行程序的功能,因此没有改地址0的指令。这样发生中断时先到实际地址0X18,再跳到UCLINUX的中断向量地址0X01000018. 4、修改ARCH/armNOMMU/MACH-SNDS100/ARCH.C,在 MAINTAINER("XXX") 后加上BOOT_MEM(DRAM_BASE, 0x00000000, 0x00000000)
5、修改ARCH/armNOMMU/INIT.C,在reserve_node_zero函数里将if (machine_is_integrator() || machine_is_snds100() || machine_is_evS3C4530HEI() )
reserve_bootmem_node(pgdat, 0, __pa(&_stext));改为if (machine_is_integrator() || machine_is_snds100() || machine_is_evS3C4530HEI() )
reserve_bootmem_node(pgdat, DRAM_BASE, __pa(&_stext)-DRAM_BASE);6、make menuconfig时不要选择自己手动设置存储器参数!(很简单的一点,搞了我好久)
上诉过程完成后,可以证明这版uC是可以移植到44B0X上的,之后开始移植过程。先做些基本修改,把上面第二步中的KERNEL运行地址改为0X0C008000,这是44B0X中的DRAM地址。把上面第三步中的1中DRAM_BASE, DRAM_SIZE 分别改为0X0C000000, 0X00800000, 另外把FLASH中0-0X1C中的指令改跳转到0X0C000000-0X0C00001C.基础做好了,之后看看在原版中对应于4510的硬件操作包括些什么。第一个是网络部分,我们可以先把它去掉,以后在加自己的驱动,我在DRIVERS/NET/MAKEFILE里面屏蔽了obj-$(CONFIG_ETH_S3C4510) += s3c4510.o这一行,使网络驱动不被编译,也不知道有什么相关的遗留问题,不过我把VENDORS/SAMSUNG/4510B/下面inittab和rc两个文件中启动网络的命令也关了。剩下的和硬件相关的操作还有三个,一是中断处理,二是TIMER,三是串口控制台,另外在编译IMAGE.ROM时用到ARCH/armNOMMU/BOOT/COMPRESSED/HEAD.S文件,原文件因是启动版包含了相关的硬件初始化,因为先不用可以都屏蔽掉。 |
|