为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

家庭网关应用技术概述

2010-10-14 50页 ppt 662KB 32阅读

用户头像

is_344620

暂无简介

举报
家庭网关应用技术概述null第一部分 家庭网关应用技术概述第一部分 家庭网关应用技术概述 业务与应用产品部 曹永欣 cyx@fiberhome.com.cn什么是家庭网关什么是家庭网关由于研究家庭网关的公司众多,家庭网关的定义还不统一。定义定义Cisco Cisco System公司的家庭网关定义是:一个在家庭内的网络化信息设备与智能宽带接入网之间的智能化网关。 定义定义RG RG的家庭网关的定义:Residential Gateway Gorup(RG)是一个在1995年建立的正式的工业论坛组织,它率先采用家庭网关来代表一个集中式智能接口,...
家庭网关应用技术概述
null第一部分 家庭网关应用技术概述第一部分 家庭网关应用技术概述 业务与应用产品部 曹永欣 cyx@fiberhome.com.cn什么是家庭网关什么是家庭网关由于研究家庭网关的公司众多,家庭网关的定义还不统一。定义定义Cisco Cisco System公司的家庭网关定义是:一个在家庭内的网络化信息设备与智能宽带接入网之间的智能化网关。 定义定义RG RG的家庭网关的定义:Residential Gateway Gorup(RG)是一个在1995年建立的正式的工业论坛组织,它率先采用家庭网关来代表一个集中式智能接口,将家庭外部的接入网络和家庭内部网络联系起来。它对家庭网关的定义是一种简单的、智能的、化的、灵活的整个家庭网络接口单元,可以从不同的外部网络接收通讯信号,通过家庭网络传递信号给某个智能设备。借助引入家庭网关的概念,希望能够为集成不同的外部网络和丰富新的应用提供一个有效的途径。 主要功能主要功能 作为所有外部接入网连接到家庭内部,同时将家庭内部网络连接到外部的一种物理接口 使住宅用户可以获得各种家庭服务(包括现有的服务和未来可能出现的服务)的平台 产品形态产品形态功能特性实例功能特性实例特点 · 提供高达100M以太网接入 · 集成802.11b/g无线接入功能,最高速率可达108Mbps . · 支持路由/桥混合转发 · 支持VLAN连接 · 家庭存储与打印共享 · 内置SPI防火墙,保护家庭网络设备安全 · 支持SIP/MGCP/H.248等VOIP协议语音,支持多种语音编码器。 · 支持VPN穿越 ,基于IPSec/L2TP。 · 支持多SSID,提供多个虚拟无线网络 · 支持Web方式,用户本地管理功能 · 支持CLI命令行管理 · 强大的QoS能力,保障多业务环境下的VoIP、IPTV等关键业务的服务质量 · 支持TR-069远程管理:设备配置、版本升级、诊断等 · 通过CE认证 · 提供附加的增值业务功能 家庭网关上所应用的技术家庭网关上所应用的技术 软件 嵌入式LinuxLinux系统介绍Linux系统介绍 简单地说,Linux是一套免费使用和自由传播的类Unix操作系统,它主要用于基于x86系列CPU的计算机上。这个系统是由世界各地的成千上万的程序员设计和实现的。其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的Unix兼容产品。 嵌入式Linux嵌入式Linux 优势 Linux做嵌入式的优势,首先,Linux是开放源代码的,不存在黑箱技术,遍布全球的众多Linux爱好者又是Linux开发者的强大技术支持; 其次,Linux的内核小、效率高,内核的更新速度很快,linux是可以定制的,其系统内核最小只有约134KB。 第三,Linux是免费的OS,在价格上极具竞争力。 Linux还有着嵌入式操作系统所需要的很多特色,突出的就是Linux适应于多种CPU和多种硬件平台,是一个跨平台的系统。到目前为止,它可以支持二三十种CPU 使用Linux为的是来开发无线连接产品的开发者越来越多。Linux在快速增长的无线连接应用主场中有一个非常重要的优势,就是有足够快的开发速度。这是因为LInux有很多工具,并且Linux为众多程序员所熟悉。 Linux的大小适合嵌入式操作系统——Linux固有的模块性,适应性和可配置性,使得这很容易做到。另外,Linux源码的实用性和成千上万的程序员热切其望它用于无数的嵌入式应用软件中,导致很多嵌入式Linux的出现,包括:Embedix,ETLinux,LEM,Linux Router Project,LOAF,uCLinux,muLinux,ThinLinux,FirePlug,Linux和PizzaBox Linux. 软件关键技术概述软件关键技术概述驱动技术 桥路由技术:通常桥路由可采用软件方式或硬件方式转发。在原有的设计中,家庭网关采用双MII的,通过软件方式实现数据转发功能。尽管该方式灵活高效,但处理效率较低。为此,本项目采用单MII的架构,通过充分发挥交换芯片的处理性能,实现硬件转发,从而保证系统的处理效能。 软件关键技术概述软件关键技术概述IPv4/v6双栈 在中国电信最新的家庭网关中,对支持IPv6提出了明确的要求。然而,由于IPv4与IPv6之间存在着很大的差异,同时存在众多基于IPv4协议的网络和应用,因此,需要采用IPv4/IPv6双栈技术实现IPv4向IPv6的过渡。如何实现IPv4与IPv6协议之间的有效转换,保证双栈技术的处理性能,将是该技术面临的一大挑战。 软件关键技术概述软件关键技术概述中间层技术 在家庭网关产品系列化设计过程中,软件设计版本的可移植性将直接决定产品开发成本和开发效率。为了适应不同硬件平台的开发环境,需要采用中间层技术,实现对底层驱动接口的一致性规范,从而保证软件版本的可移植性。软件关键技术概述软件关键技术概述 无线技术 5.8GHz 802.11n 无线承载IPTV:为了保证IPTV业务无线承载的可靠性和稳定性,本项目选用5.8G 802.11n技术。尽管5.8G频段较2.4G频段具有低干扰的优势,但信号易衰减的特性在很大程度上影响IPTV业务的应用。因此需要增强5.8G 802.11n技术的高覆盖率和鲁棒性。软件关键技术概述软件关键技术概述 网管技术 远程管理技术主要实现网络管理平台与家庭网关的远程交互,从而实现网管平台对终端设备的远程控制、远程控制、远程检测、远程设置等。为了保证该产品系列市场应用的可扩展性,面对不同运营商的网络管理平台,需要保证家庭网关对于远程管理的兼容性。在此背景下的技术难点是如何保证具备与不同的网管平台互通能力的同时,实现对业务配置及设备控制等方面的高效管理。 软件关键技术概述软件关键技术概述 智能升级技术 现有的软件升级主要针对整个软件镜像,升级效率低下。为此,提出智能升级的概念,实现软件的模块化更新,在降低升级执行风险的同时,提高升级效率 软件关键技术概述软件关键技术概述 语音技术 VoIP语音功能主要通过SIP/H.248信令协议来实现家庭网关与软交换平台的交互。然而面对不同的软交换平台,如何确保设备之间的互通性将是语音技术中的主要难点。软件关键技术概述软件关键技术概述 应用软件技术 IPv6相关的应用软件开发。MLDv1/v2 Proxy, DHCPv6 Server/Client, PPPoEv6 Client,WAN/LAN侧的SLACC, DNSv6 Relay,IPv6 QoS,IPv6防火墙等。 第二部分 Linux嵌入式开发简介第二部分 Linux嵌入式开发简介概要概要1.嵌入式系统的开发方法 2.NFS简介 3.NFS在Linux上的配置 4.bootloader 5.嵌入式Linux的关键技术 6.开发流程举例1 嵌入式系统的开发方法1 嵌入式系统的开发方法一个新的开发模式 原因:嵌入式系统通常是一个受限的系统,因此直接在嵌入式系统的硬件平台上编写软件比较困难,有时候甚至是不可能的。 模式的特点:目前一般采用的解决办法是首先在通用计算机上编写程序,然后通过交叉编译生成目标平台上可以运行的二进制代码格式,最后再下载到目标平台上的特定位置上运行。 1 嵌入式系统的开发方法1 嵌入式系统的开发方法概念:Cross 需要交叉开发环境(Cross Development Environment)的支持是嵌入式应用软件开发时的一个显著特点,交叉开发环境是指编译、链接和调试嵌入式应用软件的环境,它与运行嵌入式应用软件的环境有所不同,通常采用宿主机/目标机模式,如下图所示。 1 嵌入式系统的开发方法1 嵌入式系统的开发方法Cross的图示1 嵌入式系统的开发方法1 嵌入式系统的开发方法构成之一: 宿主机(Host)是一台通用计算机(如PC机或者工作站),它通过串口或者以太网接口与目标机通信。 宿主机的软硬件资源比较丰富,不但包括功能强大的操作系统(如Windows和Linux),而且还有各种各样优秀的开发工具(如WindRiver的Tornado、Microsoft的Embedded Visual C++等),能够大大提高嵌入式应用软件的开发速度和效率。 1 嵌入式系统的开发方法1 嵌入式系统的开发方法构成之二 目标机(Target)一般在嵌入式应用软件开发期间使用,用来区别与嵌入式系统通信的宿主机 它可以是嵌入式应用软件的实际运行环境,也可以是能够替代实际运行环境的仿真系统,但软硬件资源通常都比较有限。 1 嵌入式系统的开发方法1 嵌入式系统的开发方法相关工具: 嵌入式系统的交叉开发环境一般包括交叉编译器、交叉调试器和系统仿真器, 其中交叉编译器用于在宿主机上生成能在目标机上运行的代码, 而交叉调试器和系统仿真器则用于在宿主机与目标机间完成嵌入式软件的调试。1 嵌入式系统的开发方法1 嵌入式系统的开发方法过程: 在采用宿主机/目标机模式开发嵌入式应用软件时, 首先利用宿主机上丰富的资源和良好的开发环境开发和仿真调试目标机上的软件, 然后通过串口或者以太网络连接将交叉编译生成的目标代码传输并装载到目标机上, 并在监控程序或者操作系统的支持下利用交叉调试器进行分析和调试, 最后目标机在特定环境下脱离宿主机单独运行。1 嵌入式系统的开发方法1 嵌入式系统的开发方法建立交叉开发环境是进行嵌入式软件开发的第一步, 目前常用的交叉开发环境主要有开放和商业两种类型。 开放的交叉开发环境的典型代表是GNU工具链、目前已经能够支持x86、ARM、MIPS、PowerPC等多种处理器。 商业的交叉开发环境则主要有Metrowerks CodeWarrior、ARM Development Software Toolkit、SDS Cross compiler、WindRiver Tornado、Microsoft Embedded Visual C++等。 null一个e.g.null 软件 开发 流程2 NFS简介2 NFS简介NFS是Net File System的简写,即网络文件系统。 网络文件系统是很多类Unix操作系统支持的文件系统中的一种。 NFS允许一个系统在网络上与它人共享目录和文件。通过使用NFS,用户和程序可以象访问本地文件一样访问远端系统上的文件。 2 NFS简介2 NFS简介在嵌入式Linux 的开发过程中,开发者需要在宿主机上进行所有的软件开发,交叉编译后,通用FTP方式将可执行文件下载到嵌入式系统运行,但这种方式不但效率低下,且无法实现在线的调试。因此,可以通过建立NFS,把宿主机上的特定分区共享到待调试的嵌入式目标系统上,在线对程序进行调试和修改,大大的方便了软件的开发。3 配置嵌入式Linux的NFS开发环境 3 配置嵌入式Linux的NFS开发环境 嵌入式Linux的NFS开发环境的实现包括两个方面:一是宿主机的NFS服务器支持;二是嵌入式目标系统的NFS客户端的支持。因此,NFS开发环境的建立需要配置linux服务器端和嵌入式目标系统端。3 配置嵌入式Linux的NFS开发环境 3 配置嵌入式Linux的NFS开发环境 NFS服务器的配置 以root 身份登陆Linux 服务器,编辑/etc 目录下的共享目录配置文件exports,指定共享目录及权限等。 执行如下命令编辑文件/etc/exports: # vi /etc/exports 在该文件里添加如下内容: /home/work 192.168.0.*(rw,sync,no_root_squash) 然后保存退出。 添加的内容表示:允许ip 地址范围在192.168.0.*的计算机以读写的权限来访问/home/work 目录。 /home/work 也称为服务器输出共享目录。 括号内的参数意义描述如下: rw:读/写权限,只读权限的参数为ro; sync:数据同步写入内存和硬盘,也可以使用async,此时数据会先暂存于内存中,而不立即写入硬盘。 no_root_squash:NFS 服务器共享目录用户的属性,如果用户是 root,那么对于这个共享目录来说就具有 root 的权限。 3 配置嵌入式Linux的NFS开发环境3 配置嵌入式Linux的NFS开发环境最后执行如下命令启动NFS服务,此时NFS会激活守护进程,然后就开始监听Client端的请求: # /etc/rc.d/init.d/nfs start 在NFS服务器启动后,还需要检查宿主机的防火墙等设置,确保没有屏蔽掉NFS使用的端口和允许通信的主机。 我们首先在宿主机上进行NFS服务器的回环测试,验证共享目录是否能够被访问。在Linu 服务器上运行如下命令: # mount –t nfs 192.168.0.20:/home/work /mnt # ls /mnt 命令将Linux服务器的NFS输出共享目录挂载到/mnt目录下,因此,如果NFS正常工作,应该能够在/mnt目录看到/home/work共享目录中的内容。 3 配置嵌入式Linux的NFS开发环境3 配置嵌入式Linux的NFS开发环境嵌入式目标系统NFS 客户端的配置 在宿主机设置好后,还需要对客户端进行相关配置。在配置内核时选择Load an Alternate Configuration File输入配置文件的路径和文件名添加内核对NFS的支持: 选中networking options-》IP:kernel level auloconfiguralion项 选中file systems-》network file systems-》下的root file system on nfs 和nfs file system support重新编译内核下载bootloader和kernel到开发板上。3 配置嵌入式Linux的NFS开发环境3 配置嵌入式Linux的NFS开发环境 在嵌入式目标系统的Linux Shell 下,执行如下命令来进行NFS共享目录挂载: # mkdir /mnt/nfs # mount –t nfs 192.168.0.20:/home/work /mnt/nfs –o nolock # cd /mnt/nfs # ls 此时,嵌入式目标系统端所显示的内容即为宿主机的输出目录的内容。 目录/home/work通过NFS映射到了嵌入式目标系统的/mnt/nfs目录。用户可以用增/删/修改文件的方式来验证实际效果。mount命令中的192.168.0.20为宿主机的IP地址,/home/work为宿主局所配置的共享输出目录,/mnt/nfs为嵌入式设备上的本地目录。 4 Bootloader的引入4 Bootloader的引入引入:对于计算机系统来说,从开机上电到操作系统启动需要一个引导过程。嵌入式Linux系统同样离不开引导程序,这个引导程序就叫做BootLoader。 对比:回忆一下PC的体系结构我们可以知道,PC机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的引导程序一起组成。 BIOS在完成硬件检测和资源分配后,将硬盘MBR中的引导程序读到系统的RAM中,然后将控制权交给引导程序。 引导程序的主要运行任务就是将内核映象从硬盘上读到RAM中然后跳转到内核的入口点去运行,也即开始启动操作系统。4 Bootloader的引入4 Bootloader的引入而在嵌入式系统中,通常并没有像BIOS那样的固件程序。 因此整个系统的加载启动任务就完全由BootLoader来完成. 比如在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时都从地址0x00000000开始执行.而在这个地址处安排的通常就是系统的BootLoader程序。 而存储介质一般是Flash 4 Bootloader概念4 Bootloader概念定义:简单地说BootLoader就是在操作系统内核或用户应用程序运行之前运行的一段小程序。 通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。 4 Bootloader启动过程4 Bootloader启动过程Linux系统是通过BootLoader引导启动的。一上电,就要执行BootLoader来初始化系统。 系统加电或复位后,所有CPU都会从某个地址开始执行,这是由处理器设计决定的。 而基于 CPU 构建的嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM 或 FLASH 等)被映射到这个预先安排的地址上。因此在系统加电后,CPU将首先执行Boot Loader程序。 4 Bootloader交互4 Bootloader交互主机和目标机之间一般有串口可以连接,BootLoader软件通常会通过串口来输入输出。4 Bootloader多阶段启动4 Bootloader多阶段启动BootLoader启动过程通常是多阶段的,这样既能提供复杂的功能,又有很好的可移植性。 第一个阶段的代码是采用汇编完成的,和硬件平台相关 第二个阶段是采用c语言,可以实现平台无关4 Bootloader 网络支持4 Bootloader 网络支持4 Bootloader举例u-boot4 Bootloader举例u-bootU-boot是德国DENX小组的开发用于多种嵌入式CPU的bootloader程序, UBoot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。UBoot除了支持PowerPC系列的处理器外,还能支持MIPS、 x86、ARM、NIOS、XScale等诸多常用系列的处理器。 4 Bootloader举例u-boot4 Bootloader举例u-bootuboot的源码结构 目录树 |--board |--common |--cpu |--disk |--doc |--drivers |--dtt |--examples |--fs |--include |--lib_arm |--lib_generic |--net |--post |--rtc |--tools 4 Bootloader举例u-boot4 Bootloader举例u-boot1. board:和一些已有开发板有关的文件. 每一个开发板都以一个子目录出现在当前目录中。 2. common:实现uboot命令行下支持的命令,每一条命令都对应一个文件。例如bootm命令对应就是cmd_bootm.c。 3. cpu:与特定CPU架构相关目录,每一款Uboot下支持的CPU在该目录下对应一个子目录。 4. disk:对磁盘的支持。 5. doc:文档目录。 6. drivers:Uboot支持的设备驱动程序都放在该目录,比如各种网卡、支持CFI的Flash、串口和USB等。 4 Bootloader举例u-boot4 Bootloader举例u-boot7. fs: 支持的文件系统,Uboot现在支持cramfs、fat、fdos、jffs2和registerfs。 8. include:Uboot使用的头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和对文件系统支持的文件。该目录下configs目录有与开发板相关的配置头文件,如leopard2a.h。该目录下的asm目录有与CPU体系结构相关的头文件。 9. lib_xxxx: 与体系结构相关的库文件。 10. net:与网络协议栈相关的代码,BOOTP协议、TFTP协议、RARP协议和NFS文件系统的实现。 11. tools:生成Uboot的工具,如:mkimage, crc等等。 4 Bootloader举例u-boot4 Bootloader举例u-bootu-boot启动模式介绍 大多数 Boot Loader 都包含两种不同的操作模式:"启动加载"模式和"下载"模式,这种区别仅对于开发人员才有意义。但从最终用户的角度看,Boot Loader 的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。 4 Bootloader举例u-boot4 Bootloader举例u-boot启动加载(Boot loading)模式: 这种模式也称为"自主"(Autonomous)模式。也即 Boot Loader 从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。这种模式是 BootLoader 的正常工作模式,因此在嵌入式产品发布的时侯,Boot Loader 必须工作在这种模式下。 4 Bootloader举例u-boot4 Bootloader举例u-boot下载(Downloading)模式: 在这种模式下,目标机上的 Boot Loader 将通过串口连接或网络连接等通信手段从主机下载文件,比如:下载内核映像和根文件系统映像等。从主机下载的文件通常首先被 BootLoader 保存到目标机的 RAM 中,然后再被 BootLoader 写到目标机上的FLASH 类固态存储设备中。BootLoader 的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用 BootLoader 的这种工作模式。工作于这种模式下的 Boot Loader 通常都会向它的终端用户提供一个简单的命令行接口。 4 Bootloader举例u-boot4 Bootloader举例u-boot运行过程: 大多数bootloader都分为阶段1(stage1)和阶段2(stage2)两大部分。 4 Bootloader举例u-boot4 Bootloader举例u-boot4 Bootloader举例u-boot4 Bootloader举例u-boot4 Bootloader举例u-boot4 Bootloader举例u-bootuboot同样分为这两个阶段。依赖于CPU体系结构的代码(如CPU初始化代码等)通常都放在阶段1中且通常用汇编语言实现,而阶段2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。 4 Bootloader举例-u-boot4 Bootloader举例-u-boot5 嵌入式Linux的关键技术5 嵌入式Linux的关键技术5.1 嵌入式Linux介绍 5.2 交叉开发 5.3 内核的配置与编译 5.4 定制文件系统 5.5 Makefile5.1 嵌入式Linux介绍5.1 嵌入式Linux介绍概述 Linux是一个成熟而稳定的网络操作系统。将它植入嵌入式设备具有众多的优点。首先,它的源代码是开放的,任何人都可以获取并修改,用之开发自己的产品。其次,它是可以定制的,其系统内核最小只有约134kB。一个带有中文系统和图形用户界面的核心程序也可以做到不足1MB,并且同样稳定。另外,它和多数Unix系统兼容,应用程序的开发和移植相当容易。同时,由于具有良好的可移植性,人们已成功使Linux运行于数百种硬件平台之上。 5.1 嵌入式Linux介绍5.1 嵌入式Linux介绍 Linux的众多优点还是使它在嵌入式领域获得了广泛的应用,并出现了数量可观的嵌入式Linux系统。其中有代表性的包括:uClinux、ETLinux、ThinLinux、LOAF等。ETLinux通常用于在小型工业计算机,尤其是PC/104模块。ThinLinux面向专用的照相机服务器、X-10控制器、MP3播放器和其它类似的嵌入式应用。 5.1 嵌入式Linux介绍5.1 嵌入式Linux介绍优势: 1、 可应用于多种硬件平台。Linux已经被移植到多种硬件平台,这对于经费,时间受限制的研究与开发项目是很有吸引力的。原型可以在标准平台上开发后移植到具体的硬件上,加快了软件与硬件的开发过程。Linux采用一个统一的框架对硬件进行管理,从一个硬件平台到另一个硬件平台的改动与上层应用无关。Linux可以随意地配置,不需要任何的许可证或商家的合作关系,源代码可以免费得到。这使得采用Linux作为操作系统不会遇到任何关于版权的纠纷。毫无疑问,这会节省大量的开发费用。本身内置网络支持,而目前嵌入式系统对网络支持要求越来越高。Linux的高度模块化使添加部件非常容易。 5.1 嵌入式Linux介绍5.1 嵌入式Linux介绍 2、 Linux是一个和Unix相似、以内核为基础的、具有完全的内存访问控制,支持大量硬件(包括X86,Alpha、ARM和Motorola等现有的大部分芯片)等特性的一种通用操作系统。其程序源码全部公开,任何人可以修改并在GUN通用公共许可证(GNU General Public License)下发行。这样,开发人员可以对操作系统进行定制,适应其特殊需要。 5.1 嵌入式Linux介绍5.1 嵌入式Linux介绍 3、 Linux带有Unix用户熟悉的完善的开发工具,几乎所有的Unix系统的应用软件都已移植到了Linux上。Linux还提供了强大的网络功能,有多种可选择窗口管理器(X Windows)。其强大的语言编译器GCC,C++等也可以很容易得到,不但成熟完善,而且使用方便。 5.2 交叉开发5.2 交叉开发交叉开发环境:是指编译、链接和调试程序采用宿主机/目标机模式。 正如在前面所讲的,嵌入式系统开发一般采用Host/Target模式,嵌入式Linux也不例外。 具体的来说,Host一般采用完整的Linux系统,而Target也采用相应版本的嵌入式Linux系统。开发工具也是相应的嵌入式Linux工具链(ToolChain)5.2 交叉开发5.2 交叉开发在基于MIPS体系结构的gcc交叉开发环境中,mips-linux-gcc是交叉编译器,mips-linux-ld是交叉链接器。 通常情况下,并不是每一种体系结构的嵌入式微处理器都只对应于一种交叉编译器和交叉链接器, 比如:对于M68K体系结构的gcc交叉开发环境而言,就对应于多种不同的编译器和链接器。如果使用的是COFF格式的可执行文件,那么在编译Linux内核时需要使用m68k-coff-gcc和m68k-coff-ld,而在编译应用程序时则需要使用m68k-coff-pic-gcc和m68k-coff-pic-ld。 5.2 交叉开发5.2 交叉开发函数库:嵌入式系统在链接过程中通常都要求使用较小的函数库,以便最后产生的可执行代码能够尽可能地小,因此实际运用时一般使用经过特殊处理的函数库。 对于嵌入式Linux系统来讲,功能越来越强、体积越来越大的C语言函数库glibc和数学函数库libm已经很难满足实际的需要,因此需要采用它们的精化版本uClibc、uClibm和newlib等。 5.2 交叉开发5.2 交叉开发交叉调试(Cross Debug)又常常被称为远程调试(Remote Debug),是一种允许调试器以某种方式控制目标机上被调试进程的运行方式,并具有查看和修改目标机上内存单元、寄存器以及被调试进程中变量值等各种调试功能的调试方式。一般而言,远程调试过程的结构如右图所示。 5.2 交叉开发5.2 交叉开发在嵌入式Linux系统的开发中,远程调试时目标机上使用的调试服务器通常是gdbserver,而宿主机上使用的调试器则是gdb,两者相互配合共同完成调试过程。 5.2 交叉开发5.2 交叉开发在嵌入式Linux的开发的过程中,会采用一些测试和测量工具,比如: 系统跟踪工具:Strace,Ltrace,LTT 性能测量工具:LTP,Lmbench,gprof,gcov 内存泄漏测量工具:mtrace,dmalloc,memwatch,YAMD5.3 内核的配置与编译5.3 内核的配置与编译内核的精简是基于源代码的编译来完成 Linux内核源代码很多地方都可以下载,而且发行商(如RedHat)的光盘中也提供都包括了源代码 具体到一个特定的硬件平台,具体的CPU和外围设备千差万别,因此一般需要对内核进行修改,即移植内核。 内核移植的本质就是修改通用内核中的已有的设备驱动代码 比如:针对MIPS平台,一般要修改MIPS Linux中的Driver目录的相关文件。 5.2 内核的配置与编译5.2 内核的配置与编译Linux内核的精简是比较复杂的工作,需要对源代码有一定的理解 而幸运的是一般嵌入式Linux硬件平台提供者,比如MIPS平台,相关硬件厂商等都完成的针对其的嵌入式Linux的移植 一般在进行硬件平台的选择的时候,都是选择已有嵌入式Linux支持的硬件。 驱动程序的编写是一个“搜索+模仿+测试的过程”5.2 内核的配置与编译5.2 内核的配置与编译利用make配置Linux内核 由于嵌入式系统硬件资源有限,在编译Linux内核前,需要对内核功能进行裁减,把不需要的功能模块剔除掉,以适应嵌入式的硬件运行环境。 make menuconfig 文本模式菜单界面配置内核功能模块 make 编译内核 5.2 内核的配置与编译5.2 内核的配置与编译常用编译选项选择原则 选择的原则是将与内核其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响;不需要的功能就不要选; 与内核关心紧密而且经常使用的部分功能代码直接编译到内核中。下面对常用的选项分别加以介绍: 5.3 定制文件系统5.3 定制文件系统文件系统是Linux不可缺少的一部分,嵌入式Linux也不例外,root文件系统是内核启动后要加载的。 嵌入式Linux一般采用flash作为存储介质,空间有限,不可能象Host上的Linux那样,有很多的命令和工具。一般只包括必须存在的命令、工具和配置文件。 目前,Linux对flash上的文件系统提供了较好的支持, 如ramdisk,cramfs,romfs,jffs,yaffs文件系统等 而且有第三方工具和文档的支持,如BusyBox和LFS等5.3 定制文件系统5.3 定制文件系统一般的方法: 从www.busybox.net下载使用BUSYBOX软件进行功能裁减,产生一个最基本的根文件系统 再根据自己的应用需要添加其他程序。默认的启动脚本一般都不会符合应用的需要,所以就要修改根文件系统中的启动脚本,它的存放位置位于/etc目录下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile等,自动挂装文件系统的配置文件/etc/fstab,具体情况会随系统不同而不同。 根文件系统在嵌入式系统中一般设为只读,需要使用mkcramfs、genromfs等工具产生烧写映像文件。5.3 定制文件系统5.3 定制文件系统BusyBox : BusyBox是很多标准 Linux工具的一个单个可执行实现。BusyBox 包含了一些简单的工具,例如 cat 和 echo,还包含了一些更大、更复杂的工具,例如 grep、find、mount 以及 telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。很多标准 Linux 工具都可以共享很多共同的元素。例如,很多基于文件的工具(比如 grep 和 find)都需要在目录中搜索文件的代码。当这些工具被合并到一个可执行程序中时,它们就可以共享这些相同的元素,这样可以产生更小的可执行程序。实际上,BusyBox 可以将大约 3.5MB 的工具包装成大约 200KB 大小。BusyBox在Linux 的嵌入式设备中得到了广泛的使用。5.3 Makefile5.3 MakefileMakefile的规则 target ... : prerequisites ... command ... ... target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述。 prerequisites就是,要生成那个target所需要的文件或是目标。 command也就是make需要执行的命令,任意的Shell命令。 这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是说,prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。这就是Makefile的规则。也就是Makefile中最核心的内容。5.3 Makefile5.3 Makefilemake是如何工作的 在默认的方式下,我们只输入make命令。那么make会在当前目录下找名字叫“Makefile”或“makefile”的文件。 如果找到,它会找文件中的第一个目标文件target,并把这个文件作为最终的目标文件。 如果所依赖的文件修改时间要比target文件新,那么,他就会执行后面所定义的命令来生成target这个文件。 这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make根本不理。6 开发流程举例6 开发流程举例6.1 开发流程简介 6.2 实验平台的操作流程简介6.1 开发流程简介6.1 开发流程简介一般流程描述6.1 开发流程简介6.1 开发流程简介Step1: 硬件平台的设计 根据需要选择CPU,外设和其他接口芯片 Step2: Host主机的环境搭建 根据硬件平台,在Host主机上安装Linux系统,并且安装GCC、GDb,binutils,glibc库等所构成的ToolChain. (e.g: arm-linux-gcc,m68k-linux-gcc等) 这是一比较麻烦和浪费时间的过程,可以借助一些其他工具,如crosstool (URL: http://kegel.com/crosstool)6.1 开发流程简介6.1 开发流程简介Step3: bootloader的定制: Bootloader就好比PC上的BIOS,主要负责嵌入式Linux内核的加载,当然很多Bootloader的功能不仅仅如此 它是和硬件平台相关的代码,一般采用汇编,或者汇编和c混合实现 一般方法:从网络上下载一些公开源代码的BOOTLOADER,如U-BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根据自己具体的芯片进行移植修改。 比如:网络上有免费下载的Windows下通过JTAG并口简易仿真器烧写ARM外围Flash芯片的烧写程序,也有Linux下的公开源代码的J-Flash程序。 6.1 开发流程简介6.1 开发流程简介Step4:内核精简和移植 已经进行了讲解,主要包括硬件平台的驱动的修改,然后进行编译,生成一个zImage的映像文件,然后也烧写到Target上 Step5: 文件系统的定制 一般采用内核已经支持的文件系统:如jffs,romfs等 Step6: GUI系统的设计 根据具体的用户和硬件平台进行选择和定制 Step7:应用程序的开发 完成用户的主要功能,设计到了Linux下的应用程序开发。一般来说,嵌入式Linux平台上既有系统提供的程序,也有后来用户自己编写的程序6.1 开发流程简介6.1 开发流程简介一个典型 嵌入式 Linux 的存储布局6.1 开发流程简介6.1 开发流程简介6.1 开发流程简介6.1 开发流程简介6.2 实验平台的操作流程简介6.2 实验平台的操作流程简介Step1: 建立Host的开发环境: Linux的安装 ToolChain的快速安装 串口通讯程序的配置:如超级终端或者Minicom 网络环境的设置:如NFS,FTP等 Step2: 给Target下载bootloader JTAG 串口 网络接口6.2 实验平台的操作流程简介6.2 实验平台的操作流程简介Step3: 编译Linux内核,下载到Target上 Step4:建立root文件系统,下载到Target上 Step5: 应用程序的开发和测试(交叉环境) null Thanks !
/
本文档为【家庭网关应用技术概述】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索