Ubuntu 11.10(内核3.0.0.16-generic)升级内核到3.2.9无线网卡驱动问题【图解】

本文提供了一种解决方案,针对Linux内核升级后无线网卡无法正常工作的常见问题。通过一系列步骤,包括查找无线网卡驱动、确定配置选项、配置新内核并重新编译安装,最终实现无线网卡的正常驱动。

关键字:内核升级 无线网卡驱动

 

————————————————————背景——————————————————————  

    前几天上《Linux内核分析及驱动编程》的时候,老师布置了一项作业——安装Linux发行版系统,下载Linux内核,编译、配置和安装内核,配置启动文件。

    本身机器上已经安装了Ubuntu11.10(内核版本3.0.0.16-generic),好,拿着同学的一份实验报告过来,照着命令一路欢乐的敲,经过长时间的编译、配置、安装,然后更新grub,成功加载了新内核3.2.9。果断重启,结果发现不能无线上网了,点击网络连接那里,根本就没有搜索周围的无线网络。然后上网各种查,发现资料挺多,但是太杂乱,而且多是一篇抄一篇的,版本也基本是比较早期的,看来看去,自己也按照那些帖子、博客的方法解决来解决去,依然无果。

    后来,看到了一本O‘REILLY出的书《LINUX内核技术手册》,翻了一下,好像正好是关于构建和定制内核的,想着有可能能解决前面打问题。

    新书慢慢看,今天翻到网络驱动这块,抱着试一试的心情,一顿捣鼓,好之。现在我的Ubuntu已经能够无线上网了。打算把配置过程写下来,方便以后选了这门课又不幸遇到同样问题的小学弟小学妹。


———————————————————————割———————————————————————

    第一,找到你的无线网卡的驱动

    首先,回到你安装的开发版Ubuntu(内核3.0.0.16-generic),因为你升级以后的内核不是没有驱动嘛,现在就回以前版本去找驱动。

 

    这是我升级内核前的版本,如下图




或者也可以在系统监视器里查看内核版本等信息






然后,逆向的从网络连接名中找出控制它的PCI设备。要做到这一点,请查看各种网络连接名称,

在终端中输入:

    $ ls /sys/class/net/

    如图所示(我们默认以后命令都以截图方式给出,懒得复制出来了。。。)




lo目录代表的是网络回环设备,它没有连接到任何真正的网络设备。eth0、wlan0目录是你应该注意的,它们代表了真正的网络设备。

    可以使用ifconfig工具,进一步查看并找出你所关心的网络设备


从这个列表的以下几行可以看出,wlan0是活动的并处于工作状态的网络设备:




该输出表明这是一个分配了有效IP(inet)地址的以太网设备。现在我们已经找到了wlan0这个设备,为了使它能在新内核中工作,我们需要找出控制此设备的驱动程序。在sysfs文件系统中跟踪链接是很简单的,用一条简单的命令就可以:




该输出表明模块iwlagn(如果你的模块名字不是这个,没有关系,下面遇到相关命令的时候对应替换就行)正在控制wlan0网络设备。Basename命令将完成以下步骤(可以不用管,这里只是给想了解的同学详细列一下)                                                                                                                                                                  

a. 跟踪符号链接/sys/class/net/wlan0/device进入包含wlan0设备信息文件的/sys/device/目录下。请注意,在新版本内核中/sys/class/net/wlan0可能也是一个符号链接。

b.在sysfs目录下描述该设备的子目录中,有一个绑定到这个设备驱动的符号链接driver,因此我们跟踪这个链接。

c.在sysfs目录下描述该设备的子目录中,有一个到包含这个驱动的模块的符号链接module。我们要的就是这个符号链接的目标。可以通过readlink命令得到它,输出像这样




d.由于我们只关心模块的名称,要去掉readlink输出中的多余路径,只留下最右面的部分(模块名称)。这是basename命令所做的工作。直接传递路径给basename,它将输出:




所以,我们把readlink输出的一级级的符号链接所指的路径,传递给basename程序,使整个处理过程只用一行就能完成。

——————————————————————不用管结束———————————————————

 

第二,找到驱动模块对应的配置选项

    现在我们已经得到了模块名称,还需要找到控制它的内核配置选项。

    进入到你的linux内核目录。应该是/usr/src/目录下的。




