免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1716 | 回复: 0
打印 上一主题 下一主题

升级了kernel到2.6.32以后无线网卡问题解决 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-05 22:56 |只看该作者 |倒序浏览


       
        文件:compat-wireless-2.6.32-rc6.tar.bz2
        大小:1946KB
        下载:
下载
       
                               
git pull了一下最新的代码,然后make modules_install install以后,重启系统以后发现无线网卡使用不了,这个时候就需要解决问题
首先下载了一个压缩包,编译的时候,在/drivers/net/wireless/ipw2x00/ipw2100.c的6060行,遇到了没有成员的问题,于是将该文件copy到linux-2.6源代码目录下,然后建立一下源代码tags表,接着就用vim逐级查进去
6024 /* Look into using netdev destructor to shutdown ieee80211? */
6025
6026 static struct net_device *ipw2100_alloc_device(struct pci_dev *pci_dev,
6027                            void __iomem * base_addr,
6028                            unsigned long mem_start,
6029                            unsigned long mem_len)
6030 {
6031     struct ipw2100_priv *priv;
6032     struct net_device *dev;
6033
6034     dev = alloc_ieee80211(sizeof(struct ipw2100_priv), 0);
6035     if (!dev)
6036         return NULL;
6037     priv = libipw_priv(dev);
6038     priv->ieee = netdev_priv(dev);
6039     priv->pci_dev = pci_dev;
6040     priv->net_dev = dev;
6041
6042     priv->ieee->hard_start_xmit = ipw2100_tx;
6043     priv->ieee->set_security = shim__set_security;
6044
6045     priv->ieee->perfect_rssi = -20;
6046     priv->ieee->worst_rssi = -85;
6047
6048 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29))
6049     dev->netdev_ops = &ipw2100_netdev_ops;
6050 #else
6051     dev->open = ipw2100_open;
6052     dev->stop = ipw2100_close;
6053     dev->init = ipw2100_net_init;
6054     dev->tx_timeout = ipw2100_tx_timeout;
6055     dev->set_mac_address = ipw2100_set_address;
6056 #endif
6057
6058     dev->ethtool_ops = &ipw2100_ethtool_ops;
6059     dev->wireless_handlers = &ipw2100_wx_handler_def;
6060 //  modify by ChinaUnix T-Bagwell
6061     //  priv->wireless_data.ieee80211 = (struct ieee80211_device *) priv->ieee;
6062     dev->wireless_data = &priv->wireless_data;
6063     dev->watchdog_timeo = 3 * HZ;
6064     dev->irq = 0;
6065
6066     dev->base_addr = (unsigned long)base_addr;
6067     dev->mem_start = mem_start;
6068     dev->mem_end = dev->mem_start + mem_len - 1;
6069
6070     /* NOTE: We don't use the wireless_handlers hook
6071      * in dev as the system will start throwing WX requests
6072      * to us before we're actually initialized and it just
6073      * ends up causing problems.  So, we just handle
6074      * the WX extensions through the ipw2100_ioctl interface */
6075
6076     /* memset() puts everything to 0, so we only have explicitly set
6077      * those values that need to be something else */
6078
6079     /* If power management is turned on, default to AUTO mode */
6080     priv->power_mode = IPW_POWER_AUTO;
6081
其中6061行代码以前没有被注释掉,我这里给注释掉了,为了能够暂时使用,所以这里注掉了,以后遇到问题再说,没问题就先放着
为什么我注掉他呢?跟进去看一下
首先看priv这个结构
490 struct ipw2100_priv {
491     
492     int stop_hang_check;    /* Set 1 when shutting down to kill hang_check */
493     int stop_rf_kill;   /* Set 1 when shutting down to kill rf_kill */
494     
495     struct libipw_device *ieee;
496     unsigned long status;
497     unsigned long config;
498     unsigned long capability;
499     
500     /* Statistics */
501     int resets;
502     int reset_backoff;
503
504     /* Context */
505     u8 essid[IW_ESSID_MAX_SIZE];
506     u8 essid_len;
507     u8 bssid[ETH_ALEN];
508     u8 channel;
509     int last_mode;
510
511     unsigned long connect_start;
512     unsigned long last_reset;
513
514     u32 channel_mask;
515     u32 fatal_error;
516     u32 fatal_errors[IPW2100_ERROR_QUEUE];
517     u32 fatal_index;
518     int eeprom_version;
519     int firmware_version;
520     unsigned long hw_features;
521     int hangs;
522     u32 last_rtc;
523     int dump_raw;       /* 1 to dump raw bytes in /sys/.../memory */
524     u8 *snapshot[0x30];
525
526     u8 mandatory_bssid_mac[ETH_ALEN];
527     u8 mac_addr[ETH_ALEN];
528
529     int power_mode;
530
531     int messages_sent;
532
533     int short_retry_limit;
534     int long_retry_limit;
535
536     u32 rts_threshold;
537     u32 frag_threshold;
538
539     int in_isr;
540
541     u32 tx_rates;
542     int tx_power;
543     u32 beacon_interval;
544
545     char nick[IW_ESSID_MAX_SIZE + 1];
546
547     struct ipw2100_status_queue status_queue;
548
549     struct statistic txq_stat;
550     struct statistic rxq_stat;
551     struct ipw2100_bd_queue rx_queue;
552     struct ipw2100_bd_queue tx_queue;
553     struct ipw2100_rx_packet *rx_buffers;
554
555     struct statistic fw_pend_stat;
556     struct list_head fw_pend_list;
557
558     struct statistic msg_free_stat;
559     struct statistic msg_pend_stat;
560     struct list_head msg_free_list;
561     struct list_head msg_pend_list;
562     struct ipw2100_tx_packet *msg_buffers;
563
564     struct statistic tx_free_stat;
565     struct statistic tx_pend_stat;
566     struct list_head tx_free_list;
567     struct list_head tx_pend_list;
568     struct ipw2100_tx_packet *tx_buffers;
569
570     struct ipw2100_ordinals ordinals;
571
572     struct pci_dev *pci_dev;
573
574     struct proc_dir_entry *dir_dev;
575
576     struct net_device *net_dev;
577     struct iw_statistics wstats;
578
579     struct iw_public_data wireless_data;
580
581     struct tasklet_struct irq_tasklet;
582
583     struct workqueue_struct *workqueue;
584     struct delayed_work reset_work;
585     struct delayed_work security_work;
586     struct delayed_work wx_event_work;
587     struct delayed_work hang_check;
588     struct delayed_work rf_kill;
589     struct work_struct scan_event_now;
590     struct delayed_work scan_event_later;
591
592     int user_requested_scan;
593
594     /* Track time in suspend */
595     unsigned long suspend_at;
596     unsigned long suspend_time;
597
598     u32 interrupts;
599     int tx_interrupts;
600     int rx_interrupts;
601     int inta_other;
602
603     spinlock_t low_lock;
604     struct mutex action_mutex;
605     struct mutex adapter_mutex;
606
607     wait_queue_head_t wait_command_queue;
608 };
里面包含下一个结构
但是这个wireless结构里就没有ieee80211成员了
421 struct iw_public_data {
422     /* Driver enhanced spy support */
423     struct iw_spy_data *        spy_data;
424     /* Legacy structure managed by the ipw2x00-specific IEEE 802.11 layer */
425     struct libipw_device *      libipw;
426 };
427
但是这个iw_public_data在我的linux-2.6的源代码里,我实在不忍心修改,呵呵,就改一下驱动的代码吧。
               
                [root@localhost linux-2.6]# lspci
00:00.0 Host bridge: Intel Corporation Mobile 4 Series Chipset Memory Controller Hub (rev 07)
00:02.0 VGA compatible controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)
00:02.1 Display controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)
00:03.0 Communication controller: Intel Corporation Mobile 4 Series Chipset MEI Controller (rev 07)
00:19.0 Ethernet controller: Intel Corporation 82567LM Gigabit Network Connection (rev 03)
00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 03)
00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 03)
00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 03)
00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 03)
00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 03)
00:1c.1 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 2 (rev 03)
00:1c.3 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 4 (rev 03)
00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03)
00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03)
00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03)
00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 93)
00:1f.0 ISA bridge: Intel Corporation ICH9M-E LPC Interface Controller (rev 03)
00:1f.2 IDE interface: Intel Corporation ICH9M/M-E 2 port SATA IDE Controller (rev 03)
00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 03)
03:00.0 Network controller: Intel Corporation PRO/Wireless 5100 AGN [Shiloh] Network Connection
[root@localhost linux-2.6]#
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/101042/showart_2087350.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP