课程目标本课程结束时,您将能够:掌握嵌入式Linux的开发流程进行基于嵌入式Linux的进程间编程进行基于嵌入式Linux的网络编程进行基于嵌入式Linux的GUI编程3课程安排嵌入式Linux开发环境搭建嵌入式Linux概述Linux快速入门熟悉嵌入式开发平台熟悉引导启动代码和内核的烧写NFS环境构建4课程安排嵌入式Linux下的应用程序开发嵌入式Linux开发工具与开发流程理解交叉编译嵌入式Linux下的应用程序调试技巧Make工程管理器5嵌入式系统简介6嵌入式系统开发嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。7后PC时代据统计每年只有10-20%的计算机芯片是为台式PC或膝上电脑而设计的。每年又有1万个新的嵌入式系统计划产生,而且越来越多的系统需要复杂的嵌入式操作系统。2006年的全球产销量为十亿部,其中中国市场为1亿部。嵌入式系统设计制造的CPU每年大概有十~数十亿片。8常见嵌入式CPU微控制器(MCU)ARM7和ARM9的区别(3、5流水线)数字信号处理器(DSP)(4流水线)片上系统(SOC)可编程片上系统(SOPC—Nios2)9典型的嵌入式系统与PC机•处理器•存储器•输入•输出•软件(操作系统/驱动程序/应用程序)10嵌入式系统与PC设备名称嵌入式系统PC机CPU嵌入式处理器(ARM,MIPS)CPU(Intel的Pentium、AMD的Athlon等)内存SDRAM芯片SDRAM,DDR内存条存储设备Flash芯片硬盘输入设备按键、触摸屏鼠标、键盘输出设备LCD显示器声音设备音频芯片声卡接口MAX232等芯片主板集成其他设备USB芯片、网卡芯片主板集成或外接卡11嵌入式系统与PC(2)嵌入式系统PC机引导代码Bootloader引导,针对不同电路板进行移植主板的BIOS引导,无须改动操作系统WinCE、VxWorks、Linux等,需要移植Windows、Linux等,不需要移植驱动程序每个设备驱动都必须针对电路板进行重新开发或移植,一般不能直接下载使用操作系统含有大多数驱动程序,或从网上下载直接使用协议栈需要移植操作系统包括,或第三方提供开发环境借助服务器进行交叉编译在本机就可开发调试仿真器需要不需要12嵌入式系统的特点嵌入式系统低功耗、体积小,专用性强。嵌入式系统与PC机的最大不同就是嵌入式CPU大多工作在为特定用户群设计的系统中,能够把PC机中许多由板卡完成的任务集成在芯片内部,从而有利于嵌入式系统设计趋于小型化。为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中,而不是存贮于磁盘等载体中。嵌入式系统的硬件和软件都必须高效率地设计,系统要精简。操作系统一般和应用软件集成在一起。对软件代码质量要求很高。应该尽最大可能避免死机的情况发生。嵌入式系统开发需要专门的开发工具和开发环境。13如何选择嵌入式CPU?ARMPowerPCMIPSXscaleDSPX86……14典型的嵌入式操作系统LinuxuC/OSWindowsCEVxWorksPalmOSSymbian15嵌入式系统开发流程16嵌入式系统开发的内容17嵌入式Linux开发流程电路设计(第1版)BootLoader内核移植编译器移植电路设计(第2版)电路设计(第3版)设备驱动程序开发应用程序开发18嵌入式Linux开发模式LinuxJTAGCPUCOREBootLoader内核FlashTargetHost串口网口NFS模式Rootfs19嵌入式Linux开发模式(2)LinuxJTAGCPUCOREBootLoader内核RAMDISKFlashTargetHost串口网口Ramdisk模式20Linux快速入门21Linux简介LinusTorvalds于1991编写Linux是一个Unix兼容的系统,大部分通用的Unix工具和程序都可以在Linux系统下运行。UNIX-堂兄Linux—表弟使用GNU工具开发:gcc,glibc,binutils,make等GNU=GNUisNotUnixGPL=GeneralPublicLicense22一些发行版RedHatFedoraCoreSuseDebianUbuntuCentOSAisanux23认识Linux内核版本主版本1.02.02.22.42.62,3年更新稳定版2.0.402.2.122.4.182.6.71,2月更新稳定版更新2.6.23.1~2.6.23.71,2周更新24Linux体系结构用户空间内核空间shell命令、程序或shell脚本文件系统I/O中断异常处理内存管理Cache调度系统调用(systemcalls)内核25内核结构26Linux优点提供了先进的网络支持多任务、多用户符合IEEEPOSIX标准核心能仿真FPU支持数十种文件系统格式完全运行于保护模式开放源代码采用先进的内存管理机制,更加有效地利用物理内存27Linux分区Linux分区的形式Swap分区根分区/Boot分区其他28Linux的基本命令Shell命令行使用技巧:Tab自动补齐、ctrl+a\+e等cd:转换目录ls:列出文件名(根目录浏览)ll:查看文件属性(文件属性与权限)cp:复制文件(cp/mnt/hgfs/share/*.*/root/)mv:移动文件(可用于文件或目录的改名)rm:删除文件(rm–rf(目标))mkdir:创建目录rmdir:删除目录29Linux的基本命令(2)cat:显示文本文件less/more:分屏显示文件grep:查找字符串(ls–all|grep***)head:显示文件开头tail:显示文件结尾sort:按次序显示文件uniq:去掉文件中重复的行diff:比较两个文件file:测试文件内容30Linux的基本命令(3)echo:显示文本date:显示时间和日期gzip:压缩文件gunzip:解压缩文件bzip2:压缩文件tar:打包和解包文件whereis:查找命令which:查找实用程序31Linux的基本命令(4)ps:列出进程df:检查文件系统空间占用情况du:显示磁盘空间的使用情况kill:杀死进程chmod:改变文件或目录的访问权限chown:改变文件或目录的属主和组chgrp:改变文件或目录所属的组info:获得帮助32Linux的基本命令(5)pwd:显示当前工作目录的绝对路径rpm:文件包管理clear:清屏ln:创建文件链接who:列出系统上的用户名单write:发送消息talk:与其他用户通信man:获取帮助33熟悉嵌入式开发平台熟悉引导启动代码和内核的烧写34需要熟悉的内容开发板硬件基本配置开发板与PC机连接方式PC机相关配置熟悉bootloader的使用深入理解开发内容巩固开发流程35Bootloader烧写示范Linux环境(虚拟机)简介超级终端和DNW的配置Bootloader的显示信息简介(标准BIOS)内核、文件系统的演示36嵌入式Linux下的应用程序开发37开发工具--编辑器vivi的基本使用方法•输入模式•命令模式38vi--开始编辑新增(append)--a从光标所在位置後面开始新增资料,光标後的资料随新增资料向後移动。--A从光标所在列最後面的地方开始新增资料。插入(insert)--i从光标所在位置前面开始插入资料,光标後的资料随新增资料向後移动。--I从光标列的第一个非空白字符前面开始插入资料。开始(open)--o在光标所在列下新增一列并进入输入模式。--O在光标所在列上方新增一列并进入输入模式。39vi--删除与修改x删除光标所在字符。dd删除光标所在的列。r修改光标所在字符,r後接著要修正的字符R进入取代状态,新增资料会覆改原先资料,直到按[ESC]回到指令模式下为止。s删除光标所在字符,并进入输入模式。S删除光标所在的列,并进入输入模式。40vi--退出命令:q不保存退出:q!不保存强制性退出:w保存编辑:wfilename存入文件filename中:w!filename强制性存入文件filename中:wq(:x)保存并退出(shift+zz)41vi--光标移动命令b移动到当前单词的开始e移动到当前单词的结尾w向前移动一个单词h向前移动一个字符j向上移动一行k向下移动一行l向后移动一个字符42vi--改变与替换操作命令r替换光标所在的字符R替换字符序列cw替换一个单词ce同cwcb替换光标所在的前一字符c$替换自光标位置至行尾的所有字符C同c$cc替换当前行43vi--拷贝与粘贴命令/yw将光标所在单词拷入剪贴板y$将光标至行尾的字符拷入剪贴板Y同y$yy将当前行拷入剪贴板p将剪贴板中的内容粘贴在光标后P将剪贴板中的内容粘贴在光标前•利用Vi编写一个helloworld程序!4445开发工具--编译器GCC全称为GNUCC,GNU项目中符合ANSIC标准的编译系统编译如C、C++、ObjectC、Java、Fortran、Pascal、Modula-3和Ada等多种语言一个交叉平台编译器,适合在嵌入式领域的开发编译46GCC编译器GNUCompilerCollectionC,C++,Objective-C,Fortran,Java,Ada简介gcc所支持后缀名解释.cC原始程序.C/.cc/.cxxC++原始程序.mObjective-C原始程序.i已经过预处理的C原始程序.ii已经过预处理的C++原始程序.s/.S汇编语言原始程序.h预处理文件(头文件).o目标文件.a/.so编译后的库文件48编译器的作用源代码*.c预处理器头文件*.h编译器目标代码*.o可执行文件引导代码库函数汇编处理链接Gcc的编译流程分为四个步骤预处理(Pre-Processing)编译(Compiling)汇编(Assembling)链接(Linking)49理解交叉编译及环境建立50GCC交叉编译器GNUBinutilsGNUBinutils的主要工具有两个,一个是连接程序ld,另外一个是汇编程序as。其主要目的是为GNU系统,提供汇编和连接工具。GNUGCCGNUGCC就是上面提到的GCC,GCC主要是为GNU系统提供C编译器。现在支持多种语言,这其中包括C/C++、Fortran、Java、Objective-C、甚至还有Ada。GNUGLibc用于定义系统调用和其它一些基本的函数调用。51GCC交叉编译器的生成第1步,取得Binutils、GCC、Glibc源码。第2步,配置并编译Binutils取得我们所需要的汇编和连接程序。第3步,配置并编译GCC源码生成GCC编译器。一般是C编译器首先生成,然后以这个为基础在结合下一步生成的Glibc的C函数库,再编译生成其它编译器。第4步,配置Glibc并编译生成Glibc的C函数库。第5步,再次配置和编译GCC源码,生成其它语言的编译器,如C++编译器等。52工具链代码结构53TARGET常用的值实际平台TARGET的值PowerPCp