首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Linux内核在S3C2410上移植的研究 02

Linux内核在S3C2410上移植的研究 02

当上电或复位后,VIVI启动,位于NANDFLASH中的前4 KB程序便从NANDFLASH中由S3C2410自动拷贝到一个叫SteppingStone的4 KB的内部RAM中,该RAM之后被映射到地址0x00处。此时,也就是VIVI前4 KB代码开始运行,进行第一阶段的硬件初始化,主要工作为:关Watchdog Timer,关中断,初始化PLL和时钟主频设定,初始化存储器控制器。VIVI初始化的主要内容:
   
    VIVI初始化阶段一(在/arch/s3C2410/head.s文件内):
   
    硬件初始化
   
    配置串口
   
    复制自身到SDRAM中(跳转到C代码入口函数)
   
    VIVI初始化阶段二(在/init/main.c文件内):
   
    对硬件系统继续初始化
   
    内存映射初始化、内存管理单元MMU初始化
   
    初始化堆
   
    初始化mtd设备
   
    初始化私有数据
   
    初始化内置命令
   
    启动VIVI
   
    3 Linux内核的移植
   
    3.1 内核移植
   
    实验系统运行的Linux版本是针对2.4.18进行移植的Linux-2.4.18.-rm7-pxal版本。本实验是把该移植好的内核,让它如何在自己的硬件系统上正常的运转起来。
   
    Linux内核主要由5个子系统组成:进程调度子系统、进程间通信子系统、内存管理子系统、虚拟文件系统子系统、网络接口子系统。
   
    (1)设置目标平台和指定交叉编译器:在最上层的根目录/Makefile文件中,首先要指定所移植的硬件平台,以及所使用的交叉编译器。改为如下:
   
    ARCH:=arm
   
    CROSS_COMPILE=/opt/host/armv41/bin/armv41-unknown-Linux-
   
    也就是说,所移植的硬件平台是ARM,所使用的交叉编译器是存放在目录/opt/host/armv41/bin/下的armv41-unknown-Linux-xxx等工具。
   
    (2)arch/arm目录下Makefile修改。系统的启动代码是通过这个文件产生的。在Linux-2.4.18内核中要添加如下代码:
   
    ifeq(MYM(CONFIG_ARCH_S3C2410),y)
   
    TEXTADDR =0 xC0008000
   
    MACHINE =s3c2410
   
    endif
   
    这里TEXTADDR确定内核开始运行的虚拟地址。
   
    (3)arch/arm目录下config.in修改。配置文件config.in能够配置运行"make menuconfig"命令时的菜单选项,由于2.4.18内核中没有S3C2410的相关信息,所以要在该文件中进行有效的配置。
   
    (4)arch/arm/boot目录下Makefile修改。编译出来的内核存放在该目录下,这里指定内核解压到实际硬件系统上的物理地址。要根据实际的硬件系统修改解压后,内核开始运行实际的物理地址。
   
    (5)arch/arm/boot/compressed目录下Makefile修改。该文件从vmLinux中创建一个压缩的vmlinuz镜像文件。该文件中用到的SYSTE M,ZTEXTADDR,ZBSSADDR和ZRELADDR是从arch/arm/boot/Makefile文件中得到的。添加如下代码:
   
    ifeq(MYM(CONFIG_ARCH_S3C2410),y)
   
    OBJS+=head-s3c2410.o
   
    Endif
   
    (6)arch/arm/boot/compressed目录下添加head-s3c2410.s.该文件主要用来初始化处理器。
   
    (7)arch/arm/def-configs目录下添加配置好的S3C2410的配置文件。
   
    (8)arch/arm/kernel目录下Makefile修改。该文件主要用来确定文件类型的依赖关系。
   
    (9)arch/arm/kernel目录下的文件debug-armv.s修改。在该文件中添加如下代码,目的是关闭外围设备的时钟,以保证系统正常运行。
   
    (10)arch/arm/kernel目录下的文件entry-armv.s修改,CPU初始化时处理中断的汇编代码。
   
    (11)arch/arm/ram目录下的相关文件。那里面则是移植好的有关arm的内存管理代码。
   
    (12)arch/arm/mach-s3c2410目录下的相关文件。
   
    那里面则是针对s3c2410这款处理器编写的所需代码。
   
    3.2 制作cramfs文件系统
   
    利用工具软件MKCRAMFS制作cramfs文件系统,MKCRAMFS工具在/实验软件/tools/目录下,该文件系统是一个只读压缩的文件系统,文件系统类型可以是ext2,ext3等。这里提供的一个系统目录是root_tech,它里面包含将来要用到的所有文件,它在/实验软件/source_ code/的目录内,为root.tar.bz2.把制作工具和root_tech放在同一个文件夹下并对root.tar.bz2进行解压,在终端下切换到那个文件夹目录下使用命令MKCRAMFS root_tech rootfs.cramfs,就可把root_tech制作成文件名为rootfs.cramfs的只读的压缩的cramfs文件系统了。系统启动后,内核将把它加载到内存中,解压。
   
    4 结语
   
    本文针对一个特定的目标平台,提供了构建一个基本嵌入式Linux系统的过程与方法。对Linux 2.4内核版本进行裁减、移植,编译生成的内核在S3C2410处理器的目标板上成功运行,且保留了Linux原有的工作稳定的特点。将Linux操作系统移植于嵌入式系统中作为嵌入式系统的底层研发平台是一个复杂的问题,移植后系统的实时性、稳定性、安全性和精简程度等方面问题还需要在以后的设计中进一步研究。
返回列表