嵌入式Linux开发培训入门讲义_第1页
嵌入式Linux开发培训入门讲义_第2页
嵌入式Linux开发培训入门讲义_第3页
嵌入式Linux开发培训入门讲义_第4页
嵌入式Linux开发培训入门讲义_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

Thesuccess'sroad嵌入式Linux开发

今天内容嵌入式Linux系统简介构造嵌入式Linux系统搭建开发平台编译Linux内核下载根文件系统Gdb和gdbserver第1部分嵌入式Linux系统简介嵌入式Linux系统简介嵌入式系统开发曾经进入32位时代,在当前的数字信息技术和网络技术高速开展的后PCPost-PC时代,嵌入式系统曾经广泛的浸透到科学研讨、工程设计、军事技术、各类产业和商业文化艺术、文娱业以及人们的日常生活等方方面面中。随着国内外嵌入式产品的进一步开发和推行,嵌入式技术越来越和人们的生活严密结合。什么是嵌入式系统?无处不在,融入生活嵌入式系统定义嵌入式系统是以运用为中心,以计算机技术为根底,并且软硬件可裁剪,适用于运用系统对功能、可靠性、本钱、体积、功耗有严厉要求的公用计算机系统。MP3、PDA、手机;DVD机、机顶盒;车载GPS系统、探测火星的机器人。嵌入式系统与PC机处置器存储器输入输出软件〔操作系统/驱动程序/运用程序〕嵌入式产品内部机构嵌入式系统与PC设备名称嵌入式系统PC机CPU嵌入式处理器(ARM,MIPS等)CPU(Intel的Pentium、AMD的Athlon等)内存SDRAM芯片SDRAM,DDR内存条存储设备Flash芯片硬盘输入设备按键、触摸屏鼠标、键盘输出设备LCD显示器声音设备音频芯片声卡接口MAX232等芯片主板集成其他设备USB芯片、网卡芯片主板集成或外接卡嵌入式系统与PC〔CONT〕嵌入式系统PC机引导代码Bootloader引导,针对不同电路板进行移植主板的BIOS引导,无须改动操作系统WinCE、VxWorks、Linux等,需要移植Windows、Linux等,不需要移植驱动程序每个设备驱动都必须针对电路板进行重新开发或移植,一般不能直接下载使用操作系统含有大多数驱动程序,或从网上下载直接使用协议栈需要移植操作系统包括,或第三方提供开发环境借助服务器进行交叉编译在本机就可开发调试仿真器需要不需要嵌入式系统的特点1〕嵌入式系统低功耗、体积小,公用性强。嵌入式系统与PC机的最大不同就是嵌入式CPU大多任务在为特定用户群设计的系统中,可以把PC机中许多由板卡完成的义务集成在芯片内部,从而有利于嵌入式系统设计趋于小型化。2〕为了提高执行速度和系统可靠性,嵌入式系统中的软件普通都固化在存储器芯片或单片机本身中,而不是存贮于磁盘等载体中。3〕嵌入式系统的硬件和软件都必需高效率地设计,系统要精简。操作系统普通和运用软件集成在一同。4〕对软件代码质量要求很高。应该尽最大能够防止死机的情况发生。5〕嵌入式系统开发需求专门的开发工具和开发环境。典型的嵌入式操作系统LinuxuC/OSWindowsCEVxWorksPalmOSQNXSymbianHowToChoice第2部分构造嵌入式Linux系统开发环境Host与TargetLinux效力器〔Host〕客户机1客户机2客户机3客户机4交换机开发板〔Target〕串口是一个基于x86架构的计算机〔Pentium4处置器、Athlon处置器等〕,即i386平台。Target是目的平台,比如ARM、MIPS、SuperH、PowerPC等。交叉编译环境随着硬件平台和操作系统的多样化,软件向不同平台移植的任务变得越来越繁复。交叉编译技术的引入为软件的不同平台移植发明了便利条件。在交叉编译技术中有两种比较典型的实现:Java方式,即Java的字节码编译技术;GNUGCC方式,即通常所讲的CrossGCC技术。Java方式GNUGCC方式计算机源程序〔c,java…〕文本编辑器计算机系统目的平台,目的代码计算机系统GCC交叉编译器Linux下的GCC交叉编译器

