Board logo

标题: 基于uClinux内核移植ARM开发板应用(5) [打印本页]

作者: yuyang911220    时间: 2014-12-25 16:45     标题: 基于uClinux内核移植ARM开发板应用(5)

3.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。
3.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的起始地址。
3.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, struct pt_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 32
extern __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的中断来产生节拍。
3.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相对应。
3.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-。
3.9以太网卡寄存器地址的偏移量修改
这里针对ARMSYS的硬件结构,要做两处特殊的修改:
修改文件:uClinux-dist/linux-2.4.x/driver/net/8390.h
修改内容:#define
ETH_ADDR_SFT 8
说明:访问RTL8019内部寄存器地址的偏移量。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0