第8篇构建嵌入式Linux系统课件_第1页
第8篇构建嵌入式Linux系统课件_第2页
第8篇构建嵌入式Linux系统课件_第3页
第8篇构建嵌入式Linux系统课件_第4页
第8篇构建嵌入式Linux系统课件_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

第8章构建嵌入式Linux系统第8章构建嵌入式Linux系统1

===makefile开始===

myprog:foo.obar.o

gccfoo.obar.o-omyprog

foo.o:foo.cfoo.hbar.h

gcc-cfoo.c-ofoo.o

bar.o:bar.cbar.h

gcc-cbar.c-obar.o

===makefile结束===

===makefile开始===

my2第8章构建嵌入式Linux系统8.1嵌入式Linux系统的构建流程8.2嵌入式Linux系统的组成8.3Bootloader8.4Linux内核的裁剪和编译8.5根文件系统第8章构建嵌入式Linux系统38.1嵌入式Linux系统的构建流程建立开发环境:交叉编译工具,编译环境等配置开发主机,配置MINICOM建立引导装载程序bootloader下载别人已经移植好的linux操作系统建立根文件系统建立应用程序的flash分区开发应用程序烧写内核、根文件系统、应用程序发布产品8.1嵌入式Linux系统的构建流程建立开发环境:交叉编译4第8章构建嵌入式Linux系统8.1嵌入式Linux系统的构建流程8.2嵌入式Linux系统的组成8.3Bootloader8.4Linux内核的裁剪和编译8.5根文件系统第8章构建嵌入式Linux系统5嵌入式Linux的组成嵌入式Linux由以下三个部分组成为:Bootloader:系统的引导程序参数:内核启动时所必需的设置参数内核:系统内核是系统的核心部分,主要负责进程调度,消息处理等。根文件系统:Linux内核启动后首先需要加载的文件系统。嵌入式Linux的组成嵌入式Linux由以下三个部分组成为:6第8章构建嵌入式Linux系统8.1嵌入式Linux系统的构建流程8.2嵌入式Linux系统的组成8.3Bootloader8.4Linux内核的裁剪和编译8.5根文件系统第8章构建嵌入式Linux系统7Bootloader程序原理引导加载程序是系统加电后运行的第一段软件代码。PC机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的OSBootLoader(比如,LILO和GRUB等)一起组成。BIOS在完成硬件检测和资源分配后,将硬盘MBR中的BootLoader读到系统的RAM中,然后将控制权交给OSBootLoader。BootLoader的主要运行任务就是将内核映象从硬盘上读到RAM中,然后跳转到内核的入口点去运行,也即开始启动操作系统。而在嵌入式系统中,通常并没有像BIOS那样的固件程序,主要使用flash作为系统的存储媒介,很少使用磁盘,整个系统的加载启动任务完全由BootLoader来完成。Bootloader程序原理引导加载程序是系统加电后运行的第8Bootloader的概念简单地说,BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式应用。因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。Bootloader的概念简单地说,BootLoader就是9Bootloader的功能硬件设备的初始化(CPU的主频、SDRM、中断、串口等)传递内核启动参数启动内核与主机进行交互、从串口、USB口或者下载映像文件、并可以对FLASH等存储设备进行管理Bootloader的功能硬件设备的初始化(CPU的主频、S10Bootloader的安装媒介系统加电或复位后,处理器从某个预先安排的地址上取指令。比如ARM在复位时,从地址0x00取指。嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EPROM或FLASH等),被映射到这个预先安排的地址上,因此在系统加电后,处理器首先执行Bootloader程序。Bootloader是最先被系统执行的程序Bootloader的安装媒介系统加电或复位后,处理器从某个11第8篇构建嵌入式Linux系统课件12第8篇构建嵌入式Linux系统课件13嵌入式系统的软件层次结构嵌入式系统的软件层次结构14Bootloader的烧写方式通过JTAG口通过以太网口通过串口Bootloader的烧写方式通过JTAG口15Bootloader的控制方式主机和目标机之间一般通过串口建立连接,Bootloader软件在执行是通常会通过串口来进行通讯,比如:输出打印信息到串口,从串口读取用户控制字符也可以通过JTAG等其他接口进行通信Bootloader的控制方式主机和目标机之间一般通过串口建16Bootloader的工作方式大多数BootLoader都包含两种不同的操作模式。“启动加载”模式“下载”模式,这种区别仅对于开发人员才有意义。但从最终用户的角度看,BootLoader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。Bootloader的工作方式大多数BootLoader都包17bootloader的引导方式启动加载(BootLoader)模式:启动加载模式也称为“自主”(Autonomous)模式。在这种情况下,BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。下载(Downloading)模式:在下载模式中,目标机上的BootLoader将通过串口连接或网络连接等通信手段从主机(Host)下载文件。比如:下载应用程序、数据文件、内核映像等.从主机下载的文件通常首先被BootLoader保存到目标机的RAM中然后再被BootLoader写到目标机上的固态存储设备中。bootloader的引导方式启动加载(BootLoade18嵌入式系统的引导模式根据所使用的存储介质和开发阶段的不同,可以采用不同的系统引导方式

(1)使用可以固化存储设备:产品化阶段(2)使用磁盘设备(3)通过网络引导:调试阶段内核已下载到FLASH设备或磁盘设备上,通过网络挂装根文件系统。内核和根文件系统均通过网络来获取和安装。嵌入式系统的引导模式根据所使用的存储介质和开发阶段的不同,可19Bootloader的典型结构框架由于BootLoader的实现依赖于CPU的体系结构,因此大多数BootLoader都分为stage1和stage2两大部分。Stage1:依赖于CPU体系结构的代码,比如设备初始化代码等,通常都放在stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的。stage2则通常用C语言来实现,这样可以实现给复杂的功能,而且代码会具有更好的可读性和

可移植性。Bootloader的典型结构框架由于BootLoade20BootLoader的stage1BootLoader的stage1通常包括以下步骤(以执行的先后顺序):•硬件设备初始化。•为加载BootLoader的stage2准备RAM空间。•拷贝BootLoader的stage2到RAM空间中。•设置好堆栈。•跳转到stage2的C入口点。BootLoader的stage1BootLoad21第8篇构建嵌入式Linux系统课件22BootLoader的stage2BootLoader的stage2通常包括以下步骤(以执行的先后顺序):

•初始化本阶段要使用到的硬件设备。

•检测系统内存映射(memorymap)。

•将kernel映像和根文件系统映像从flash上读到RAM空间中。

•为内核设置启动参数。

•调用内核。BootLoader的stage2BootLoad23嵌入式Linux的构建Bootloader的移植嵌入式Linux的构建Bootloader的移植24几种流行的LunuxBootloaderU-Boot:较为通用BLOBRedBootVIVI:针对ARM2410设计几种流行的LunuxBootloaderU-Boot:较为25第8章构建嵌入式Linux系统8.1嵌入式Linux系统的构建流程8.2嵌入式Linux系统的组成8.3Bootloader8.4Linux内核的裁剪和编译8.5根文件系统第8章构建嵌入式Linux系统26嵌入式Linux的构建Linux内核配置和编译的流程Linux内核配置Linux内核的编译嵌入式Linux的构建Linux内核配置和编译的流程27嵌入式Linux的构建在嵌入式Linux的构建中,Bootloader和Linux内核一般都有相对成熟的代码。主要的工作有两步:第一步是根据本系统硬件平台的状况进行移植;第二步是采取交叉编译对源代码进行编译,形成运行时需要的映象(Image)文件。第三步是构造根文件系统嵌入式Linux的构建在嵌入式Lin28Linux内核的移植

Linux内核的移植Linux内核的移植Linux内核的移植29构造根文件系统

Linux内核的启动并不依赖于根文件系统(rootfs),但是要保证Linux内核的正常运作,还是需要根文件系统的支持。在构建系统的过程中需要为系统生成根文件系统的映像文件,让Linux内核在启动的时候挂接(mount)根文件系统。构造根文件系统Linux内核的启动并不依赖于30Linux终端:命令输入与信息显示Linux终端:命令输入与信息显示31Linux内核配置和编译的流程

Linux内核从配置到安装大致有如下步骤:

配置内核:最常见的命令为makemenuconfig建立依赖关系:最常见的命令为makedep编译内核:最常见的命令为make或makezImage编译内核模块:最常见的命令为makemodules安装内核模块:最常见的命令为makemodules_install安装内核:最常见的命令为makeinstallLinux内核配置和编译的流程Linux内核从32Linux内核配置和编译的流程在内核源代码目录下输入“makeXXXconfig”等命令之一就可以对内核进行配置:makeconfig提供了一个命令行界面,然后对每一个内核选项依次询问用户的选择。makemenuconfig提供了一个基于终端curses的图形界面配置菜单。makexconfig提供了一个基于GTK的XWindow图形界面配置菜单。makeoldconfig和makeconfig类似,不过它只提示用户设置之前没有配置过的选项。Linux内核配置和编译的流程在内核源代码目录33Linux内核配置和编译的流程在内核源代码目录下输入“makeXXXconfig”等命令之一就可以对内核进行配置:makeconfig提供了一个命令行界面,然后对每一个内核选项依次询问用户的选择。makemenuconfig提供了一个基于终端curses的图形界面配置菜单。makexconfig提供了一个基于GTK的XWindow图形界面配置菜单。makeoldconfig和makeconfig类似,不过它只提示用户设置之前没有配置过的选项。Linux内核配置和编译的流程在内核源代码目录34makeconfigmakeconfig35makemenuconfigmakemenuconfig36makexconfigmakexconfig37Linux内核配置

内核都会在配置完后生成一个.config文件,还会产生大量的符号连接和头文件,这些在其余的创建过程中会用到。.config文件中保存了根据在menuconfig中的选择定义的相应变量,在Linux内核目录下的Makefile文件中将会包含这个文件。重要的内核选项包括:Codematurityleveloptions(内核成熟级别选项)Loadablemodulesupport(可加载模块支持)Generalsetup(通用设置)Memorytechnologydevices(内存技术设备)Blockdevices(块设备)Networkdevicesupport(网络设备支持)Characterdevices(字符设备)Filesystems(文件系统)Consoledrivers(控制台驱动)Linux内核配置内核都会在配置完后生成一个.co38Linux内核的编译建立内核依赖关系(linux-2.6.x不再需要这个步骤):#makedep编译内核:#makezImage或者#make单独地编译内核模块:#makemodules如果编译成功,所生成的内核映像文件将放置在arch/${ARCH}/boot目录下,对于ARM架构来说就是arch/arm/boot目录。#makeARCH=armCROSS_COMPILE=arm-linux-menuconfigARCH=arm表示目标体系架构是ARMCROSS_COMPILE=arm-linux-表示使用arm-linux-gcc来进行编译Linux内核的编译建立内核依赖关系(linux-2.6.x39第8章构建嵌入式Linux系统8.1嵌入式Linux系统的构建流程8.2嵌入式Linux系统的组成8.3Bootloader8.4Linux内核的裁剪和编译8.5根文件系统第8章构建嵌入式Linux系统408.4根文件系统Linux下的文件系统嵌入式Linux的文件系统介绍Linux的根文件系统8.4根文件系统Linux下的文件系统41文件系统的概念文件系统是文件存放在磁盘等存储设备上的组织方法。主要体现在对文件和目录的组织上。目录提供了管理文件的一个方便而有效的途径。我们能够从一个目录切换到另一个目录,而且可以设置目录和文件的权限,设置文件的共享程度。文件系统的概念文件系统是文件存放在磁盘等存储设备上的组织方法42Linux下的文件系统在UNIX系统中,文件系统是最基本的资源。最初的UNIX文件系统与系统内核紧密关联在一起,这对于升级或者更换文件系统十分不利。分离系统内核和文件系统可以解决这一问题。在系统内核和文件系统之间制定一个标准的接口而实现的,不同文件结构之间可以通过该接口方便地交换数据。Linux正是使用这种方式,在系统内核和文件系统之间提供了一种标准接口——VFS(virtualfilesystem,虚拟文件系统)。

Linux下的文件系统在UNIX系统中,文件43Linux支持多种文件系统,包括jffs2,yaffs,cramfs,romfs,ramdisk,ramfs/tmpfs等等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(VirtualFileSystem),为各类文件系统提供一个统一的操作界面和应用编程接口。Linux支持多种文件系统,包括jffs2,yaffs,44Linux的根文件系统Linux的根文件系统的主要目录:/bin:包含基本的用户命令工具程序/sbin:包含基本的系统管理程序/boot:包含内核映像及启动相关文件/etc:(excutivetimeconfig)包含系统配置文件和脚本/lib:包含系统库和内核模块/usr:用户程序及库目录/home:用户主目录/root:root用户主目录/dev:设备文件目录,目录下的每个文件代表一个设备/opt:额外软件包所在目录/mnt:文件系统临时挂装目录/var:包含运行时改变的文件,例如lock和log文件/proc:内核创建和使用的虚拟文件系统,存放运行时系统信息/tmp:临时文件目录Linux的根文件系统Linux的根文件系统的451.1文件系统的树状结构1.1文件系统的树状结构46文件系统的特性可写入可更新:系统重启后保持原先的更改。掉电可靠性:掉电后可以可靠恢复数据。可压缩:文件系统的内容可以被压缩,存储时压缩,使用时再解压缩。RAM启动:使用RAM存放整个文件系统,将该区域作为根文件系统,然后加载到内核中,是基于RAM的文件系统。文件系统的特性可写入47第8篇构建嵌入式Linux系统课件48第8篇构建嵌入式Linux系统课件49网络文件系统N

温馨提示

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

评论

0/150

提交评论