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
谢谢!
成功之路