История изменений
Исправление Obezyan, (текущая версия) :
Вы не указали версию ядра. Проверьте, есть ли макрос NET_NAME_UNKNOWN
, если нет то попробуйте:
#ifndef NET_NAME_UNKNOWN
#undef alloc_netdev
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
#define alloc_netdev(sizeof_priv, name, name_assign_type, setup) alloc_netdev(sizeof_priv, name, setup)
#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)
#define alloc_netdev(sizeof_priv, name, name_assign_type, setup) alloc_netdev_mq(sizeof_priv, name, setup, 1)
#else
#define alloc_netdev(sizeof_priv, name, name_assign_type, setup) alloc_netdev_mqs(sizeof_priv, name, setup, 1, 1)
#endif
#endif
Если же есть и все равно не работает, то попробуйте вручную для теста заполнить dev_addr в setup() функции:
/* Fill in the MAC address with '00:01:02:03:04:05' */
for (i = 0; i < ETH_ALEN; ++i) {
dev->dev_addr[i] = (char)i;
}
Просто чтобы убедиться что проблема только в этом, а не глобальнее.
Вы также ничего не указали о типе устройства к которому пишете сетевой драйвер, подозреваю что обычный ethernet. В этом случае логично использовать вызов alloc_etherdev() который по идее сам должен вызвать ether_setup() и заполнить dev_addr MAC адресом интерфейса.
И сравните сетевые карты, на машинах там где работает код и там где нет, я к тому что это может влиять.
Исходная версия Obezyan, :
Вы не указали версию ядра. Проверьте, есть ли макрос NET_NAME_UNKNOWN
, если нет то попробуйте:
#ifndef NET_NAME_UNKNOWN
#undef alloc_netdev
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
#define alloc_netdev(sizeof_priv, name, name_assign_type, setup) alloc_netdev(sizeof_priv, name, setup)
#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)
#define alloc_netdev(sizeof_priv, name, name_assign_type, setup) alloc_netdev_mq(sizeof_priv, name, setup, 1)
#else
#define alloc_netdev(sizeof_priv, name, name_assign_type, setup) alloc_netdev_mqs(sizeof_priv, name, setup, 1, 1)
#endif
#endif
Если же есть и все равно не работает, то попробуйте вручную для теста заполнить dev_addr в setup() функции:
/* Fill in the MAC address with '00:01:02:03:04:05' */
for (i = 0; i < ETH_ALEN; ++i) {
dev->dev_addr[i] = (char)i;
}
Просто чтобы убедиться что проблема только в этом, а не глобальнее.
Вы также ничего не указали о типе устройства к которому пишете сетевой драйвер, подозреваю что обычный ethernet. В этом случае логично использовать вызов alloc_etherdev() который по идее сам должен вызвать ether_setup() и заполнить dev_addr MAC адресом интерфейса.