Linux内核分析及在S3C2440上移植过程

更新时间:2023-04-22 00:43:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Linux内核分析及在S3C2440

Linux内核分析及在S3C2440上移植过程

LinuxAnalysisAndTransplantProcessOnTheS3C2440

曹王月CaoYue

(江西理工大学机电工程系,江西赣州

341000)

(ElectricalandMechanicalEngineering,JiangxiUniversityofTechnology,JiangxiGanzhou341000)摘要:本文介绍了三星公司的基于ARM9内核的S3C2440芯片嵌入式Linux系统移植过程,构建出最基本的ARM9的Linux开发环境。在已经移植U-Boot的基础上,裁剪并移植Linux内核。

关键词:Linux2.6.22.6;ARM;S3C2440中图分类号:TP316

文献标识码:A

文章编号:1671-4792-(2010)1-0173-03

Abstract:ThisarticleintroducesSamsung'sARM9-basedS3C2440chipembeddedLinuxsystemtransplantpro-cess,andbuildsthebasicARM9-Linuxdevelopmentenvironment.CuttingandtransplantingLinuxkernelafterU-Boothasalreadybeenthebasefortransplantation.

Keywords:Linux2.6.22.6;ARM;S3C2440

0引言

嵌入式系统是以应用为中心,以计算机技术为基础,软

可靠性、成本、体积、功耗严格要硬件可裁减,适应于对功能、

求的专用计算机系统。嵌入式设备在生活中随处可见,例如电子表、手机、MP3播放器、遥控器等,涵盖了生产、工业控

通信、网络、消费电子、汽车电子、军工等领域。ARM是嵌制、

入式处理多种构架中的一种,是32位嵌入式RISC微处理器技术的领导者。基于ARM的处理器以其高速度、低功耗、价格低等优点得到了非常广泛的应用。

随着技术的发展及人们需求的增加,各种消费类电子产品的功能越来越强大,随身携带的电子设备变得“等同于PC”。在工业控制领域,系统芯片(SoC)以其更低廉的价格提供更丰富的功能,使得一个嵌入式系统可以同时完成更多的控制功能。当系统越来越大、应用越来越多,能够统一管理系统资源、为用户提供访问硬件的接口、调度多个应用程序、管理文件系统等的操作系统变得尤为重要,而嵌入式Linux以其开放源代码、易于移植、资源丰富、免费等优点脱颖而出。1嵌人式Linux开发平台

1.1硬件平台

本文使用的是mini2440,它采用SamsungS3C2440为微处理器,主频400MHz,最高533Mhz,并采用专业稳定的CPU内核电源芯片和复位芯片来保证系统运行时的稳定性。SDRAM内存采用32bit数据总线,时钟频率高达100MHz。mini2440的PCB采用沉金工艺的四层板设计,专业等长布线,保证关键信号线的信号完整性。

mini2440开发板由CPU处理器、SDRAM内存、FLASH存储

器(包含一片64M的NandFlash和一片2M的NorFlash)、LCD显示器组成。

1.2软件开发平台

本文介绍的开发平台mini2440选用资源丰富、性能优越的发行版本Redhat9.0作为开发平台操作系统,并在其上

本文是在已经移植了U-Boot建立arm-linux交叉编译环境。

1.1.6的基础上,移植Linux,其内核版本是2.6.22.6。2Linux内核分析

2.1内核源码结构

从网络上下载Linux-2.6.22.6.tar.bz2解压得到内核源码。Linux内核文件数目将近2万,除去其他架构CPU的相关文件,支持S3C2440这款芯片的完整内核文件有1万多个。这些文件分别位于顶层目录下的17个子目录,各个目录功能独立。

对于ARM架构的S3C2440,其体系相关的代码在arch/arm/目录下,在Linux移植时,首要的工作就是修改这

如图一所示为内核代码目录名称及其层次个目录下的文件。

结构(不包含最后两个目录Documentation及scripts,它们不包含内核代码)。

2.2内核的Makefile分析Makefile的具体作用是:

(1)配置文件.confing中定义了一系列的变量,Make-file将结合它们来决定哪些文件被编进内核、哪些文件被编成模块、涉及哪些子目录。

移植过程

173

科技广场

2010.1

图二内核配置界面

图一

所示为内核代码目录名称及其层次结构

(2)顶层Makefile和arch/¥(ARCH)/Makefile决定将根目录下哪些子目录、arch/¥(ARCH)目录下哪些文件和目录编译进内核。

(3)最后,各级子目录下的Makefile决定所在目录下哪些文件被编进内核,哪些文件被编成模块,进入哪些子目录继续调用它们的Makefile。

(4)顶层Makefile和arch/¥(ARCH)/Makefile设置了可以影响所有文件的编译、连接选项:DFLAGS、AFLAGS、LD-FLAGS、ARFLAGS。

(5)各级子目录下的Makefile中可以设置能够影响当

连接选项,如EXTRA_CFLAGS等,前目录下所有文件的编译、

还可以设置能影响某个文件的编译选项如CFLAGS¥@等。

(6)顶层Makefile按照一定的顺序组织文件,根据连接脚本arch/¥(ARCH)/kernel/vmlinux.lds生成内核映像文件vmlinux。

通过Makefile的管理,决定编译内核中的哪些文件、怎样编译这些文件、怎样连接这些文件以及它们连接时的顺序如何。

2.3内核的Kconfig分析

在内核目录下执行“makemenuconfigARCH=armCROSS_COMPILE=arm-linux-”时,就会看到如图二所示的菜单,这就是内核的配置界面。通过配置界面,可以选择芯片类型、选择需要支持的文件系统,去除不需要的选项等,这就成为“配置内核”。

所有配置工具都是通过读取arch/¥(ARCH)/Kconfig文

件来生成配置界面的,这个文件是所有配置文件的总入口。

Kconfig文件包含config条目(entry)、meun条目、choice条目、comment条目、source条目。其中config是基本条目,常被其他条目包含,用来生成菜单、进行多项选择等。.config文件中可能出现下面3种配置结果中一个。

CONFIG_LEDS_S3C2440=y#对应的文件被编进内核CONFIG_LEDS_S3C2440=m#对应的文件被编成模块#CONFIG_LEDS_S3C2440#对应的文件没被使用meun条目用于生成菜单,格式如下:“menu”<prompt><menuoptiongs><menublock>“endmenu”

Choice条目将多个类似的配置选项组合在一起,供用户单选或多选,格式如下:

“choice”

<choiceoptions><choiceblock>“endchoice”

comment条目用于定义一些帮助信息,它在配置过程中出现在界面的第一行,其格式如下:

“comment”<prompt><commentoptions>

source条目用于读入另一个文件Kconfig,格式如下:“source”<prompt>3Linux内核移植

3.1修改内核以支持S3C2440

编译内核以确保内核可以正确编译。先修改首先配置、

Makefile顶层,修改步骤如下:

ARCH?=¥(SUBARCH)CROSS_COMPILE?=改为:ARCH?=arm

CROSS_COMPILE?=arm-linux-然后执行如下命令,使用arch/arm/configs/S3C2440_

174

defconfig文件来配置内核,生成.config配置文件,就可以直接使用“makemenuconfig”修改配置了。

由于Linux2.6.22.6目前还不支持S3C2440开发板,需在arch/arn/mach-s3c2440/mach-smdk2440.c中做如下修改:

s3c24xx_init_clocks(16934400);改为:

s3c24xx_init_clocks(12000000);

“makeuImage”生成uImage。把uImage放到然后执行

tftp服务器目录下或放到Linux中/work/nfs_root目录下,然后在U-Boot控制界面中使用如下命令下载uImage并启动。

tftp0x32000000uImage或nfs0x30000000192.168.1.1:/work/nfs_root/uImage

bootm0x32000000

可以看到内核启动信息,最后出现panic信息。3.2修改MTD分区

MTD(MemoryTechnologyDevice),是Linux中对ROM、NORFlash、NANDFlash等存储设备抽象出来的一个设备层,它向上提供统一的访问接口,读、写、擦除等,屏蔽底层硬件的操作、各类存储设备的差别。通过MTD设备作用,重新划分NANDFlash的分区。

将NANDFlash分为3个分区,前2MB用于存放内核,接下来的8MB用于存放JFFS2文件系统,剩下的用来存放YAFFS文件系统。

smdk_default_nand_part结构如下修改:

staticstructmtd_partitionsmdk_default_nand_part[]={

[0]={.name=”kernel”,.size=SZ_2M,.offset=0,},[1]={.name=”jffs2”,

.offset=MTDPART_OFS_APPEND,.size=SZ_8M,},[2]={.name=”yaffs”,

.offset=MTDPART_OFS_APPEND,.size=MTDPART_SIZ_FULL,}};执行“makeuImage”重新生成内核,在U-Boot控制界面中使用如下命令下载并启动uImage。

tftp0x32000000uImagebootm0x30000000

3.3移植YAFFS文件系统取得源代码文件,解压后得到Development目录,目录下有两个子目录:yaffs和yaffs2。使用yaffs2目录下的代码,它向前兼容YAFFS1。

移植yaffs分为两个步骤:

(1)将yaffs2代码加入内核。

下载解压后得到yaffs2源码目录为/work/Develop-ment/yaffs2,内核源码目录为/work/linux-2.6.22.6,执行以下命令打补丁:

¥cd/work/Development/yaffs2

¥./patch-ker.shc/work/linux-2.6.22.6

编译内核(2)配置、

Linux2.6.22.6内核使用的是新的ooblayout,因此在内核配置界面选中“YAFFS2filesystemsupport”即可,其他配置项使用默认值。

最后执行“makeuIage”编译内核。3.4编译、烧写、起动内核3.4.1编译内核

直接使用内核根目录下的配置文件config_ok,执行以下命令编译内核。

¥cpcomfig_ok.config¥makeuImage3.4.2烧写内核

将上一步生成的uImage放入tftp服务器,然后在U-Boot中执行以下命令、下载烧写。

tftp0x32000000uImagenanderase00x200000

nandwrite.jffs20x320000000¥(filesize)3.4.3启动内核

使用以下命令启动NANDFlash上的内核。nboot0x3200000000bootm0x320000004结束语

作为开放源代码的操作系统,Linux操作系统以其广泛

目前,基于ARM技术的微处理器应用的使用,发展越来越好。

约占据了32位RISC微处理器75%以上的市场份额。将一个Linux操作系统移植到具体的处理器硬件板s3c2440上相对复杂,涉及到更多的问题需要进一步的考虑。参考文献

[1]韦东山.嵌入式Linux应用开发完全手册[M].北京:人民邮电出版社,2008.

[2]李亚锋,欧文盛.ARM嵌入式Linux系统开发从入门到精通[M].北京:清华大学出版社,2007.

[3]韩国三星S3C2440处理器用户手册[S].Revision1.作者简介

曹王月(1987—),女,江西南昌人,硕士,所学专业:控制理论控制工程。

Linux内核分析及在S3C2440上移植过程

175

本文来源:https://www.bwwdw.com/article/yzfq.html

Top