Архив метки: Запоминалки

Как собрать драйвера для e1000 от яндекса в FreeBSD 8.1

При линковке ядра с драйвером этой версии возникает следующая ошибка:

if_igb.o(.text+0x372e): In function `igb_setup_vlan_hw_support':
/usr/pfSensesrc/src/sys/dev/e1000/if_igb.c:4544: undefined reference to `e1000_v
fta_set_vf'
if_igb.o(.text+0x975d): In function `igb_ioctl':
/usr/pfSensesrc/src/sys/dev/e1000/if_igb.c:1833: undefined reference to `e1000_p
romisc_set_vf'
if_igb.o(.text+0x357e): In function `igb_set_promisc':
/usr/pfSensesrc/src/sys/dev/e1000/if_igb.c:1811: undefined reference to `e1000_p
romisc_set_vf'
if_igb.o(.text+0x37a9): In function `igb_setup_vlan_hw_support':
/usr/pfSensesrc/src/sys/dev/e1000/if_igb.c:4551: undefined reference to `e1000_r
lpml_set_vf'
e1000_api.o(.text+0xc6d): In function `e1000_setup_init_funcs':
/usr/pfSensesrc/src/sys/dev/e1000/e1000_api.c:357: undefined reference to `e1000
_init_mbx_ops_generic'
e1000_api.o(.text+0xce3):/usr/pfSensesrc/src/sys/dev/e1000/e1000_api.c:407: undefined reference to `e1000_init_function_pointers_vf'
*** Error code 1
1 error
*** Error code 2
1 error
*** Error code 2
1 error

Дело в том, что в фре выше 8.0 в стандартном драйвере исчезли два исходника e1000_vf и e1000_mbx, но в версии от яндекса они всё еще используются.
Для корректной сборки необходимо внести изменения в следующие файлы:

1. /usr/src/sys/conf/files

> dev/e1000/e1000_vf.c          optional em | igb \
>       compile-with "${NORMAL_C} -I$S/dev/e1000"
> dev/e1000/e1000_mbx.c         optional em | igb \
>       compile-with "${NORMAL_C} -I$S/dev/e1000"

2. /usr/src/sys/modules/em/Makefile

< COMMON_SHARED = e1000_api.c e1000_phy.c e1000_nvm.c e1000_mac.c e1000_manage.c
---
> COMMON_SHARED = e1000_api.c e1000_phy.c e1000_nvm.c e1000_mac.c \
>               e1000_manage.c e1000_vf.c e1000_mbx.c

3. /usr/src/sys/modules/igb/Makefile

< SHARED_SRCS += e1000_82575.c
---
> SHARED_SRCS += e1000_82575.c e1000_vf.c e1000_mbx.c

Благодарим Andy52280 с форума nag.ru