现场总线的开关量I/O模块设计:操作系统移植与驱动开发

时间:2013-05-27来源:网络

5.3.3嵌入式Linux的移植

在同一个硬件平台上可以嵌入不同的嵌入式操作系统,就好比PC既可以安装Windows又 可以安装Linux一样。同样,有些操作系统经过移植后可以运行在不同的硬件平台上。如果一个系统可以在不同硬件平台上运行,那么这个系统就是可移植的。 使某一个平台的代码运行在其他平台上的。过程叫做移植。

在Linux系统内核代码中有arch目录,其中包含了不同平台(包括i386、 ARM)的代码,arch目录中的代码是为多平台设计并使用的,与体系结构相关的代码都存放在arch//和 include/asm-/目录中,architecture是Linux支持的体系结构的简称。例如,ARM体系结构对应的简称是arm.与这种体系结 构相关的代码都存放在arch/arm/以及include/asm-arm /目录下。嵌入式系统是“硬件可剪裁”的,因此工程师设计的硬件电路会有所不同,从而这些代码可能无法正确运行(比如内核解压的地址不同)。因此,在剪裁 系统内核是必须结合硬件电路对内核代码进行修改移植。

本系统采用Linux2.6.12,Samsung S3C2440已经成为Linux的一个标准支持平台,对内核做简单的修改和配置后,无需任何其他的patch就可以在S3C2440的目标板上运行得很好。

(1)针对内核源码的修改

设置flash分区

内核对flash分区的支持是内核移植成功的一个关键步骤,一共要修改三个文件,分别如下:

指明分区信息

在arch/arm/machs3c2410/devs.c文件中,添加如下内容:

/**************增加的头文件**************/

# include linux/mtd/partitions.h>

#include asm/arch/nand.h>

#include linux/mtd/nand.h>

/**************建立NANDFlash分区表**************/

●指定启动时初始化在

arch/arm/machs3c2410/machsmdk2410.c目录,kernel启动时依据对分区的设置进行初始配置,修改smdk_devices[]:指明初始化时包括前面所设置的flash分区信息,

static struct platform_device*smdk2410_devices[]__initdata={

3c_device_usb,

3c_device_lcd,

3c_device_wdt,

3c_device_i2c,

3c_device_iis,

3c_device_nand,/*添加该语句即可*/

};

●禁止Flash ECC校验kernel是通过bootloader写到Nand Flash的,bootloader通过软件ECC算法产生ECC校验码。这与内核校验的ECC码不一样,内核中的ECC码是由S3C2440中的Nand Flash控制器产生的。

修改drivers/mtd/nand/s3c2410.c文件:找到s3c2410_nand_init_chip( )函数,在该函数体最后加上如下语句。

chip ->eccmode = NAND_ECC_NONE ;

(2)内核配置及编译

主要是在make menuconfig中设置CPU以及设备驱动相关的配置信息,可以参考SMKD2410开发平台上的有关配置,除了自定义的文件系统以及命令行参数外,基本上有关S3C2410处理器开发平台上的配置均相同,在虚拟机上配置界面如图5.2所示。

根目录下只需修改Makefile文件。这个Makefile文件的任务有两个:产生vmlinux件和产生内核模块。为了达到此目的,Makefile将递归进入到内核的各个子目录中,分别调用位于这些子目录中的Makefile.

指定目标平台

ARCH:=arm

指定交叉编译器

CROSS_COMPILE=arm-linux-gcc

设置好交叉编译器之后,执行make clean、makeu Image,生成在IO模块上运行的内核映象文件uImage,通过网口或串口进行烧写。

1 2 3

关键词: 操作系统 移植 驱动 开发 设计 模块 总线 开关 I/O 现场

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版