GNUBinutilsGNUBinutils的主要工具有两个,一个是衔接程序ld,另外一个是汇编程序as。其主要目的是为GNU系统,提供汇编和衔接工具。GNUGCCGNUGCC就是上面提到的GCC,GCC主要是为GNU系统提供C编译器。如今支持多种言语,这其中包括C/C++、Fortran、Java、Objective-C、甚至还有Ada。GNUGLibc用于定义系统调用和其它一些根本的函数调用。交叉编译的过程GCC交叉编译器生成

第一步,获得Binutils、GCC、Glibc的源码。第二步,配置并编译Binutils获得我们所需求的汇编和衔接程序。第三步,配置并编译GCC源码生成GCC编译器。普通是C编译器首先生成,然后以这个为根底在结合下一步要生成的Glibc的C函数库,再编译生成其它编译器。第四步,配置Glibc并编译生成Glibc的C函数库。第五步,再次配置和编译GCC源码,生成其它言语的编译器,如C++编译器等。代码构造设置环境变量ExportPROJECT=S3C2410TKExportPRJROOT=~/$PROJECTExportTARGET=arm-linuxExportPREFIX=$PROJECT/toolsExportTARGET_PREFIX=$PREFIX/$TARGETExportPATH=$PREFIX/bin:$PATHTARGET常用的值实际平台TARGET的值PowerPCpowerpc-linuxARMarm-linuxMIPS(bigendian)mips-linuxMIPS(littleendian)mipsel-linuxSuperH4sh4-linux交叉编译流程第1步安装内核头文件〔1〕$cdinclude/asm-arm/ $rmarchproc $ln-sarch-s3c2410arch $ln-sproc-armvprocproc-armoisfor26-bitsARMproc-armvisfor32-bitsARM安装内核头文件〔2〕配置内核makeARCH=armCROSS_COMPILE=arm-linux-menuconfigARCH 目的平台CROSS_COMPILE 交叉编译工具保管后退出上述操作胜利后,会生成: linux-2.4.18/include/linux/version.h安装内核头文件〔3〕$mkdir-p$TARGET_PREFIX/include$cp-rinclude/linux/$TARGET_PREFIX/include/$cp-rinclude/asm-arm/$TARGET_PREFIX/include/asm与平台相关的汇编$cp-rinclude/asm-generic/$TARGET_PREFIX/include刚刚都做了些什么?第2步安装Binutils$cd$PRJROOT/build-tools/$tar-xvzfbinutils-2.14.tar.gz$cdbuild-binutils$../binutils-2.14/configure--target=$TARGET--prefix=$PREFIXMakefile和Config文件将被生成,存放在build-tools/build-binutils/目录下$make$makeinstall刚刚又做了些什么?第3步安装Bootstrap编译器创建交叉编译版本的gcc,需求交叉编译版本的glibc及其头文件;而交叉编译版本的glibc是经过交叉编译版本的gcc创建的。安装Bootstrap编译器修正gcc源代码中的gcc/config/arm/t-linux文件,在该文件的TARGET_LIBGCC2_CFLAGS后面加上__gthr_posix_h和inhibit_libc:TARGET_LIBGCC2_CFLAGS=-fomit-frame-pointer–fPIC(修正前)TARGET_LIBGCC2_CFLAGS=-fomit-frame-pointer–fPIC-Dinhibit_libc-D__gthr_posix_h.安装Bootstrap编译器$cdbuild-boot-gcc/ $../gcc-2.95.3/configure--target=$TARGET--prefix=$PREFIX--without-headers--with-newlib--enable-languages=c--disable-threadsMakefile和config文件生成在build-tools/build-boot-gcc/--target目的平台--prefix 安装途径--without-headers我们如今没有glibcheaders--with-newlib 不运用glibc--enable-languages=c只支持C言语--disable-threads-Dinhibit_libc补丁 $makeall-gcc$makeinstall-gcc刚刚又做了些什么?第4步安装C库$cd$PRJROOT/build-tools/$tar-xvzfglibc-2.1.3.tar.gz$tar-xvzfglibc-crypt-2.1.tar.gz--directory=glibc-2.1.3$tar-xvzfglibc-linuxthreads-2.1.3.tar.gz--directory=glibc-2.1.3$cdbuild-glibc/$CC=arm-linux-gcc../glibc-2.1.3/configure--host=$TARGET\>--prefix="/usr"--enable-add-ons\>--with-headers=$TARGET_PREFIX/includeMakefile和config文件生成在build-tools/build-glibc/CC=arm-linux-gcc--host=$TARGET--prefix="/usr“--enable-add-ons 运用linux线程--with-headers运用linux内核头文件安装C库$cd$PRJROOT/build-tools/build-glibc/$make$makeinstall_root=$TARGET_PREFIXprefix=""install安装glibc到$TARGET_PREFIX留意不要覆盖系统原来的库Glibc的安装途径在$install_root/$prefix/usr/lib/,如今我们安装在$install_root/$prefix/lib/$cd$TARGET_PREFIX/lib/安装C库$cplibc.solibc.so.orig$vilibc.so修正libc.so文件GROUP(/lib/libc.so.6/lib/libc_nonshared.a)GROUP(libc.so.6libc_nonshared.a)刚刚又做了些什么?第5步最后的安装$cd$PRJROOT/build-tools/build-gcc/ $../gcc-<version>/configure--target=$TARGET\ –prefix=$PREFIX\ --enable-languages=c,c++ $makeall $makeinstall$PRJROOT/tools目录构造生成的ToolchainBinutils工具包引见addr2line:把程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会运用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号。ar:建立、修正、提取归档文件。归档文件是包含多个文件内容的一个大文件,其构造保证了可以恢复原始文件内容。Binutils工具包引见as:主要用来编译GNUC编译器gcc输出的汇编文件,产生的目的文件由衔接器ld衔接。c++filt:衔接器运用它来过滤C++和Java符号,防止重载函数冲突。gprof:显示程序调用段的各种数据。nm:列出目的文件中的符号。Binutils工具包引见objcopy:把一种目的文件中的内容复制到另一种类型的目的文件中。objdump:显示一个或者更多目的文件的信息。显示一个或者更多目的文件的信息。运用选项来控制其显示的信息。它所显示的信息通常只需编写编译工具的人才感兴趣。Binutils工具包引见ld:衔接器。它把一些目的和归档文件结合在一同,重定位数据,并链接符号援用。通常,建立一个新编译程序的最后一步就是调用ld。ranlib:产生归档文件索引,并将其保管到这个归档文件中。在索引中列出了归档文件各成员所定义的可重分配目的文件。Binutils工具包引见readelf:显示ebf格式可执行文件的信息。size:列出目的文件每一段的大小以及总体的大小。默许情况下,对于每个目的文件或者一个归档文件中的每个模块只产生一行输出。strip:丢弃目的文件中的全部或者特定符号。Binutils工具包引见strings:打印某个文件的可打印字符串,这些字符串最少4个字符长,也可以运用选项-n设置字符串的最小长度。默许情况下,它只打印目的文件初始化和可加载段中的可打印字符;对于其它类型的文件它打印整个文件的可打印字符,这个程序对于了解非文本文件的内容很有协助。gcc编译器引见cpp:C预处置器。g++:C++编译器

温馨提示

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

评论

0/150

提交评论