您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 嵌入式Linux开发培训入门讲义
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/OSWindowsCEVxWorksPalmOSQNXSymbian•HowToChoice远见品质第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:$PATH远见品质TARGET常用的值实际平台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目录结构远见品质生成的Toolchain远见品质Binutils工具包介绍addr2line:把程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的
本文标题:嵌入式Linux开发培训入门讲义
链接地址:https://www.777doc.com/doc-975512 .html