How to install Atheros AR8132 driver on SUSE SLES-10.2

AR8132网卡的Linux版驱动可以在Atheros的官方站点上下载到,Readme中说可以支持2.6x的内核。于是我按照Reame上的步骤进行安装,结果报错了。

/root/driver/src/atl1c_main.c: In function ‘atl1c_set_rxbufsize’:
/root/driver/src/atl1c_main.c:438: error: implicit declaration of function ‘roundup’
/root/driver/src/atl1c_main.c: In function ‘atl1c_cal_tpd_req’:
/root/driver/src/atl1c_main.c:2027: error: ‘SKB_GSO_TCPV6’ undeclared (first use in this function)
/root/driver/src/atl1c_main.c:2027: error: (Each undeclared identifier is reported only once
/root/driver/src/atl1c_main.c:2027: error: for each function it appears in.)
/root/driver/src/atl1c_main.c: In function ‘atl1c_tso_csum’:
/root/driver/src/atl1c_main.c:2076: error: ‘SKB_GSO_TCPV6’ undeclared (first use in this function)
/root/driver/src/atl1c_main.c: In function ‘atl1c_init_netdev’:
/root/driver/src/atl1c_main.c:2697: error: ‘NETIF_F_TSO6’ undeclared (first use in this function)

 

 

很明显,atl1c_main.c中使用了没有定义的函数以及一些宏定义。于是偶下载了最新的内核,在/include/linux/kernel.h中可以看到roundup的定义:

#define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y))

 

在/include/linux/netdevice.h中可以看到NETIF_F_TSO6的定义:

#define NETIF_F_TSO6        (SKB_GSO_TCPV6 << NETIF_F_GSO_SHIFT)

 

在/include/linux/skbuff.h中可以看到SKB_GSO_TCPV6的定义:

enum {
    SKB_GSO_TCPV4 = 1 << 0,
    SKB_GSO_UDP = 1 << 1,

    /* This indicates the skb is from an untrusted source. */
    SKB_GSO_DODGY = 1 << 2,

    /* This indicates the tcp segment has CWR set. */
    SKB_GSO_TCP_ECN = 1 << 3,

    SKB_GSO_TCPV6 = 1 << 4,

    SKB_GSO_FCOE = 1 << 5,
};

 

 

若希望直接不修改这份驱动就能顺利编译通过,一是先升级内核,二是在有更新内核的环境下先编译。其实这两种都有很大的风险,尤其是当前系统已经部属了其他应用的情况下,升级内核可能会导致不可预测的后果。鉴于编译时错误的地方不是很多,丢失的宏定义也很简单,我采取简单的修改驱动来修复编译错误。

 

在atl1c.h中添加

#define dev_notice(dev, format, arg...)     dev_printk(KERN_NOTICE , dev , format , ## arg)
enum {
        /* This indicates the tcp segment has CWR set. */
        SKB_GSO_TCP_ECN = 1 << 3,

        SKB_GSO_TCPV6 = 1 << 4,

        SKB_GSO_FCOE = 1 << 5,
};
#define NETIF_F_TSO6    (SKB_GSO_TCPV6 << NETIF_F_GSO_SHIFT)
#define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y))

 

 

如何在SUSE中让驱动自动加载?可以在系统启动时使用命令modprobe来加载驱动,但在SUSE中最简单的方式是在/etc/sysconfig/hardware目录下添加设备描述文件,实现步骤

1、先找到设备的描述信息,如网卡使用pci bus。可以使用ls -l /sys/class/net/ethx/device看到该网卡使用了哪个pci通道。也可以使用lspci命令来了解。

2、参照/etc/sysconfig/hardware目录下的文件的命名规则,添加一个文件。比如我当前主机环境下的文件名是:hwcfg-bus-pci-0000:02:00.0 ,内容:

 

在atl1c.h中添加

MODULE='atl1e'
MODULE_OPTIONS=''
STARTMODE='auto'

 

完成后重启测试。。。。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值