实际上在WinCE上开发网络驱动,比如设计一个NIC驱动, 大多数情况,是从XP移植NDIS Miniport驱动(小端口驱动)到WinCE。什么是ndis?Ndis做什么用的? 什么是miniport驱动?

什么是NDIS? 也许你很早就听说过NDIS:Network Driver Interface Specificatiion网络设备接口规范。我总结了如下:

1. NDIS是一个协议,标准,规范。 从win95的3.0版本,到winxp的5.1版本,到vista的6.0版本, wince5是5.1版本。

2. NDIS也是一组API,也是一个库ndis.dll。 他为网络驱动定义了一组标准API。并且提供了运行时调用支持。编译驱动时候,常见的是驱动需要静态的链接一个ndis.lib。(关于dll的lib和直接使用dll性质一样,差别我就不多说了。)

3. NDIS也是一个框架结构。一个architecture。它描述了各个驱动的接口。驱动都是在ndis这个框架里面实现。

4. NDIS一般也是一个有实体存在并且在系统运行的模块。称为wrapper。比如在xp下面是ndis.sys,在ce下面是ndis.dll.甚至linux下面也有NDISWrapper, NDISulator。

因为上面特点,ndis驱动可以是平台无关的,可以是源码兼容的。用c编码后重新编译可以在任何ndis环境运行。比如 Xp下面的ndis驱动重新编译后可以在ce下面使用。Linux也有一个开源的NDISWrapper,在这个基础上也可以使用win的ndis驱动。

连linux都用ndis,Wince有什么理由不用?是的,wince遵循的ndis规范是NT里面使用的ndis的一个子集。 实现形式是ndis.dll, 被设计成一个流驱动的形式, 在boot时候由device.exe加载,前缀是NDS。另外wince也实现了ndisuio组件, ndisuio被设计成一个ndis的协议层驱动, export出流接口给应用。此外还提供了一个netlog功能, 他提供netlog.exe和netlogctl.ext工具,可以监视网络流量等等信息。上面说的3个组件在pb里面对应的名称是Network Driver Architecture(NDIS), NDUS User-mode I/O Driver, NDIS Packet Capturing DLL。在catalog窗口里面容易找到他们。

转自:http://chenyq2008.spaces.live.com/blog/cns!F73164AC8D0D8D50!290.entry

达人眼中的WINCE网络驱动的更多相关文章

  1. Linux网络驱动--snull

    snull是<Linux Device Drivers>中的一个网络驱动的例子.这里引用这个例子学习Linux网络驱动. 因为snull的源码,网上已经更新到适合最新内核,而我自己用的还是 ...

  2. Windows网络驱动、NDIS驱动(微端口驱动、中间层驱动、协议驱动)、TDI驱动(网络传输层过滤)、WFP(Windows Filtering Platform)

    catalog . 引言 . Windows 2000网络结构和OSI模型 . NDIS驱动 . NDIS微端口驱动编程实例 . NDIS中间层驱动编程实例 . NDIS协议层驱动编程实例 . TDI ...

  3. 网络驱动移植之解析Linux网络驱动的基本框架

    内核源码:linux-2.6.38.8.tar.bz2 概括而言,编写Linux网络驱动其实只要完成两件事即可,一是分配并初始化网络设备,二是注册网络设备. 1.分配并初始化网络设备 动态分配网络设备 ...

  4. Linux 网卡驱动学习(一)(分析一个虚拟硬件的网络驱动样例)

    在Linux,网络分为两个层,各自是网络堆栈协议支持层,以及接收和发送网络协议的设备驱动程序层. 网络堆栈是硬件中独立出来的部分.主要用来支持TCP/IP等多种协议,网络设备驱动层是连接网络堆栈协议层 ...

  5. Linux 网卡驱动学习(二)(网络驱动接口小结)

    [摘要]前文我们分析了一个虚拟硬件的网络驱动例子,从中我们看到了网络设备的一些接口,其实网络设备驱动和块设备驱动的功能比较类似,都是发送和接收数据包(数据请求).当然它们实际是有很多不同的. 1.引言 ...

  6. 网络驱动移植之net_device结构体及其相关的操作函数

    内核源码:Linux-2.6.38.8.tar.bz2 在Linux系统中,网络设备都被抽象为struct net_device结构体.它是网络设备硬件与上层协议之间联系的接口,了解它对编写网络驱动程 ...

  7. 网络驱动之net_device结构体

    在Linux系统中,网络设备都被抽象为struct net_device结构体.它是网络设备硬件与上层协议之间联系的接口,了解它对编写网络驱动程序非常有益,所以本文将着手简要介绍linux-2.6.3 ...

  8. uboot 网络驱动模型

    原文:https://blog.csdn.net/zhouxinlin2009/article/details/45390065 UBOOT的PHYCHIP配置 PHYCHIP的配置位于 includ ...

  9. Linux网络驱动架构

    网络设备介绍 网络设备是计算机体系结构中必不可少的一部分,处理器如果想与外界通信,通常都会选择网络设备作为通信接口.众所周知,在 OSI(Open Systems Interconnection,开放 ...

随机推荐

  1. ETM and PTM

    ETM:embedded Trace Macrocell PTM:Program Flow Trace Macrocell ETM-A7 macrocell提供Cortex-A7 MPcore的ins ...

  2. 链接库lib和dl的概念,加载方式的区别

    使用LR进行基于windows socket协议做接口测试,只提供了lr_load_dll方法来动态加载动态链接库.之前学习阶段,对TinyXML的学习,使用的静态链接库,当时在程序调用的时候方法也跟 ...

  3. RSYNC--数据迁移、备份

    前言 一台Solaris主机要下线了,准备将数据迁移至一台AIX主机上,可是在Solaris主机上有一个文件系统有1200万个小文件,因为是跨平台的数据迁移,采用磁盘底层复制无法进行,采用数据备份恢复 ...

  4. 在路由器 RT-AC68U 使用自定义 DDNS 用 3322.org 动态域名的方法

    0.使用华硕的第三方固件 -- 梅林固件 , 具体更新固件方法不在本主题述说 1.打开 jffs, 以便启动时可以自动执行脚本 2.在 /jffs/scripts 下新建 ddns-start 文件. ...

  5. 为 Macbook 安装 enca 命令

    enca 是个查看.转换编码的开源软件, 地址: http://dl.cihar.com/enca/ 安装的步骤比安装 wget 简单多了: 1.用 wget 获取最新的enca 的 tar.gz 的 ...

  6. TI CC2541的GPIO引脚设置.

    P1SEL寄存器, 0xF4, 功能选择用的, 0表示GPIO口, 1表示外设.

  7. spin_lock、spin_lock_irq、spin_lock_irqsave区别【转】

    转自:http://blog.csdn.net/luckywang1103/article/details/42083613 void spin_lock(spinlock_t *lock); voi ...

  8. plsql登录弹白框

    环境:使用免安装版plsql,装有oracle服务端,plsql内有内置的oracle客户端,且tns配置正确. 问题:plsql登录弹白框 解决: 1.将oracle服务端的tns配置成与plsql ...

  9. React Native学习笔记-1:JSC profiler is not supported.

    新建React-Native工程,直接编译运行报错,控制台错误信息如下: 2016-02-22 16:49:47.317 [info][tid:com.facebook.React.JavaScrip ...

  10. Python包管理工具介绍

    常见的包管理工具及关系 setuptools -->distribute easy_install-->pip 1.distribute distribute是对标准库disutils模块 ...