|
从 FreeBSD 5.3-RELEASE 开始, 已经可以 “直接” 支持网络驱动接口规范 (NDIS)。 FreeBSD NDISulator (也被称为 Project Evil) 可以支持二进制形式的 Windows 驱动程序,并让它相信正在运行的是 Windows。 这是一个相对较新的功能,但许多测试证明, 它确实相当有效。
要使用 NDISulator, 您需要三件东西:
内核源代码
二进制形式的 Windows XP 驱动程序 (扩展名是 .SYS)
Windows XP 驱动程序配置文件 (扩展名是 .INF)
您可能需要编译 ndis(4) 袖珍端口驱动封装模块。 这一操作需要以 root 身份来完成:
# cd /usr/src/sys/modules/ndis
# make && make install
找到您的卡所需的文件。 一般来说, 您应该能在随卡的 CD 或者制造商的网站上找到。下面的例子中, 我们将使用 W32DRIVER.SYS 和 W32DRIVER.INF 这两个名字。
接下来的步骤是将二进制形式的驱动程序组装成内核模块。 要完成这一任务, 需要以 root 身份进入 if_ndis 模块的目录, 并将 Windows 驱动程序复制到这里:
# cd /usr/src/sys/modules/if_ndis
# cp /path/to/driver/W32DRIVER.SYS ./
# cp /path/to/driver/W32DRIVER.INF ./
接下来我们将使用 ndiscvt 工具来创建驱动定义的头文件 ndis_driver_data.h, 用以构建驱动程序:
# ndiscvt -i W32DRIVER.INF -s W32DRIVER.SYS -o ndis_driver_data.h
选项 -i 和 -s 分别用于指定配置和二进制形式的驱动程序。 我们使用 -o ndis_driver_data.h 参数, 因为 Makefile 在构建内核模块时会查找它。
Note: 某些 Windows 驱动程序需要一些额外的文件才能正常工作。 您可以把它们放到 ndiscvt 命令的 -f 参数后面。 请参考 ndiscvt(8) 联机手册了解更多详情。
最后, 就可以构建并安装内核模块了:
# make && make install
要使用驱动程序, 您需要加在适当的内核模块:
# kldload ndis
# kldload if_ndis
第一个命令会加载 NDIS 袖珍端口驱动封装模块, 第二个则加载实际的网卡。 请查看 dmesg(8) 的输出以了解是否在加载过程中存在错误。 如果一切正常, 您应该能看到类似下面的输出:
ndis0: <Wireless-G PCI Adapter> 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 |
|