嵌入式Linux内核移植详解(顶嵌).doc_第1页
嵌入式Linux内核移植详解(顶嵌).doc_第2页
嵌入式Linux内核移植详解(顶嵌).doc_第3页
嵌入式Linux内核移植详解(顶嵌).doc_第4页
嵌入式Linux内核移植详解(顶嵌).doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北京顶嵌开源科技有限公司内核移植阶段内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。直接对硬件操作是非常复杂的,所以内核通常提供一种硬件抽象的方法来完成这些操作。硬件抽象隐藏了复杂性,为应用软件和硬件提供了一套简洁,统一的接口,使程序设计更为简单。内核和用户界面共同为用户提供了操作计算机的方便方式。也就是我们在windows下看到的操作系统了。由于内核的源码提供了非常广泛的硬件支持,通用性很好,所以移植起来就方便了许多,我们需要做的就是针对我们要移植的对象,对内核源码进行相应的配置,如果出现内核源码中不支持的硬件这时就需要我们自己添加相应的驱动程序了。一. 移植准备1. 目标板我们还是选用之前bootloader移植选用的开发板参数请参考上文的地址: /thread-80832-5-1.html。bootloader移植准备。 2. 内核源码这里我们选用比较新的内核源码版本linux-,他的下载地址是/pub/linux/kernel/v2.6/linux-.tar.bz2。3. 烧写工具我们选用网口进行烧写这就需要内核在才裁剪的时候要对网卡进行支持 4. 知识储备要进行内核裁剪不可缺少的是要对内核源码的目录结构有一定的了解这里进行简单介绍。(1)arch/: arch子目录包括了所有和体系结构相关的核心代码。它的每一个子目录都代表一种支持的体系结构,例如i386就是关于intel cpu及与之相兼容体系结构的子目录。PC机一般都基于此目录。(2)block/: 部分块设备驱动程序。(3)crypto: 常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验算法。 (4) documentation/: 文档目录,没有内核代码,只是一套有用的文档。(5) drivers/: 放置系统所有的设备驱动程序;每种驱动程序又各占用一个子目录:如,/block 下为块设备驱动程序,比如ide(ide.c)。(6)fs/: 所有的文件系统代码和各种类型的文件操作代码,它的每一个子目录支持一个文件系统, 例如fat和ext2。(7)include/: include子目录包括编译核心所需要的大部分头文件。与平台无关的头文件在 include/linux子目录下,与 intel cpu相关的头文件在include/asm-i386子目录下,而include/scsi目录则是有关scsi设备的头文件目录。(8) init/: 这个目录包含核心的初始化代码(注:不是系统的引导代码),主要包含两个文件main.c和Version.c,这是研究核心如何工作的好的起点之一。(9)ipc/: 这个目录包含核心的进程间通讯的代码。 (10)kernel/: 主要的核心代码,此目录下的文件实现了大多数linux系统的内核函数,其中最重要的文件当属sched.c。(11)lib/: 放置核心的库代码。(12) mm/:这个目录包括所有独立于 cpu 体系结构的内存管理代码,如页式存储管理内存的分配和释放等(13)net/: 核心与网络相关的代码。 (14)scripts/: 描述文件,脚本,用于对核心的配置。(15)security: 主要是一个SELinux的模块。 (16)sound: 常用音频设备的驱动程序等; (17)usr: 实现了一个cpio。 (18)COPYING: GPL版权申明; (19)CREDITS: 光荣榜;(20) Kbuild: 一个包含了某些通用规则的编译文件; (21)MAINTAINERS: 维护人员列表,对当前版本的内核各部分都有谁负责; (22) Makefile: 第一个Makefile文件。用来组织内核的各模块,记录了个模块间的相互这间的联系和依托关系,编译时使用;仔细阅读各子目录下的Makefile文件对弄清各个文件这间的联系和依托关系很有帮助; (23)ReadMe: 核心及其编译配置方法简单介绍; (24)REPORTING-BUGS:有关报告Bug 的一些内容;一 般在每个目录下都有一个.depend文件和一个Makefile文件。这两个文件都是编译时使用的辅助文件。仔细阅读这两个文件对弄清各个文件之间的联 系和依托关系很有帮助。另外有的目录下还有Readme文件,它是对该目录下文件的一些说明,同样有利于对内核源码的理解。二内核源码修改1.解压内核解压内核源码到计算机的工作环境中,我们下载的内核源码是.bz2格式压缩包使用解压命令:#tar xvfj linux-.tar.bz2 解压到当前目录。2.添加arm支持 进如解压好的内核源码文件夹中,#cd linux-修改“Makefile”文件,在大概193行“ARCH ?=(SUBARCH)”和194行“CROSS_COMPILE ?=”,将其修改为“ARCH ?=arm”和“CROSS_COMPILE ?=arm-linux-”(根据自己的实际情况添加自己的交叉编译工具的路径),然后保存。如下图:3.修改平台时钟修改平台的时钟频率,以满足开发板的工作频率。修改内核源码“arch/arm/mach-s3c2440/mach-s3c2440.c” 文件的162行,把16.9344MHz改为12MHz,因为我们选用的开发板使用的就是12MHz的外部时钟源输入。如下图所示:5. 制作开发板配置文件我们选用的是比较通用配置的开发板,所以用内核中自带的配置文件,进行修改是比较方便的做法。该配置单在内核源码的“arch/arm/configs/”目录下面,名为:“s3c2410_defconfig”,该配置文件里面选择了几乎所有的和S3C24XX系列CPU相关的配置选项,我们完全可以在该配置单的基础上进行配置。首先将该文件考到根目录命名为.config 指令为:# cp arch/arm/configs/s3c2410default_config .config然后返回到配置界面,进入到内核配置单输入指令为:#make menuconfig 出现如图所示的配置界面:选择“System Type”选项,然后配置各个平台如下所示:System Type - S3C2410 Machines - * SMDK2410/A9M2410 IPAQ H1940 Acer N30 Simtec Electronics BAST (EB2410ITX) NexVision OTOM Board AML M5900 Series Thorcom VR1000 QT2410 S3C2412 Machines - SMDK2413 SMDK2412 VMSTMS S3C2440 Machines - Simtec Electronics ANUBIS Simtec IM2440D20 (OSIRIS) module HP iPAQ rx3715 * SMDK2440 NexVision NEXCODER 2440 Light Board* SMDK2440 with S3C2440 CPU module S3C2442 Machines - SMDM2440 with S3C2442 CPU module S3C2443 Machines - SMDK2443配置完毕这个地方后,退回到最初的配置单。然后选择选项:“Save an Alternate Configuration File”,将其保存为:“.config”文件,因为编译系统时会调用该文件。如下面的图所示:保存为“.config”文件后,退出配置单。6. 修改机器码 在我们之前移植的uboot的机器码是168,这里需要修改机器码,否则会出现不能启动的情况。机器码保存在内核源码的“arch/arm/tools/mach-types”文件中,在大概379行,把原来的362改为168保存即可。如下图:7. 修改nandflash分区修改内核源码中的“arch/arm/liat-s3c24xx/common-smdk.c”文件,在109行附近会有名为 smdk_nand_part的结构体将其修改为:static struct mtd_partition smdk_default_nand_part = 0 = .name = Top-E:u-boot, .size = 0x40000, .offset = 0, , 1 = .name = Top-E:kernel, .offset = 0x40000, .size = 0x4c0000, , 2 = .name = Top-E:fs, .offset = 0x500000, .size = 0x3b00000, ;其中name为内核启动时的标注,内容可根据自己需要填写,便于自己他人识别。offset为分区的起始地址,size为分区的大小。如下图所示: 三制作镜像然后输入:#make zImage,就可以进行编译了,编译完毕后,会在内核源码的“arch/arm/boot/”目录下面生成名为“zImage”的镜像,利用mkimage工具把生成的zImage转换成uIamge,(可以直接烧写zImage启动,我比较习惯用uImage)使用命令:#./mkimage A arm O linux T kernel C none a 30008000 e 30008040 n “linux kernel” d arch/arm/boot/zImage uImage参数说明:-A 指定CPU 的体系结构:取值 表示的体系结构alpha Alphaarm A RMx86 Intel x86ia64 IA64mips MIPSmips64 MIPS 64 Bitppc PowerPCs390 IBM S390sh SuperHsparc SPARCsparc64 SPARC 64 Bitm68k MC68000我们选arm-O 指定操作系统类型,可以取以下值:openbsd、netbsd、freebsd、4_4bsd、linux、svr4、esix、solaris、irix、sco、dell、ncr、lynxos、vxworks、psos、qnx、u-boot、rtems、artos我们选linux。-T 指定映象类型,可以取以下值:standalone、kernel、ramdisk、multi、firmware、script、filesystem我们制作的是内核映象,所以选kernel。-C 指定映象压缩方式,可以取以下值:none 不压缩gzip 用gzip 的压缩方式bzip2 用bzip2 的压缩方式我们用的是非压缩方式,所以是none。-a 指定映象在内存中的加载地址,映象下载到内存中时,要按照用mkimage 制作映象时,这个参数所指定的地址值来下载这里指定为30008000,使用时要把内核映象加载到内存的30008000 处。不要使用其他的地址。-e 指定映象运行的入口点地址,这个地址就是-a 参数指定的值加上0x40(因为前面有个mkimage 添加的0x40 个字节的头)uImage 其实就是mkimage 在zImage 前面加了个文件头。-n 指定映象名-d 指定制作映象的源文件四内核镜像的烧写 内核的烧写我们采用tftp方式,用网线将目标板和pc机连接起来,配置好目标板的网络参数,主要是serverip、ipaddr。 首先将uImage下载到内存中:#tftp 30008000 uImage 按照之前内核的nandflash分区进行烧写,将内存中的内核镜像烧到flash中: #nand erase 400

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论