uclinux的移植、内核文件系统的生成与烧写
- 格式:doc
- 大小:479.50 KB
- 文档页数:8
uclinux的移植、内核文件系统的生成与烧写
一、实验目的
1. 了解uclinux移植的基本过程,掌握内核和文件系统的下载方法
二、实验内容
1. 学习uclinux移植的基本过程
2. 学习内核和文件系统的下载方法
三、实验设备
1. PentiumII以上的PC机
四、uclinux的移植说明
本实验系统的这个uClinux版本以前是针对S3C4510的,板的型号叫SNDS100,但经
过移植后在S3C44B0X上也能稳定的运行。
EL-ARM-830实验系统提供的Bootloader支持两种uClinux启动运行方式:直接从SDRAM中运行,以及把压缩的内核映像从flash中搬移到SDRAM中,再从SDRAM运行。前者需要利用Bootloader提供的网络下载功能,直接把未压缩的映像文件下载到SDRAM中运行,后者则首先要利用Bootloader提供的flash烧录工具进行烧录,使用时,再用move 命令搬到SDRAM中,然后再运行。压缩格式的uClinux内核映像文件都是由开头的一段自解压代码和后面的压缩数据部分组成。自解压类型的uClinux 内核映像文件存放在flash Memory中,由Bootloader加载到SDRAM中的0x0c000000地址处,然后运行它。同样,内核映像文件也可以直接下载到SDRAM运行。uC编译后在IMAGES目录中生成三个文件,其中一个是image.rom,这是带自启动的压缩版,可烧入FLASH,运行时,使用move命令,把它搬移到SDRAM的0x0c000000处运行,一个是image.ram,这是没压缩的,通过下载到SDRAM的0x0c008000处后直接运行。
下面是uClinux移植的基本过程。光盘中的uclinux-S3C44B0X.tar.gz是已经移植好的压缩版本。这里只是阐述基本改动部分的出处。
1. 改动硬件配置
修改文件:
uClinux-S3C44B0X/linux-2.4.x/include/asm-armnommu/arch-snds100/hardware.h
修改为适合S3C44B0X的硬件配置。
2. 改动压缩内核代码起始地址
修改文件:uClinux-S3C44B0X/linux-2.4.x/arch/armnommu/boot/Makefile
修改内容:
压缩内核代码的起始地址的配置
ifeq ($(CONFIG_BOARD_SNDS100),y)
ZRELADDR = 0x0c008000
ZTEXTADDR = 0x0c000000
endif
说明:
ZTEXTADDR:自解压代码的起始地址。
ZRELADDR:内核解压后代码输出起始地址。
3. 改动处理器配置选项
修改文件:uClinux-S3C44B0X/linux-2.4.x/arch/armnommu/config.in
修改内容:
在系统栏里,
#--------------------------------------------------------------------- # S y s t e m
#--------------------------------------------------------------------- if [ "$CONFIG_ARCH_SAMSUNG" = "y" ]; then
choice 'Board Implementation' \
"S3C3410-SMDK40100 CONFIG_BOARD_SMDK40100 \
S3C4530-HEI CONFIG_BOARD_EVS3C4530HEI \
S3C44B0X CONFIG_BOARD_SNDS100" S3C4510-SNDS100
fi
if [ "$CONFIG_BOARD_SNDS100" = "y" ]; then
define_bool CONFIG_NO_PGT_CACHE y
define_bool CONFIG_CPU_32 y
define_bool CONFIG_CPU_26 n
define_bool CONFIG_CPU_S3C4510 y
define_bool CONFIG_CPU_ARM710 y
define_bool CONFIG_CPU_WITH_CACHE y
define_bool CONFIG_CPU_WITH_MCR_INSTRUCTION n
define_bool CONFIG_SERIAL_SAMSUNG y
define_hex DRAM_BASE 0x0c000000
define_hex DRAM_SIZE 0x01000000
define_hex FLASH_MEM_BASE 0x00000000
define_hex FLASH_SIZE 0x00200000
fi
修改了存储器大小和起始地址的定义:
define_hex DRAM_BASE 0x0C000000;SDRAM的起始地址
define_hex DRAM_SIZE 0x01000000;SDRAM的大小
define_hex FLASH_MEM_BASE 0x00000000;flash的起始地址
define_hex FLASH_SIZE 0x00200000;flash的大小
4. 改动内核起始地址
修改文件:uClinux-S3C44B0X/linux-2.4.x/arch/armnommu/Makefile
ifeq ($(CONFIG_BOARD_SNDS100),y)
TEXTADDR = 0x0c008000
MACHINE = snds100
Endif
TEXTADDR:内核的起始地址,通常取值:DRAM_BASE+0x8000
5. ROM文件系统的定位修改
修改文件:uClinux-S3C44B0X/linux-2.4.x/drivers/block/blkmem.c
#ifdef CONFIG_BOARD_SNDS100
{0, romfs_data, -1},
#endif
使用的是romfs_data数组。
6. 改动存储空间配置
修改文件:
uClinux-S3C44B0X/linux-2.4.x/include/asm-armnommu/arch-snds100/memory.h #define PHYS_OFFSET (DRAM_BASE)
#define PAGE_OFFSET PHYS_OFFSET
#define END_MEM (DRAM_BASE + DRAM_SIZE)
说明:PHYS_OFFSET:RAM第一个bank的起始地址。
7. 初始化节拍定时器
修改文件:
uClinux-S3C44B0X /linux-2.4.x/include/asm-armnommu/arch-snds100/time.h
rTCON &= 0xf0ffffff; //clear manual update bit, stop Timer 5 rTCFG0 &= 0xff00ffff; //定时器4/5的预分频为16