首页 > 代码库 > 汉澳sinox通过ndis运行windows驱动程序

汉澳sinox通过ndis运行windows驱动程序

汉澳sinox不仅能通过wine运行windows应用程序,还能通过ndis运行windows驱动程序

 

汉澳sinox使用 Windows NDIS 驱动程序

具体实现方法是用ndisgen把windows驱动程序sys驱动程序转换成内核模块ko文件,然后让系统载入ko模块就能用了。ndis驱动负责模拟转换工作。

得益于 Bill Paul (wpaul) 的工作, Sinox已经可以 “直接地” 支持 网络驱动接口标准 (NDIS, Network Driver Interface Specification) 了。 Sinox NDISulator (也被称为 Project Evil) 可以支持二进制形式的 Windows 驱动程序, 并让它相信正在运行的是 Windows。 由于 ndis(4) 驱动使用的是用于 Windows 的二进制形式的驱动, 因此它只能在 i386 和 amd64 系统上使用。

注意: ndis(4) 驱动在设计时主要提供了 PCI、 CardBus 和 PCMCIA 设备的支持, 而 USB 设备目前则没有提供支持,所以usb无线网卡没得用、

要使用 NDISulator, 您需要三件东西:
1.
内核的源代码 ,已经有

2.
二进制形式的 Windows XP 驱动程序 (扩展名为 .SYS)

3.
Windows XP 驱动程序配置文件 (扩展名为 .INF)

您需要找到用于您的卡的这些文件。 一般而言, 这些文件可以在随卡附送的 CD 或制造商的网站上找到。 在下面的例子中, 我们用 W32DRIVER.SYS 和 W32DRIVER.INF 来表示这些文件。

注意: 不能在 amd64 上使用 Windows/i386 驱动程序。 必须使用 Windows/amd64 驱动才能在其上正常工作。

  接下来的步骤是将二进制形式的驱动程序组装成内核模块。 要完成这一任务, 需要以 root 用户的身份执行 ndisgen(8):
# ndisgen /path/to/W32DRIVER.INF /path/to/W32DRIVER.SYS

  ndisgen(8) 是一个交互式的程序, 它会提示您输入所需的一些其他的额外信息; 这些工作完成之后, 它会在当前目录生成一个内核模块文件, 这个文件可以通过下述命令来加载:
# kldload ./W32DRIVER.ko

  除了刚刚生成的内核模块之外, 还必须加载 ndis.ko 和 if_ndis.ko 这两个内核模块, 在您加载需要 ndis(4) 的模块时, 通常系统会自动完成这一操作。 如果希望手工加载它们, 则可以使用下列命令:
# kldload ndis
# kldload if_ndis

  第一个命令会加载 NDIS 袖珍端口驱动封装模块, 而第二条命令则加载实际的网络接口。

  现在请查看 dmesg(8) 来了解是否发生了错误。 如果一切正常, 您会看到类似下面的输出:
ndis0: mem 0xf4100000-0xf4101fff irq 3 at device 8.0 on pci1
ndis0: NDIS API version: 5.0
ndis0: Ethernet address: 0a:b1:2c:d3:4e:f5
ndis0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
ndis0: 11g rates: 6Mbps 9Mbps 12Mbps 18Mbps 36Mbps 48Mbps 54Mbps

  这之后, 就可以像使用其它网络接口 (例如 dc0) 一样来使用 ndis0 设备了。

  与任何其它模块一样, 您也可以配置系统, 令其在启动时自动加载 NDIS 模块。 首先, 将生成的模块 W32DRIVER.ko 复制到 /boot/modules 目录中。 接下来, 在 /boot/loader.conf 中加入:
W32DRIVER_load=”YES”

汉澳sinox通过ndis运行windows驱动程序