uclinux移植项目及说明4.4.移植项目及说明4.1压缩内核代码起始地址修改修改文件:uClinux-dist/linux-2.4.x/arch/armnommu/boot/Makefile 修改内容:ifeq ($(CONFIG_BOARD_MBA44),y)ZTEXTADDR = 0x0c100000ZRELADDR = 0x0c008000endif说明:ZTEXTADDR:自解压代码的起始地址。
ZRELADDR:内核解压后代码输出起始地址。
4.2处理器配置选项的修改修改文件:uClinux-dist/linux-2.4.x/arch/armnommu/config.in修改内容:define_bool CONFIG_NO_PGT_CACHE ydefine_bool CONFIG_CPU_WITH_CACHE ydefine_bool CONFIG_CPU_WITH_MCR_INSTRUCTION n- define_int CONFIG_ARM_CLK 60000000- define_bool CONFIG_SERIAL_S3C44B0X y- define_int CONFIG_FORCE_MAX_ZONEORDER 5+ define_int CONFIG_ARM_CLK 64000000 #72000000+# define_bool CONFIG_SERIAL_S3C44B0X y+# define_int CONFIG_FORCE_MAX_ZONEORDER 5if [ "$CONFIG_SET_MEM_PARAM" = "n" ]; then- define_hex DRAM_BASE 0x00000000+ define_hex DRAM_BASE 0x0C000000define_hex DRAM_SIZE 0x00800000- define_hex FLASH_MEM_BASE 0x01000000+ define_hex FLASH_MEM_BASE 0x00000000define_hex FLASH_SIZE 0x00200000fifi……说明:修改了对ARM处理器主频的定义:define_int CONFIG_ARM_CLK 64000000修改了存储器大小和起始地址的定义:define_hex DRAM_BASE 0x0C000000;SDRAM的起始地址define_hex DRAM_SIZE 0x00800000;SDRAM的大小define_hex FLASH_MEM_BASE 0x00000000;flash的起始地址define_hex FLASH_SIZE 0x00200000;flash的大小4.3内核起始地址的修改修改文件:uClinux-dist/linux-2.4.x/arch/armnommu/Makefile修改内容:ifeq ($(CONFIG_BOARD_MBA44),y)-TEXTADDR = 0x0c000000+TEXTADDR = 0x0c008000MACHINE = S3C44B0XINCDIR = $(MACHINE)-CORE_FILES := $(CORE_FILES) romfs.o+CORE_FILES := $(CORE_FILES) #romfs.oendif说明:TEXTADDR:内核的起始地址,通常取值:DRAM_BASE+0x8000。
4.4ROM文件系统的定位修改修改文件:uClinux-dist/linux-2.4.x/drivers/block/blkmem.c修改内容:+#ifdef CONFIG_BOARD_MBA44+ {0, 0xc700000, -1},/*{0, 0x100000, -1},*/#endif说明:将ROM file system在SDRAM中的地址定位在0xc700000。
4.5修改存储空间配置修改文件:uClinux-dist/linux-2.4.x/include/asm-armnommu/arch-S3C44B0X/memory.h 修改内容:-#define PHYS_OFFSET (DRAM_BASE + 2*1024*1024)+#define PHYS_OFFSET (DRAM_BASE)//(DRAM_BASE + 2*1024*1024)#define PAGE_OFFSET (PHYS_OFFSET)-#define END_MEM (DRAM_BASE + DRAM_SIZE - 2*1024*1024)+#define END_MEM (DRAM_BASE+DRAM_SIZE)//(DRAM_BASE +DRAM_SIZE - 2*1024*1024)说明:PHYS_OFFSET:RAM第一个bank的起始地址。
4.6初始化节拍定时器修改文件:uClinux-dist/linux-2.4.x/include/asm-armnommu/arch-S3C44B0X/time.h修改内容:-extern void s3c44b0x_timer_interrupt(int irq, void *dev_id, struct pt_regs*regs);+//extern void s3c44b0x_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs);+static inline void s3c44b0x_timer_interrupt(int irq, void *dev_id, structpt_regs *regs)+{+ do_leds();+ do_timer(regs);+}//modified by hzh/* TODO: THE, 2003-08-13, do timer setup like in eCos */-#define S3C44B0X_TIMER5_PRESCALER 16+#define S3C44B0X_TIMER5_PRESCALER 32extern __inline__ void setup_timer (void){u_int32_t tmod;u_int32_t period;+ __u32 rw_tmp;period = (CONFIG_ARM_CLK/S3C44B0X_TIMER5_PRESCALER)/HZ;outl(period, S3C44B0X_TCNTB5);@@ -36,8 +42,14 @@outl(tmod, S3C44B0X_TCON);/* initialize the timer period and prescaler */- outl((5-1) << 16, S3C44B0X_TCFG0);- outl( (0x3 <<20), S3C44B0X_TCFG1); /* prescaler */+ rw_tmp = inl(S3C44B0X_TCFG0);+ rw_tmp &= ~(0xff<<16);+ rw_tmp |= (16-1)<<16;+ outl(rw_tmp, S3C44B0X_TCFG0); // prescaler = 1/16+ rw_tmp = inl(S3C44B0X_TCFG1);+ rw_tmp &= ~(0xf<<20);+ rw_tmp |= 0<<20;+ outl(rw_tmp, S3C44B0X_TCFG1); // mux = 1/2说明:这里,uClinux使用了S3C44B0X的内部定时器5,并利用定时器5的中断来产生节拍。
4.7定义二级异常中断矢量表的起始地址修改文件:uClinux-dist/linux-2.4.x/include/asm-armnommu/proc/system.h 修改内容:+#ifdef CONFIG_BOARD_MBA44+#undef vectors_base()+#define vectors_base() (DRAM_BASE)+#endif说明:vectors_base()定义了二级异常中断矢量表的起始地址,这个地址与Bootloader 中的_IRQ_BASEADDRESS相对应。
4.8定义CPU体系结构和交叉编译器修改文件:uClinux-dist/linux-2.4.x/Makefile修改内容:-# ARCH := armnommu+ARCH := armnommu# ARCH := m68knommu# ARCH := h8300# ARCH := niosnommu……HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer# CROSS_COMPILE = m68k-elf--# CROSS_COMPILE = arm-elf-+CROSS_COMPILE = arm-elf-# CROSS_COMPILE = h8300-elf-# CROSS_COMPILE = nios-elf-# CROSS_COMPILE = e1-coff-说明:这里定义了CPU体系结构:ARCH := armnommu和对应的交叉编译器名称:CROSS_COMPILE = arm-elf-。
4.9以太网卡寄存器地址的偏移量修改这里针对ARMSYS的硬件结构,要做两处特殊的修改:修改文件:uClinux-dist/linux-2.4.x/driver/net/8390.h修改内容:#define ETH_ADDR_SFT 8说明:访问RTL8019内部寄存器地址的偏移量。
4.10以太网设备基地址修改修改文件:uClinux-dist/linux-2.4.x/driver/net/ne.c修改内容:dev->base_addr = base_addr = 0x08000000;说明:修改了以太网设备的基地址。
5.移植的步骤5.1解压uClinux-dist发行包到以下地址下载uClinux-dist-20040408.tar.gz源代码包:/pub/uClinux/dist/uClinux-dist-20040408.tar.gz该版本在很多方面比早先的20030522版本要完善很多,这也使我们的移植工作变得方便很多。
其中使用的内核版本是Linux 2.4.24。
以下工作在装有Linux操作系统(例如RedHat9.0)的PC机上进行。