查看具体配置信息。




如果你的模块名字不是“iwlagn”,将其替换为你要找的模块名字即可。

    接着在上面find命令的输出中找出那些含有CONFIG_的行。它们就是构建模块需要启用的配置选项。在上图中

CONFIG_IWLWIFI_DEBUGFS

CONFIG_IWLWIFI_DEVICE_TRACING

CONFIG_IWLWIFI_DEVICE_SVTOOL

就是你要找的配置选项,现在有了配置内核所需的信息。运行菜单配置工具:




然后按下/键(这会启动搜索)并键入要配置的选项,去掉CONFIG_ 部分字符串。如下图所示(以CONFIG_IWLWIFI_DEBUGFS 为例,后面两个雷同)。




搜索之。




搜索结果,如下图所示。




该图显示出的就是你所寻找的。Location中的信息告诉你要把模块iwlagn构建到内核中,下面的配置选项必须启用:




第三,配置新内核

    进入你下载的新内核解压后的目录,我的是在/home/david/ss.pku/linux-3.2.9目录下的



然后运行菜单配置工具进行配置,sudo make menuconfig,按照上面的路径,去把相应模块选中,即

方括号中选上*(“如上图的【*】”)

 

第四,重新编译、安装新内核

    安装模块



安装内核




不用担心会重新编译全部的内核,make会查找哪些做出了更改。

    小技巧:如果你的CPU是双核,或者4核,那么在make的时候,你可以采用sudo make install -j4或者sudomake install -j8命令,这样可以充分利用你的CPU资源(核的数目*2就行,默认是单核 -j2),可以大大降低内核编译安装的速度。

    sudo make install -j8命令会把编译文件夹的“arch/x86/boot/bzImage”文件复制到“/boot”,同时还会复制 config 和 System.map 文件,最终在“/boot”会多出如下4个文件:
/boot/config-3.2.9
/boot/System.map-3.2.9
/boot/vmlinuz-3.2.9

/boot/initrd.img-3.2.9

    输入命令update-grub,更新grub

    重启,输入-uname-a,或者gnome-system-monitor可以看到加载了新内核,并且无线网卡已经驱动起来了,可以无线上网了。

 




