新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > uClinux在嵌入式系统中的移植研究

uClinux在嵌入式系统中的移植研究

作者:时间:2012-05-21来源:网络收藏

3.3 内核的修改

目前已被成功到S3C44B0及其他多款ARM芯片上,但由于嵌入式操作系统的运行是与的硬件密切相关的,而硬件的设计则会因为使用场合的不同而千差万别,因此,内核源代码中和硬件紧密相关的部分就应该针对特定的硬件作出适当的修改。

首先,从网站(www.uClinx.org)下载源码uClinux-dist-20040408,但这个发行包中的内核对S3C44B0X处理器的支持是不完整的,必须为内核打上补丁uClinux-2.4.24.patch(可以从http://www.hzlitai.com.cn下载),然后在终端下执行:patch –p0uClinux

-2.4.24.patch就可以安装该补丁。该补丁完善了对S3C44B0的支持,但是它针对特定的硬件及Bootloader,对内核做了相应的修改,因此我们在做时应该根据自己的BootLoader及硬件来修改内核。修改部分如下:

(1)压缩内核代码起始地址修改

修改目录linux-2.4.x/arch/armnommu/boot/下的文件Makefile里的如下代码:

ifeq ($(CONFIG_BOARD_MBA44),y)

ZTEXTADDR = 0x0c300000

ZRELADDR = 0x0c008000

Endif

ZTEXTADDR代表映像文件image.rom自解压的起始地址,它的值是由BootLoader的功能2决定的。执行功能2,将image.rom从Flash转移到 SDRAM的地址0x0c300000,内核自解压,所以ZTEXTADDR必须和这个值相同。ZRELADDR代表内核解压后代码输出起始地址。

(2)处理器配置选项的修改

修改目录linux-2.4.x/arch/armnommu/下的文件config.in里的如下代码:

define_int CONFIG_ARM_CLK 64000000

if [ "$CONFIG_SET_MEM_PARAM" = "n" ]; then

define_hex DRAM_BASE 0x0C000000

define_hex DRAM_SIZE 0x00800000

define_hex FLASH_MEM_BASE 0x00000000

define_hex FLASH_SIZE 0x00200000

DRAM_BASE代表SDRAM的起始地址,DRAM_SIZE代表SDRAM的大小,FLASH_MEM_BASE代表Flash的起始地址, FLASH_SIZE代表Flash的大小。要根据自己的Flash和SDRAM来设定这些值

(3)内核起始地址的修改

修改目录linux-2.4.x/arch/armnommu/下的文件Makefile里的如下代码:

ifeq ($(CONFIG_BOARD_MBA44),y)

TEXTADDR = 0x0c008000

MACHINE = S3C44B0X

INCDIR = $(MACHINE)

CORE_FILES := $(CORE_FILES) #romfs.o

Endif

TEXTADDR代表内核起始地址,与image.rom自解压后代码输出起始地址(ZRELADDR)相同。

(4)ROM文件系统的定位修改

修改目录linux-2.4.x/drivers/block下的文件blkmem.c里的如下代码:

#ifdef CONFIG_BOARD_MBA44

{0, 0x00100000, -1},

#endif

0x00100000是文件系统的定位地址。本文中采用uClinux的文件系统ROM file system,它的映象文件romfs.img要烧写到flash的某一地址。一旦该定位地址确定,在执行BootLoader的功能1时就要将 romfs.img烧写到flash的这个地址。定位地址不是固定不变的,可以根据flash和image.rom的大小来更改。

矢量控制相关文章:矢量控制原理


评论


相关推荐

技术专区

关闭