微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于uClinux内核移植ARM开发板应用

基于uClinux内核移植ARM开发板应用

时间:12-05 来源:互联网 点击:

inux-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 = ~(0xff16);

+

rw_tmp |= (16-1)16;

+ outl(rw_tmp, S3C44B0X_TCFG0); // prescaler =

1/16

+ rw_tmp = inl(S3C44B0X_TCFG1);

+ rw_tmp =

~(0xf20);

+ rw_tmp |= 020;

+ 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内部寄存器地址的偏移量。

3.10以太网设备基地址修改

修改文件:uClinux-dist/linux-2.4.x/driver/net/ne.c

修改内容:dev->base_addr =

base_addr = 0x08000000;

说明:修改了以太网设备的基地址。

4.移植的步骤

4.1解压uClinux-dist发行包

到以下地址下载uClinux-dist-20040408.tar.gz源代码包:

http://www.uclinux.org/pub/uClinux/dist/uClinux-dist-20040408.tar.gz

该版本在很多方面比早先的20030522版本要完善很多,这也使我们的移植工作变得方便很多。其中使用的内核版本是Linux

2.4.24。

以下工作在装有Linux操作系统(例如RedHat9.0)的PC机上进行。

将uClinux-dist-20040408.tar.gz拷贝到/home/下(或者其它目录都可以),运行解压命令:

tar xvzf uClinux-ARMSYS-20040801.tar.gz

解压结束后会在/home/下生成uClinux-dist目录。

4.2安装补丁

到以下地址下载补丁文件:

http://www.hzlitai.com.cn/download/uClinux-20040408-ARMSYS.rar

解压后产生patch文件,安装patch文件:

patch –p1 uClinux-20040408-ARMSYS.patch

安装过程中可能会出现一些错误信息,可以手动地按照patch文件的内容在指定的文件处进行修改一下。

5.配置与编译

5.1安装编译环境

到以下地址下载arm-elf工具链:

http://www.uclinux.org/pub/uClinux/m68

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top