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

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

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

,与S3C44B0X相关的代码则放在目录arch/armnommu/match-

S3C44B0X。

◎ include:include子目录包括编译核心所需要的大部分头文件。与平台无关的头文件在

include/linux子目录下,与ARM处理器(不带MMU)相关的头文件在include/asm-armnommu子目录下,与

S3C44B0X相关的代码在include/asm-armnommu/arch-S3C44B0X目录下;

init:这个目录包含核心的初始化代码(注意:不是系统的引导代码),包含两个文件main.c和Version.c,这是研究核心如何工作的一个非常好的起点。

kernel:主要的核心代码,此目录下的文件实现了大多数linux系统的内核函数,其中最重要的文件当属sched.c;同样,和体系结构相关的代码在arch/*/kernel中;

drivers: 放置系统所有的设备驱动程序;每种驱动程序又各占用一个子目录:如,/block 下为块设备驱动程序,比如ide(ide.c)。

其他:例如mm ,这个目录包括所有独立于处理器体系结构的内存管理代码,如页式存储管理内存的分配和释放等;lib放置核心的库代码;net,核心与网络相关的代码;

ipc,这个目录包含核心的进程间通讯的代码;fs,所有的文件系统代码和各种类型的文件操作代码,它的每一个子目录支持一个文件系统,例如fat和

ext2;Scripts,此目录包含用于配置核心的脚本文件等。

Linux Kernel Tree List

一般在每个目录下,都有一个.depend 文件和一个 Makefile

文件,这两个文件都是编译时使用的辅助文件,仔细阅读这两个文件对弄清各个文件这间的联系和依托关系很有帮助;而且,在有的目录下还有Readme

文件,它是对该目录下的文件的一些说明,同样有利于我们对内核源码的理解。

uClinux-dist-20040408发行包中的内核对S3C44B0X处理器的支持是不完整的,因此,我们不能够希望在make

config配置选项中选中44B0X目标板后,直接编译它来得到一个很好地支持44B0X开发板的内核映像,我们必须为内核打上补丁。针对ARMSYS

的补丁文件可以在http://www.hzlitai.com.cn/download/default.asp地址处下载得到。这款补丁是众多爱好

uClinux和44B0X处理器的网友们共同完成的。下一节我们就对这个补丁中的主要修改项目进行介绍和分析,从中了解uClinux移植中的要点。

3.移植项目及说明

3.1压缩内核代码起始地址修改

修改文件:uClinux-dist/linux-2.4.x/arch/armnommu/boot/Makefile

修改内容:

ifeq

($(CONFIG_BOARD_MBA44),y)

ZTEXTADDR = 0x0c100000

ZRELADDR =

0x0c008000

endif

说明:

ZTEXTADDR:自解压代码的起始地址。

ZRELADDR:内核解压后代码输出起始地址。

3.2处理器配置选项的修改

修改文件:uClinux-dist/linux-2.4.x/arch/armnommu/config.in

修改内容:

define_bool

CONFIG_NO_PGT_CACHE y

define_bool CONFIG_CPU_WITH_CACHE y

define_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 5

if [

$CONFIG_SET_MEM_PARAM = n ]; then

- define_hex DRAM_BASE 0x00000000

+

define_hex DRAM_BASE 0x0C000000

define_hex DRAM_SIZE 0x00800000

-

define_hex FLASH_MEM_BASE 0x01000000

+ define_hex FLASH_MEM_BASE

0x00000000

define_hex FLASH_SIZE

0x00200000

fi

fi

……

说明:

修改了对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的大小

3.3内核起始地址的修改

修改文件:uClinux-dist/linux-2.4.x/arch/armnommu/Makefile

修改内容:

ifeq

($(CONFIG_BOARD_MBA44),y)

-TEXTADDR = 0x0c000000

+TEXTADDR =

0x0c008000

MACHINE = S3C44B0X

INCDIR = $(MACHINE)

-CORE_FILES :=

$(CORE_FILES) romfs.o

+CORE_FILES := $(CORE_FILES)

#romfs.o

endif

说明:

TEXTADDR:内核的起始地址,通常取值:DRAM_BASE+0x8000。

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/l

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

网站地图

Top