LINUX.ORG.RU

История изменений

Исправление 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 адресом интерфейса.