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