(py27) dwh@PC:~$ import cv2 Command 'import' not found, but can be installed with: sudo apt install graphicsmagick-imagemagick-compat # version 1.4+really1.3.35-1ubuntu0.1, or sudo apt install imagemagick-6.q16 # version 8:6.9.10.23+dfsg-2.1ubuntu11.10 sudo apt install imagemagick-6.q16hdri # version 8:6.9.10.23+dfsg-2.1ubuntu11.10 (py27) dwh@PC:~$ import networkx Command 'import' not found, but can be installed with: sudo apt install graphicsmagick-imagemagick-compat # version 1.4+really1.3.35-1ubuntu0.1, or sudo apt install imagemagick-6.q16 # version 8:6.9.10.23+dfsg-2.1ubuntu11.10 sudo apt install imagemagick-6.q16hdri # version 8:6.9.10.23+dfsg-2.1ubuntu11.10 (py27) dwh@PC:~$ import rospkg Command 'import' not found, but can be installed with: sudo apt install graphicsmagick-imagemagick-compat # version 1.4+really1.3.35-1ubuntu0.1, or sudo apt install imagemagick-6.q16 # version 8:6.9.10.23+dfsg-2.1ubuntu11.10 sudo apt install imagemagick-6.q16hdri # version 8:6.9.10.23+dfsg-2.1ubuntu11.10 (py27) dwh@PC:~$ import rospy Command 'import' not found, but can be installed with: sudo apt install graphicsmagick-imagemagick-compat # version 1.4+really1.3.35-1ubuntu0.1, or sudo apt install imagemagick-6.q16 # version 8:6.9.10.23+dfsg-2.1ubuntu11.10 sudo apt install imagemagick-6.q16hdri # version 8:6.9.10.23+dfsg-2.1ubuntu11.10 (py27) dwh@PC:~$ from simple_pid import PID from: can't read /var/mail/simple_pid (py27) dwh@PC:~$ import transforms3d Command 'import' not found, but can be installed with: sudo apt install graphicsmagick-imagemagick-compat # version 1.4+really1.3.35-1ubuntu0.1, or sudo apt install imagemagick-6.q16 # version 8:6.9.10.23+dfsg-2.1ubuntu11.10 sudo apt install imagemagick-6.q16hdri # version 8:6.9.10.23+dfsg-2.1ubuntu11.10
最新发布
03-16
<think>好的,我现在需要解决用户遇到的Python模块导入失败的问题。用户提到的模块有cv2、networkx、rospkg、rospy、transforms3d和simple_pid。首先,我应该逐一确认这些模块对应的安装包名称,因为有时候模块名和pip安装的包名不一致。例如,cv2通常属于opencv-python,而rospy是ROS的一部分,可能需要通过不同的方式安装。 接下来,我需要考虑每个模块的安装方法。对于大多数Python包,使用pip安装是最直接的方式。但像rospy这样的模块属于ROS(机器人操作系统),可能需要通过apt-get或者ROS的包管理工具来安装,特别是在Ubuntu系统上。用户的环境显示他们使用的是Ubuntu,所以可能需要区分哪些包可以用pip安装,哪些需要系统包管理器。 另外,用户提供的错误信息显示找不到janus模块,但当前问题集中在其他模块上。我需要确保给出的解决方案准确,避免混淆。例如,安装cv2可能需要运行pip install opencv-python,而networkx直接用pip install networkx。对于ROS相关的包如rospkg和rospy,可能需要先安装ROS本身,或者通过apt-get安装python3-rospkg和python3-rospy。 还要注意Python版本的问题,用户是否使用了正确的pip版本(如pip3),特别是如果系统同时有Python2和Python3的情况下。此外,虚拟环境的问题也可能导致模块找不到,比如用户是否在正确的虚拟环境中安装这些包。 最后,需要验证每个安装命令是否正确,并提醒用户在安装后重新启动Python解释器或重新激活虚拟环境。如果某些模块安装后仍然无法导入,可能需要检查安装路径或是否存在名称冲突。</think>在Python中安装和导入第三方模块的步骤如下,针对你提到的模块逐一说明: ### 1. 通用安装方法(适用于大多数模块) ```bash # 使用pip安装(推荐在虚拟环境中操作) pip install opencv-python networkx rospkg transforms3d simple-pid ``` ### 2. 特殊模块处理 #### (1) cv2模块 安装命令: ```bash pip install opencv-python-headless # 基础版(无GUI功能) # 或 pip install opencv-python # 完整版(含GUI功能) ``` 验证: ```python import cv2 print(cv2.__version__) ``` #### (2) ROS相关模块(rospy/rospkg) 安装方法(需先安装ROS): ```bash # Ubuntu系统安装ROS完整版 sudo apt-get install ros-<distro>-desktop-full # 例如ROS Noetic: sudo apt-get install ros-noetic-desktop-full # 安装Python3支持 sudo apt-get install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool sudo apt-get install python3-rospkg python3-rospy ``` #### (3) transforms3d 安装命令: ```bash pip install transforms3d ``` #### (4) simple_pid 安装命令: ```bash pip install simple-pid # 注意模块名中的横线会转换为下划线 ``` ### 3. 验证安装 ```python try: import cv2 import networkx import rospkg import rospy import transforms3d from simple_pid import PID print("所有模块导入成功") except ImportError as e: print(f"导入失败: {e}") ``` ### 4. 常见问题解决 1. **模块未找到**: - 确认使用的pip和python命令对应相同版本(如使用`pip3`和`python3`) - 检查是否在正确的虚拟环境中操作[^1] - 对于ROS相关模块,需要确保已正确配置`ROS_PACKAGE_PATH` 2. **权限问题**: ```bash # 添加--user参数进行用户级安装 pip install --user package-name ``` 3. **依赖冲突**: ```bash # 建议使用虚拟环境 python -m venv myenv source myenv/bin/activate ``` ### 引用说明 : 根据你提供的错误信息,建议在安装前先激活正确的虚拟环境,并确保所有依赖在同一环境中安装。如果使用conda环境,需先执行`conda activate your_env_name`再进行安装操作。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值