The success's road 嵌入式Linux驱动程序设计 www.farsight.com.cn 远见品质 今天的内容 vLinux驱动程序简介 v嵌入式Linux驱动程序特点 vLinux驱动程序开发流程 vLinux驱动开发培训现状 远见品质 Linux驱动程序介绍 v驱动程序的分类 v设备驱动程序分字符设备,块设备, 网络接口 另外有一些设备驱动比较特殊,比如ip forwarding accelerator, cyphercoprocessor, realtimeextend hardware 远见品质 Linux驱动程序介绍 v嵌入式Linux驱动已经支持的设备门 类齐全,已成为linux相对其他嵌入 式操作系统的一大优势 工业控制常用的串口,并口 人机输入设备鼠标、键盘,触摸屏 彩色、黑白液晶显示输出 网络的完善支持,包括tcp/ip,udp,firewall, WLAN,ipforwarding,ipsec,vpn Usb的全面支持,包括usb硬盘、u盘,usb摄 像头 支持丰富的文件系统,包括fat32,ntfs 远见品质 驱动程序的作用 v驱动程序直接操控硬件 收发通讯数据 读写存储介质,比如flash或硬盘 操作输出设备和执行机,例如打印,开关门 襟等等 远见品质 驱动程序的作用 v驱动程序提供软件访问硬件的机制 应用软件通过驱动程序安全高效的访问硬件 驱动程序文件节点可以方便的提供访问权限 控制 驱动程序作为一个隔离的中间层软件,将底 层细节隐藏起来,提高了软件的可移植性 远见品质 访问Linux设备驱动的方法 v设备提供dev文件系统节点和proc文 件系统节点 v应用程序通过dev文件节点访问驱动 程序 v应用程序通过proc文件节点可以查 询设备驱动的信息 远见品质 驱动程序在哪儿 v驱动程序位于drivers目录下 v驱动程序占kernel代码50% 远见品质 嵌入式Linux驱动程序特点 v嵌入式Linux驱动程序需求多样 嵌入式设备硬件各异 嵌入式处理器往往资源有限,比如处理速度、 存储器容量、总线带宽、电池容量等 v面临上市时间的压力 v开发驱动程序需要专业知识,包括 硬件和软件的 远见品质 典型的嵌入式设备框图 远见品质 典型的嵌入式设备框图 vIntel PXA 远见品质 嵌入式Linux驱动程序特点 v嵌入式系统硬件还在不停的更新进 步 v国际上嵌入式芯片提供商如intel, samsung,freescale,TI,ST每年都 有新品推出 v新的芯片功能总是需要相应的驱动 程序 远见品质 Linux驱动程序开发流程 v熟悉设备的特性 v确定设备驱动程序是哪一类 v编写测试用例 v搜集可重用的代码 v编写自己的驱动程序代码 v调试、编码、测试 远见品质 Linux驱动程序的开发环境 v本机编译调试 开发环境配置简单 无需网络环境 适用于配置较高的x86机器 v主机+目标机 主机可以自由选择Linux或Windows+Cygwin 内核崩溃不会影响主机 远见品质 Linux驱动程序的开发环境 v主机+目标机环境包括 主机运行的工具链∶cross gcc+ glibc+ gdb, 如果是windows主机还要有cygwin仿真环境 主机运行远程服务,常用的有tftp用来传送内 核映像、initrd,nfs用来共享文件系统 目标机运行ssh或telnet等远程登陆服务,用来 调试驱动程序 远见品质 Linux驱动程序加载方式 v驱动程序直接编译入内核 驱动程序在内核启动时就已经在内存中 可以保留专用存储器空间 v驱动程序以模块形式存储在文件系 统里,需要时动态载入内核 驱动程序按需加载,不用时节省内存 驱动程序相对独立于内核,升级灵活 远见品质 Linux驱动程序模块加载 远见品质 Linux驱动程序工程师的作用 v建立嵌入式Linux平台,移植和编写 驱动程序往往是最具挑战的工作 v驱动程序的开发周期一般较长,对 产品的面世时间有着重要影响 v驱动程序质量的好坏,直接关系到 系统工作效能和稳定性,对项目的 成败起着关键作用 远见品质 Linux驱动程序工程师的职责 v规划硬件资源的使用 v分离硬件相关和硬件无关的代码 v划分驱动程序的抽象层次 v移植驱动程序到新的平台 远见品质 Linux驱动程序工程师的职责 v规划硬件资源的使用 CPU时间片分配 中断处理 系统存储器空间映射 远见品质 典型的嵌入式设备存储器映射 远见品质 Linux驱动程序工程师的职责 v分离硬件相关和硬件无关的代码 v划分驱动程序的抽象层次 远见品质 Linux驱动程序工程师的职责 v移植驱动程序到新的平台 远见品质 Linux驱动程序可利用资源 v互联网上很多驱动程序资源 vwww.kernel.org vwww.linuxdevice.org vsourceforge.net 远见品质 GPL对驱动程序开发的影响 v实现非GPL授权的方法——模块形 式动态加载 v驱动程序可以以私有产权形式进行 商业授权 远见品质 Linux驱动开发培训现状 vRedhat培训认证分 RHCT,RHCE,RHCA,培训对象是 Linux系统管理员。 v国内嵌入式Linux设备驱动教学主要 基于uCLinux v华清远见嵌入式Linux设备驱动紧贴 工程实践的需要,提供最适合软件 工程师和电子设计工程师的培训课 程 远见品质 Linux驱动开发理论课程内容 v Linux设备驱动和内核概论 v 设备驱动程序工作流程 v 字符设备驱动程序 v 块设备驱动程序 v Proc文件系统 v 文件系统驱动程序 v Framebuffer驱动程序 v Usb设备驱动程序 v 网络设备驱动程序 远见品质 Linux驱动开发实验课程内容 v 使用gnu开发编译环境 v 熟悉驱动程序加载到内核中的方式 v 数码管的字符驱动程序 v 键盘驱动程序 v A/D,D/A驱动 v UsbMass Storage驱动 v Video4Linux驱动 v 文件系统驱动 v 以太网卡驱动 远见品质 让我们一起讨论! www.farsight.com.cn 谢谢! 成功之路 The success's road 智能手机操作系统介绍 沈青海 www.farsight.com.cn 远见品质 今天内容 v手机操作系统概述 v开发平台 BREW J2ME v智能手机操作系统 SymbianOS Palm OS Windows Mobile 嵌入式Linux 国内手机操作系统 v相关培训课程 远见品质 v手机操作系统概述 封闭式操作系统 开放式操作系统 远见品质 v开发平台 BREW J2ME 远见品质 开发平台 BREW 远见品质 BREW vBREW(BinaryRuntime Environment for Wireless)概述 移植包 发布系统(BDS) BREW SDK(软件开发包) 远见品质 BREW v开发环境 Microsoft Visual C++ 6.0?(或更高版本) 1.1版的BREW SDK(或更高版本) 远见品质 BREW v示例:Applet结构体 /*================================ INCLUDES AND VARIABLE DEFINITIONS ================================== */ #include "AEEModGen.h" #include "AEEAppGen.h" #include "AEEShell.h" #include "helloworld.bid" /*------------------------------------------------- Applet structure. All variables in here are reference via "pMe->" ------------------------------------------------*/ typedefstruct_helloworld{ AEEAppleta ; AEEDeviceInfoDeviceInfo; IDisplay*pIDisplay; IShell*pIShell; // add your own variables here... } helloworld; 远见品质 BREW v示例:函数AEEClsCreateInstance intAEEClsCreateInstance(AEECLSIDClsId, IShell*pIShell, IModule*po, void **ppObj) { *ppObj= NULL; if( ClsId== AEECLSID_HELLOWORLD ) { // Create the applet and make room for the applet structure if( AEEApplet_New(sizeof(helloworld), ClsId, pIShell,po, (IApplet**)ppObj, (AEEHANDLER)helloworld_HandleEvent, (PFNFREEAPPDATA)helloworld_FreeAppData) ){ if(helloworld_InitAppData((helloworld*)*ppObj)) { return(AEE_SUCCESS); } else { IAPPLET_Release((IApplet*)*ppObj); return EFAILED; } } } return(EFAILED); } 远见品质 BREW v示例:函数_InitAppData和_FreeAppData booleanhelloworld_InitAppData(helloworld* pMe) { pMe->DeviceInfo.wStructSize= sizeof(pMe->DeviceInfo); ISHELL_GetDeviceInfo(pMe->a.m_pIShell,&pMe- >DeviceInfo); pMe->pIDisplay= pMe->a.m_pIDisplay; pMe->pIShell= pMe->a.m_pIShell; return TRUE; } void helloworld_FreeAppData(helloworld* pMe) { } 远见品质 BREW v模拟器环境与真实设备的区别 速度 声频 外观 文本输入 内存 远见品质 开发平台 J2ME 远见品质 J2ME vJ2ME简介 是JAVA平台中最复杂的一个 模块化和可缩放化 JVM层 配置层 框架层 包含许多各种不同规格的Configuration、 Profile、以及Optional Package。 远见品质 J2ME vJ2ME把设备分为两类 联接设备(connected device) 有限联接设备(Connected, Limited Device)。 FastslowNetw ork Unlim ited Limited (Batter y) Powe r >=512 k >=128k, <=512k ROM >=256 k >=32k, <=512k RAM CDCCLDC 远见品质 J2ME vCLDC对JAVA语言支持的特殊方面 不支持浮点数据类型 不支持JNI (Java Native Interface ) 不支持用户自定义的JAVA级的类载入器 (class loaders ) 没有反射(reflection)特性 不支持线程组(thread groups)或守护线程 (daemon threads) 不支持类实例(class instance)的终结 (finalization) 没有弱参考(weak references) 远见品质 J2ME vJ2ME API Core Package Application Lifecycle Package User Interface Package Persistence Package Networking Package 远见品质 J2ME v开发环境 JAVA 2 标准版开发包 版本1.3或者更高。 J2ME 无线开发工具包(J2MEWTK),包含编 译和测试MIDlet的工具包。 IDE ( 集成开发环境 ) 远见品质 J2ME v程序详解 所有J2ME的应用程序都要 从MIDlet类中派生 所有继承MIDlet类的子类 都要实现三个函数 startApp() pauseApp() destroyApp() 每个Midlet同时间只允许 有一个Display 远见品质 J2ME v编写并运行一个MIDlet import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class HelloWorldextends MIDletimplements CommandListener{ private Command exitCommand; private TextBoxtb; public HelloWorld(){ exitCommand=new Command("Exit",Command.EXIT,1); tb=new TextBox("Hello",“test",15,0); tb.addCommand(exitCommand); tb.setCommandListener(this); } protected void startApp(){Display.getDisplay(this).setCurrent(tb);} protected void pauseApp(){} protected void destroyApp(booleanu){} public void commandAction(Commandc,Displayabled){ if (c ==exitCommand){ destroyApp(false); notifyDestroyed(); } } } 远见品质 J2ME v J2ME的跨平台性限制 手机的屏幕尺寸不一 厂商的扩展API不统一 手机平台上实现的bug 手机性能问题 远见品质 J2ME v适用于CLDC设备的部分规范: Connected Limited Device Configuration (CLDC); JSR 30, JSR 139 CLDC 规范 Mobile Information Device Profile (MIDP); JSR 37, JSR 118 MIDP 规 范 Information Module Profile (IMP), JSR 195 IMP 规范 Java Technology for the Wireless Industry (JTWI), JSR 185 无线Java行 业规范 Wireless Messaging API (WMA); JSR 120, JSR 205 无线信息规范,提 供短信和彩信功能 Mobile Media API (MMAPI); JSR 135 移动媒体规范,提供音频视频 播放 Location API for J2ME (JSR-179) 定位规范,提供定位功能 SIP API for J2ME (JSR-180) 提供对会话发起协议的支持 Security and Trust Services API for J2ME (JSR-177) 提供网络安全与 信任的支持 Mobile 3D Graphics (JSR-184) 提供对3D绘图的支持 J2ME Web Services APIs (WSA), JSR 172 提供对Web Services的支持 Bluetooth API (JSR-82, Motorola, Java Partner Site) 提供对蓝牙的支持 远见品质 v智能手机操作系统 SymbianOS Palm OS Windows Mobile 嵌入式Linux 国内手机操作系统 远见品质 SymbianOS 远见品质 SymbianOS vSymbianOS特点 开放和基于标准 专为手持设备设计 本地编程语言大部分是C++ 高度的面向对象设计 完全的多任务 Client-Server 构架被广泛应用 事件驱动 对用户数据的可靠处理 有效的电源管理 本地化支持 远见品质 SymbianOS vSeries 60 Platform关键部件 远见品质 SymbianOS v应用基本设计思想 远见品质 SymbianOS vSymbian和Series 60 DP 2.0API 提供的引擎 功能 多媒体 WAP 协议栈 HTTP 协议栈 消息技术 多模电话 TCP/IP 红外 Bluetooth Multi-homing Session Initiation Protocol(SIP) SyncMLPresence API 应用服务 远见品质 SymbianOS vUI: Screen, Window Server, GDI, 视图, 容器和控件 应用程序创建视图, 并建立窗口和控件, 由此 发送画图命令到GDI 和Window Server GDI 和Window Server 负责将数据写到屏幕内 存(screen memory) 画图命令由active scheduler处理 信息由屏幕内存写到物理屏幕上 远见品质 SymbianOS v基本应用类 远见品质 SymbianOS vSDK和开发工具介绍 SDK Series 60 2.0 Series 60-specific APIs 通用的UI组件 Series 60 引擎 SymbianOS7.0s SDK 开发工具、例程、开发指南 开发环境 Microsoft Visual C++ 6.0或 Microsoft Visual Studio 2003 C++ .Net Metrowerks CodeWarrior Borland C++BuilderXMobileEdition AppForgeMobileVBv3.1 Emulator and debugger 远见品质 Palm OS 远见品质 Palm OS vPalm OS简介 中文化 PIM程序内置 最多的附加软件 可以和PC机协同工作 易于输入信息 安全性 单击式的使用便利性 和其他设备共享信息 有线和无线通信 自由地选择所需的硬件 携带方便 省电 远见品质 Palm OS vPalm OS开发工具介绍 编程语言 C/C++ Basic Java Others 开发环境 CodeWarrior?for Palm OS Palm OS Developer Suite PRC-Tools NS Basic Others 远见品质 Palm OS vPalm OS模拟器 完全仿真Palm设 备 运行需要ROM 自动测试 串口和TCP/TP调 试 管道调试 抓屏 vPalm OS 5仿真器 Palm OS基于Intel ARM处 理器 不是硬件模拟器 Palm OS内核由许多 DLL组成 包含Palm OS应用兼容性 环境(PACE) 运行和测试68K应用 程序 运行和测试PNO*应用 程序 *PACE Native Object 远见品质 Palm OS v创建一个Palm OS应用程序 远见品质 Palm OS vPalm OS数据库 以句柄集合的形式存放在存储堆中 数据库头 数据库名字(最多31个字符) Creator ID和类型 应用程序信息(可选) 记录列表 记录 可以通过索引或者唯一的ID来访问 属性(modified, deleted, private,busy, and category) 每条记录的最大长度为64K 远见品质 Palm OS v其它Palm OS技术-通信 红外(IrDA)(高级和低级) 交换管理器(Exchange Manager) IR、SMS、Bluetooth、Mail 串口(USB) 蓝牙(Bluetooth) 网络(TCP/IP、UDP、Berkeley sockets) 电话(Telephony) 远见品质 Palm OS v其它Palm OS技术-管道(Conduits) 桌面软件(Desktop)的插件,由HotSync程 序调用 允许Palm设备和PC交换数据 PC –标准或自定义格式 Palm设备–Palm OS数据库格式 可以用C++、Java或者COMM开发工具开发 到PalmSource网站上下载CDK 远见品质 Windows Mobile 远见品质 Windows Mobile v概述 Pocket PC SmartPhone 远见品质 Windows Mobile v平台 远见品质 Windows Mobile vSDK Windows Mobile 2003 Second Edition Smartphone2003 本机C++ 应用程序 Smartphone2003 托管代码应用程序 Pocket PC 2003 本机C++ 应用程序 Pocket PC 2003 托管代码应用程序 Windows Mobile 5.0 Windows Mobile 5.0 for Pocket PC Windows Mobile 5.0 for Smartphone 远见品质 Windows Mobile v. NET CF 概述 .NET框架扩展到设备上 .NET 精简版 跨平台特性 开发工具 Visual Studio .NET 2003/2005 快速开发 远见品质 嵌入式Linux(略) 远见品质 国内手机操作系统 远见品质 国内手机操作系统 v凯思集团的Hopen(昊鹏系统) v科银京成Delta(道系统) v波导的Doeasy(多易随系统) v在Linux开源系统上进行二次开发的 操作系统平台 宇龙的Linous(领驰系统) 南京移软的mLinux v其它…… 远见品质 相关的培训课程 远见品质 培训课程 v《BREW应用程序开发》 BREW体系架构与开发综述 使用小程序和模块编译应用程序DLL 创建新BREW 应用程序的方法。 如何处理事件,包括切换事件 电话层如何监测进入的SMS 消息 …… v《J2ME游戏开发》 J2ME体系架构与开发综述 开发入门 游戏示例分析 …… 远见品质 培训课程 v《PalmOS应用开发》 入门 创建PalmOS应用程序 PalmOS基本编程 数据存储与检索编程 网络通信编程 与PC同步的管道技术编程 …… www.farsight.com.cn 谢谢! 成功之路