martes, 21 de agosto de 2007

Drivers no nativos de red en FreeBSD

Un post que rescato del antiguo blog, que me parece indispensable. Pongo a modo de ejemplo tarjetas WiFi ® PCI, que NO están soportadas de forma nativa por FreeBSD. Aunque aclaro antes de nada, todo es posible solo pido antes de hacer preguntas, consulteis Google o las famosas Wikis, así que paciencia y mirar, solo pretendo dejar que es posible usar un driver no nativo de FreeBSD en ella. Vamos a ello, En este caso como hablamos de tarjetas Wireless PCI primero es imprescindible saber si hay algun driver o no controlandolo, para ello como root lo miramos:
# pciconf -lv
skc0@pci0:9:0: class=0x020000 card=0x80eb1043
chip=0x170010b7 rev=0x12 hdr=0x00
vendor = '3COM Corp, Networking Division'
device = '3C940 and 3C2000 Gigabit
Ethernet PCI CODEC?'
class = network
subclass = ethernet
ndis0@pci0:13:0: class=0x028000 card=0x00131737
chip=0x432014e4 rev=0x03hdr=0x00
vendor = 'Broadcom Corporation'
device = 'BCM4306 802.11b/g Wireless LAN

Si no tenemos veremos en pciX la palabra noneX lo que nos indica que no hay ningún driver, si le echáis un vistazo por encima al Handbook de FreeBSD veréis como hace mención a ello. (Recuerdo que el Handbook es la Biblia de FreeBSD):

"....This is a special compatibility module for allowing Windows NDIS miniport network
drivers to be used with FreeBSD/x86. This provides _binary_ NDIS compatibility (not
source): you can run NDIS driver code, but you can’t build it...There are three main
parts:"

Hay un buen trozo donde hace referencias claramente al proyecto NDISulator Project. Iré al grano, ya que prefiero que para poder entenderlo, os leéis el Handbook y no hay excusas porque está en castellano :) Ahora como root:
# cd /sys/modules/ndis
# make
# make install

Ahora del cd original de la tarjeta wifi en este caso copiamos el *.INF y el *.SYS al directorio /sys/modules/if_ndis, y ponemos nombres ficticios que deberán de ser reemplazados por los correspondientes de la PCI Wifi. Los llamamos W32DRIVER.SYS y W32DRIVER.INF, y ejecutamos:
# cd /sys/modules/if_ndis
# cp /larutadondelocolocamos/W32DRIVER.SYS ./
# cp /larutadondelocolocamos/W32DRIVER.INF ./

Ahora es cuando hacemos uso del NDISulator para crear la cabecera ndis_driver_data.h necesario para hacer el driver.
# ndiscvt -i W32DRIVER.INF -s W32DRIVER.SYS -o
ndis_driver_data.h

# make
# make install

# kldload ndis
# kldload if_ndis

El kldload lo usamos para cargar en el kernel los módulos. Si todo ha ido bien deberíamos de ver como ahora si que reconoce la tarjeta mediante el comando demsg | more para ver que a quedado todo correcto. Eso es todo pero repito no hay excusas mirar bien el Handbook que hace referencia a ello y esta en castellano y para dudas san google !!!!

No hay comentarios: