基于uClinux内核移植ARM开发板应用
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
开发 应用 ARM 移植 uClinux 内核 基于 相关文章:
- 嵌入式软件设计中查找缺陷的几个技巧(03-06)
- 基于算法的DSP硬件结构分析(04-02)
- Windows CE下驱动程序开发基础(04-10)
- DSP+FPGA在高速高精运动控制器中的应用(05-17)
- 基于USB接口和DSP的飞机防滑刹车测试系统设计(05-19)
- 一种基于DSP平台的快速H.264编码算法的设计(05-19)