ImageVerifierCode 换一换
格式:PPT , 页数:54 ,大小:656.50KB ,
文档编号:2823526      下载积分:28 文币
快捷下载
登录下载
邮箱/手机:
温馨提示:
系统将以此处填写的邮箱或者手机号生成账号和密码,方便再次下载。 如填写123,账号和密码都是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

优惠套餐
 

温馨提示:若手机下载失败,请复制以下地址【https://www.163wenku.com/d-2823526.html】到电脑浏览器->登陆(账号密码均为手机号或邮箱;不要扫码登陆)->重新下载(不再收费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  
下载须知

1: 试题类文档的标题没说有答案,则无答案;主观题也可能无答案。PPT的音视频可能无法播放。 请谨慎下单,一旦售出,概不退换。
2: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
3: 本文为用户(三亚风情)主动上传,所有收益归该用户。163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

1,本文(江苏科技大学通信专业嵌入式课件第8章.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!

江苏科技大学通信专业嵌入式课件第8章.ppt

1、嵌入式嵌入式Linux基础基础教程教程重点内容:重点内容:l内核源码组织内核源码组织l内核的定制内核的定制lMakefileMakefilel定制网卡驱动定制网卡驱动l内核裁剪内核裁剪嵌入式嵌入式Linux基础基础教程教程 Linux用来支持各种体系结构的源代码包含大约4500个C语言程序,存放在270个左右的子目录下,总共大约包含200万行代码,大概占用58MB磁盘空间。其文件结构图如图所示:嵌入式嵌入式Linux基础基础教程教程 这里有的目录是包含多个部分的内容。具体各个目录的内容组成如下:arch:arch目录包括了所有和体系结构相关的核心代码。它下面的每一个子目录都代表一种Linux

2、支持的体系结构,例如i386 就是Intel CPU 及与之相兼容体系结构的子目录;include:include 目录包括编译核心所需要的大部分头文件,例如与平台无关的头文件在include/linux 子目录下;嵌入式嵌入式Linux基础基础教程教程init:init 目录包含核心的初始化代码(不是系统的引导代码),有main.c 和Version.c 两个文件;mm:mm 目录包含了所有的内存管理代码。与具体硬件体系结构相关的内存管理代码位于arch/*/mm 目录下;drivers:drivers 目录中是系统中所有的设备驱动程序。它又进一步划分成几类设备驱动,每一种有对应的子目录,如

3、声卡的驱动对应于drivers/sound;ipc:ipc 目录包含了核心进程间的通信代码;嵌入式嵌入式Linux基础基础教程教程modules:modules 目录存放了已建好的、可动态加载的模块;fs:fs 目录存放Linux 支持的文件系统代码。不同的文件系统有不同的子目录对应,如ext3 文件系统对应的就是ext3 子目录;Kernel:Kernel 内核管理的核心代码放在这里。同时与处理器结构相关代码都放在arch/*/kernel 目录下;net:net 目录里是核心的网络部分代码,其每个子目录对应于网络的一个方面;嵌入式嵌入式Linux基础基础教程教程lib:lib 目录包含了核

4、心的库代码,不过与处理器结构相关的库代码被放在arch/*/lib/目录下;scripts:scripts 目录包含用于配置核心的脚本文件;documentation:documentation 目录下是一些文档,是对每个目录作用的具体说明。一般在每个目录下都有一个depend文件和一个Makefile文件。这两个文件都是编译时使用的辅助文件。嵌入式嵌入式Linux基础基础教程教程1.内核配置系统2. Makefile3.具体配置操作4.添加自己代码嵌入式嵌入式Linux基础基础教程教程 ARM-Linux内核的配置系统由三个部分组成:Makefile、配置文件和配置工具,它们之间的关系如图所

5、示:后缀名为.in的文件为提供选项的文件,通过配置工具配置之后生成配置文件,最后按照选项来调用源码编译成待烧录到目标板的镜像文件zImage。整个过程都是由Makefile文件来调用管理的。嵌入式嵌入式Linux基础基础教程教程1、Makefile Makefile是Linux系统中非常重要的一个组成部分,这我们前面也有所介绍。因为在几乎每一个子目录下都会有Makefile文件。其中位于根目录下的Makefile文件是总纲式Makefile文件,其它任何Makefile文件都是直接或间接被它调用。Makefile文件定义了各个目录下文件如何被编译,并最终形成zImage文件。当然zImage文

6、件的产生还要借助.config文件,它会告诉Makefile文件哪些文件被编译进内核,哪些源文件没有被用户选中,并不需要被编译进内核文件中。嵌入式嵌入式Linux基础基础教程教程2、配置文件 在ARM-Linux系统中,配置文件存放在各个子目录下,它们的名字通常被称为config.in或Config.in文件,其中后缀名为in的表示的是提供选项,而后缀名为config的则是表示是表示进行选择了某些选项之后的配置文件。存放在arch/arm目录下的config.in文件为总纲领式配置文件,其它config.in文件都是直接或间接被该文件调用。这些配置文件按照一定的格式编写,用户通过特定的工具可以

7、读这些配置文件来进行ARM-Linux系统的配置,最终配置的选项结果存放在内核根目录.config文件中。嵌入式嵌入式Linux基础基础教程教程3、配置工具 配置工具一般包括配置命令解释器和配置用户界面。前者主要作用是对配置脚本中使用的配置命令进行解释;而后者则是提供基于字符界面、基于 Ncurses 图形界面以及基于 Xwindows 图形界面的用户配置界面,各自对应于Make config、Make menuconfig 和make xconfig。 这些配置工具都是使用脚本语言,如Tcl/Tk、Perl 编写的(也包含一些用C编写的代码)。嵌入式嵌入式Linux基础基础教程教程 Make

8、file是分布在Linux内核源码的各个层次目录中,定义Linux内核的编译规则。其主要作用是根据配置的情况,构造出需要编译的源文件列表,然后分别编译,并把目标代码链接到一起,最终形成Linux内核二进制文件。1、Makefile概述 由于Linux内核源代码是按照树形结构组织的,所以Makefile也被分布在目录树中。Linux内核中的Makefile以及与Makefile直接相关的文件有:嵌入式嵌入式Linux基础基础教程教程Makefile:顶层Makefile,是整个内核配置、编译的总体控制文件;.config:内核配置文件,包含由用户选择的配置选项,用来存放内核配置后的结果;arch

9、/*/Makefile:位于各种CPU体系目录下的 Makefile,其中“*”表示不同的平台,如 arch/arm/Makefile,是针对arm平台的Makefile;各个子目录下的Makefile:比如drivers/Makefile,负责所在子目录下源代码的管理与编译;Rules.make:规则文件,被所有的Makefile使用。嵌入式嵌入式Linux基础基础教程教程2、Makefile 中的变量 顶层Makefile定义并向环境中输出了许多变量,为各个子目录下的Makefile传递一些信息。有些变量,比如SUBDIRS,不仅在顶层 Makefile 中定义并且赋初值,而且在 arch

10、/*/Makefile 还作了扩充。常用的变量有以下几类:版本信息版本信息有:VERSION,PATCHLEVEL, SUBLEVEL, EXTRAVERSION,KERNELRELEASE。嵌入式嵌入式Linux基础基础教程教程CPU体系结构:ARCH。路径信息:TOPDIR, SUBDIRS内核组成信息:HEAD, CORE_FILES, NETWORKS, DRIVERS, LIBS编译信息:CPP, CC, AS, LD, AR,CFLAGS,LINKFLAGS配置变量CONFIG_*嵌入式嵌入式Linux基础基础教程教程3、Rules.make 变量 Rules.make 是编译规则

11、文件,所有的Makefile中都会包括Rules.make。Rules.make 文件定义了许多变量,最为重要是那些编译、链接列表变量,包括以下这些变量:O_OBJS,L_OBJS,OX_OBJS,LX_OBJS:本目录下需要编译进Linux内核vmlinux的目标文件列表,其中OX_OBJS和LX_OBJS中的“X”表明目标文件使用了 EXPORT_SYMBOL输出符号;嵌入式嵌入式Linux基础基础教程教程M_OBJS,MX_OBJS:本目录下需要被编译成可装载模块的目标文件列表。同样,MX_OBJS 中的“X”表明目标文件使用了 EXPORT_SYMBOL输出符号;O_TARGET,L_

12、TARGET:每个子目录下都有一个O_TARGET或L_TARGET,Rules.make首先从源代码编译生成O_OBJS和OX_OBJS中所有的目标文件,然后使用$(LD) -r 把它们链接成一个O_TARGET 或 L_TARGET。O_TARGET 以 .o 结尾,而L_TARGET 以 .a 结尾。嵌入式嵌入式Linux基础基础教程教程4、子目录下的Makefile 子目录Makefile用来控制本级目录以下源代码的编译规则。嵌入式嵌入式Linux基础基础教程教程 内核源码的配置文件有自己的格式,这些文件中定义了makefile的使用命令。1、配置命令在Linux内核中,配置命令有多种

13、方式,如表所示:嵌入式嵌入式Linux基础基础教程教程2、配置语言 配置语言在这里面使用很简单明了,主要包括:顶层菜单询问语句 定义语句 依赖语句 选择语句if语句Source 语句菜单块(menu block)语句 嵌入式嵌入式Linux基础基础教程教程3、缺省配置 Linux 内核支持非常多的硬件平台,对于具体的硬件平台而言,有些配置就是必需的,有些配置就不是必需的。另外,新增加功能的正常运行往往也需要一定的先决条件,针对新功能,必须作相应的配置。因此,特定硬件平台能够正常运行对应着一个最小的基本配置,这就是缺省配置。嵌入式嵌入式Linux基础基础教程教程 Linux内核中针对每个ARCH

14、都会有一个缺省配置。在向内核代码增加了新的功能后,如果新功能对于这个ARCH是必需的,就要修改此 ARCH 的缺省配置。嵌入式嵌入式Linux基础基础教程教程4、帮助文件 在配置Linux内核时,遇到不懂含义的配置选项,可以查看它的帮助,从中可得到选择的建议。所有配置选项的帮助信息都在 Documentation/Configure.help 中,它的格式为:嵌入式嵌入式Linux基础基础教程教程 给出本配置选项的名称, 对应配置变量, 对应配置帮助信息。在帮助信息中,首先简单描述此功能,其次说明选择了此功能后会有什么效果,不选择又有什么效果。嵌入式嵌入式Linux基础基础教程教程 对于一个开

15、发者来说,将自己开发的内核代码加入到 Linux 内核中,需要有三个步骤:1)首先确定把自己开发代码放入到内核的位置;2)其次,把自己开发的功能增加到 Linux 内核的配置选项中,使用户能够选择此功能;3)最后,构建子目录 Makefile,根据用户的选择,将相应的代码编译到最终生成的 Linux 内核中去。嵌入式嵌入式Linux基础基础教程教程1.源码获取2.移植过程嵌入式嵌入式Linux基础基础教程教程1.源码获取 源码的获取有很多途径,我们可以从ftp:/ftp.kernel.org/pub/linux/kernel/v2.6/获取,这是Linux内核的官方网站,定期发布最新的内核,以

16、修补Linux内核在使用中的各种bug,可以根据自己的需要下载适合自己的版本。嵌入式嵌入式Linux基础基础教程教程2.移植过程 Linux内核的移植过程比较繁琐,具体步骤:1、解压内核文件 解压文件可以点击右键,选择“extract here”命令;也可以在终端中,输入如下命令:tar xfv linux-2.6.29.tar.bz2 然后进入内核目录,输入如下命令:cd linux-2.6.29嵌入式嵌入式Linux基础基础教程教程2、修改机器码 内核的机器码必须跟Bootloader中一致,不管是u-boot还是vivi,在smdk2440 使用的uboot的机器码是168,这里需要修改

17、机器码,否则会出现不能启动的情况。机器码保存在内核源码的“arch/arm/tools/mach-types”文件中,大概在379 行,把原来的 数字“362” 改为 “168”。也可以修改uboot中的机器码,在“includeasm-armmach-types.h”文件中,找到“#define MACH_TYPE_S3C2440 168”,将其中的数字“168”改成与linux内核一致的机器码,注意,这个机器码要没有使用的,否则会编译中提示冲突。然后保存即可。嵌入式嵌入式Linux基础基础教程教程3、修改内核源码根目录下的Makefile文件 内核的编译是根据Makefile文件中的内容进

18、行的,所以首先需要修改根目录下的Makefile文件。更改目标代码的类型,并未编译内核指定一个编译器。修改后详细内容显示如下:#ARCH ?= arm #CROSS_COMPILE ?=arm-linux- ARCH是指架构,这里我们选择arm架构,所以修改成:“#ARCH ?=arm”;CROSS_COMPILE是指编译器,由于要在开发板上运行,需要使用交叉编译器,所以改为:“#CROSS_COMPILE ?=arm-linnux-”。嵌入式嵌入式Linux基础基础教程教程4、修改“arch/arm/plat-s3c24xx/common-smdk.c”文件,修改Nand Flash的分区信

19、息和Nand Flash的硬件信息。 这个文件的修改有两处,具体为:smdk_default_nand_part, smdk_nand_info 嵌入式嵌入式Linux基础基础教程教程5、修改时钟频率 修改平台的时钟频率,以满足smdk2440工作频率。修改内核源码,否则在超级终端中会出现乱码。6、增加Yaffs2文件系统的支持 解压Yaffs2并以打补丁的方式将其加入Linux内核。最新的yaffs2源代码包可以从http:/www.aleph1.co.uk/cgi-bin/viewcvs.cgi/yaffs.tar.gz?view=tar获得。具体操作命令如下:#cd yaffs2 #./

20、patch-ker.sh c /(linux内核路径)嵌入式嵌入式Linux基础基础教程教程7、配置内核 先拷贝s3c2440开发板的默认配置到内核根目录下,以简化配置过程 ,使用如下命令:# cp arch/arm/configs/s3c2440_defconfig.config# make menuconfig 嵌入式嵌入式Linux基础基础教程教程下面是Linxu内核的几个主要配置选项:(1)General setup常规选项设置(2)System Type:系统类型(3)Boot options:引导选项(4)Enable loadable module support:对模块的支持(

21、5)Device Drivers:设备驱动(6)File systems:文件系统嵌入式嵌入式Linux基础基础教程教程8、编译 配置好编译选项之后就可以编译内核了,输入以下命令:make zImage 系统就开始编译内核了。一般内核编译需要一定的时间,十几分钟到几十分钟不等,具体视个人机器而定。编译结束之后,会在“/arch/arm/boot/”目录下面和者根目录下面生成一个名为“zImage”的内核镜像文件。同时在根目录中生成另外三个文件,如图所示:嵌入式嵌入式Linux基础基础教程教程嵌入式嵌入式Linux基础基础教程教程 vmlinux、System.map和initrd-x.x.x.

22、img三种文件时Linux内核编译之后可以生成的三种镜像文件格式。这是这三个镜像文件之间略有不同,下面详细比较说明各种格式的文件特性:1、vmlinuxvmlinux是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。嵌入式嵌入式Linux基础基础教程教程2、System.mapSystem.map是一个特定内核的内核符号表。它是当前运行的内核的System.map的链接。它是由“nm vmlinux”产生的,并且将不相关的符号滤除掉。3、in

23、itrd-x.x.x.imginitrd是“initial ramdisk”的简写。initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。例如ubuntu的initrd.img主要是用于加载ext3等文件系统及scsi设备的驱动。嵌入式嵌入式Linux基础基础教程教程1.驱动源码获取2.修改驱动源码3.配置并编译嵌入式嵌入式Linux基础基础教程教程 在内核里面网卡驱动是相当完善的,这里需要注意一件事情,从 2.6.25 开始的内核的 “drivers/net/dm9000.c”这个文件对应的 DM9000 的驱动(版本为 1.3 版)并不适合 DM9000E

24、这颗芯片,而在笔者使用的目标板上面用的是DM9000E这颗芯片,所以我们需要更换“dm9000.c”这个驱动程序,只要找到1.2版的DM9000的驱动就可以支持 DM9000E 这颗芯片了。嵌入式嵌入式Linux基础基础教程教程 我们可以从ftp:/ftp.kernel.org/pub/linux/kernel/v2.6/下载一个linux-2.6.24.tar.bz2的源码包,然后解压,提取 “drivers/net/dm9000.c”这个文件,这个驱动文件是1.2版本的,用它去替换掉2.6.29.3里面的对应源码即可开始进行我们的移植操作。嵌入式嵌入式Linux基础基础教程教程 我们只需要

25、进行简单的修改就可以成功的驱动上开发板上面的 DM9000 的网卡芯片。找到内核源码中的“arch/arm/plat-s3c24xx/common-smdk.c”文件,然后主要对它进行修改:添加对dm9000网卡的支持(46行)在 151 行左右,添加部分代码(见教材)在 199 行左右,添加部分代码(见教材)在 73 行添加部分代码(见教材)在 414 行添加部分代码(见教材)嵌入式嵌入式Linux基础基础教程教程在 428 行添加部分代码(见教材)在 628行添加部分代码(见教材)另外,这样编译之后网卡已经能够驱动,在linux中能正常使用,但是,如果使用nfs却不能正常下载文件系统,此时

26、我们还必须修改dm9000.c这个文件。嵌入式嵌入式Linux基础基础教程教程 修改完以上的内容之后,输入一下命令进行内核的重新编译:# make menuconfig 编译完成之后,进入配置单,然后添加上对 DM9000 网卡的配置,具体命令如下 :嵌入式嵌入式Linux基础基础教程教程Device Drivers -Network device support -Ethernet (10 or 100Mbit) -*- Generic Media Independent Interface device support DM9000 support(4) DM9000 maximum de

27、bug level 配置好后,保存配置单,然后重新编译出镜像,再将镜像烧写到开发板中。嵌入式嵌入式Linux基础基础教程教程1.取消虚拟内存的支持2.取消多余的调度器3.取消对旧版本二进制执行文件的支持4.取消不必要的设备的支持5.取消不需要的文件系统的支持嵌入式嵌入式Linux基础基础教程教程 虚拟内存一般并不需要,可以删除。进入“General setup”菜单项,将“Support for paging of anonymous memory(swap)”项去选即可。具体命令显示如下:General setup - Support for paging of anonymous memo

28、ry (swap)嵌入式嵌入式Linux基础基础教程教程 一般我们使用的调度器是默认的IO调度器,所以可以删除其他的调度器。进入“Enable the block layer”菜单项,再进入子菜单项“IO Schedulers”,将“Anticipatory I/O schdeuler”、“Deadline I/O scheduler”和“CFQ I/O scheduler”三项去选即可。具体命令显示如下:嵌入式嵌入式Linux基础基础教程教程-*- Enable the block layer -IO Schedulers - Anticipatory I/O scheduler Deadl

29、ine I/O scheduler CFQ I/O schedulerDefault I/O scheduler (Deadline) -嵌入式嵌入式Linux基础基础教程教程 对旧版本二进制执行文件的支持这项功能一般也是多余的,可以删除。进入“Userspace binary formats”菜单项,将“Kernel support for a.out and ECOFF binaries”项去选即可。具体命令显示如下:Userspace binary formats - Kernel support for a.out and ECOFF binaries嵌入式嵌入式Linux基础基础教程

30、教程 一般对不需要的设备支持驱动也删除,这里比较多,具体的命令显示请参见教材。嵌入式嵌入式Linux基础基础教程教程 对多余的文件系统,我们也会将其删除以减小内核的大小。有关Linux文件系统的概念,我们将会再下一章进行具体介绍。具体命令为:File systems - Second extended fs support Ext3 journalling file system support Ext4dev/ext4 extended fs support development (EXPERIMENTAL)嵌入式嵌入式Linux基础基础教程教程Miscellaneous filesystems - Journalling Flash File System v2 (JFFS2) support完成以上的优化配置有,内核镜像会由之前的 1.9MB 缩减到 1.7MB 左右。嵌入式嵌入式Linux基础基础教程教程

侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|