—————————————————————-——背景———————————————————————
前几天上《Linux内核分析及驱动编程》的时候,老师布置了一项作业——安装Linux发行版系统,下载Linux内核,编译、配置和安装内核,配置启动文件。
本身机器上已经安装了Ubuntu11.10(内核版本3.0.0.16-generic),好,拿着同学的一份实验报告过来,照着命令一路欢乐的敲,经过长时间的编译、配置、安装,然后更新grub,成功加载了新内核3.2.9。果断重启,结果发现不能无线上网了,点击网络连接那里,根本就没有搜索周围的无线网络。然后上网各种查,发现资料挺多,但是太杂乱,而且多是一篇抄一篇的,版本也基本是比较早期的,看来看去,自己也按照那些帖子、博客的方法解决来解决去,依然无果。
后来,同学推荐了一本书《火与冰》,当当上缺货,亚马逊也缺货,京东也没,上中关村书城的在线系统查,还是没有,淘宝倒有,去看了,影印的,比较喜欢看了以后收藏,遂放弃之。一问哪买,说是北大小西门的二手书那里有概率能淘到。然后在一个据大叔说是天儿不错的日子出门了。20几个地铁站后,到了本部,又不熟悉路,找饼出来带我去小西门,到了好像没发现有卖书的迹象,饼又带我去了国图和中关村图书大厦,在里面耗了两小时,想,不能就这么回去了吧,去买一本计算机的书看看得了。转悠转悠就看到了一本O‘REILLY出的书《LINUX内核技术手册》,翻了一下,好像正好是关于构建和定制内核的,想着有可能能解决前面打问题,心动,买之。总算有点儿收获了,反正也打算再去北大图书馆逛逛(之前在图书馆在线管理系统那里查到图书馆还有5本,其中有一本编号不是1,能够借出来),就再去了一趟小西门儿,问了一下保安卖二手书的事儿,答曰周六周日他们回出来。额,被坑了,,,直接杀向图书馆,遇到一咨询老爷子,被告知能借出的这本书在学院里面,没在图书馆里。Soga~~ 回北大荒去。
新书慢慢看,今天翻到网络驱动这块,抱着试一试的心情,一顿捣鼓,好之。现在我的Ubuntu已经能够无线上网了。打算把配置过程写下来,方便以后选了这门坑爹课又不幸遇到同样问题的小学弟小学妹们以及谁谁谁。
————————————————————————-—割—————————————————————
第一,找到你的无线网卡的驱动
首先,回到你安装的开发版Ubuntu(内核3.0.0.16-generic),因为你升级以后的内核不是没有驱动嘛,现在就回以前版本去找驱动。
这是我升级内核前的版本,如下图
![](http://hi.csdn.net/attachment/201203/17/0_1331947057AtRt.gif)
或者也可以在系统监视器里查看内核版本等信息
![](http://hi.csdn.net/attachment/201203/17/0_1331947734h2H8.gif)
![](http://hi.csdn.net/attachment/201203/17/0_1331947758n9SO.gif)
然后,逆向的从网络连接名中找出控制它的PCI设备。要做到这一点,请查看各种网络连接名称,
在终端中输入:
$ ls /sys/class/net/
如图所示(我们默认以后命令都以截图方式给出,懒得复制出来了。。。)
![](http://hi.csdn.net/attachment/201203/17/0_133194780141t3.gif)
lo目录代表的是网络回环设备,它没有连接到任何真正的网络设备。eth0、wlan0目录是你应该注意的,它们代表了真正的网络设备。
可以使用ifconfig工具,进一步查看并找出你所关心的网络设备
![](http://hi.csdn.net/attachment/201203/17/0_133194784939l8.gif)
从这个列表的以下几行可以看出,wlan0是活动的并处于工作状态的网络设备:
![](http://hi.csdn.net/attachment/201203/17/0_1331947881gDmL.gif)
该输出表明这是一个分配了有效IP(inet)地址的以太网设备。现在我们已经找到了wlan0这个设备,为了使它能在新内核中工作,我们需要找出控制此设备的驱动程序。在sysfs文件系统中跟踪链接是很简单的,用一条简单的命令就可以:
![](http://hi.csdn.net/attachment/201203/17/0_1331947906xX2X.gif)
该输出表明模块iwlagn(如果你的模块名字不是这个,没有关系,下面遇到相关命令的时候对应替换就行)正在控制wlan0网络设备。Basename命令将完成以下步骤(可以不用管,这里只是给想了解的同学详细列一下)
a. 跟踪符号链接 /sys/class/net/wlan0/device进入包含wlan0设备信息文件的/sys/device/目录下。请注意,在新版本内核中/sys/class/net/wlan0可能也是一个符号链接。
b.在sysfs目录下描述该设备的子目录中,有一个绑定到这个设备驱动的符号链接driver,因此我们跟踪这个链接。
c.在sysfs目录下描述该设备的子目录中,有一个到包含这个驱动的模块的符号链接module。我们要的就是这个符号链接的目标。可以通过readlink命令得到它,输出像这样
![](http://hi.csdn.net/attachment/201203/17/0_1331947949oOdz.gif)
d.由于我们只关心模块的名称,要去掉readlink输出中的多余路径,只留下最右面的部分(模块名称)。这是basename命令所做的工作。直接传递路径给basename,它将输出:
![](http://hi.csdn.net/attachment/201203/17/0_1331947977X0x3.gif)
所以,我们把readlink输出的一级级的符号链接所指的路径,传递给basename程序,使整个处理过程只用一行就能完成。
———————————————————————-———不用管结束———————————–—————————————
第二,找到驱动模块对应的配置选项
现在我们已经得到了模块名称,还需要找到控制它的内核配置选项。
进入到你的linux内核目录。应该是/usr/src/目录下的。
![](http://hi.csdn.net/attachment/201203/17/0_1331948043hTpy.gif)
查看具体配置信息。
![](http://hi.csdn.net/attachment/201203/17/0_1331948067px3T.gif)
如果你的模块名字不是“iwlagn”,将其替换为你要找的模块名字即可。
接着在上面find命令的输出中找出那些含有CONFIG_的行。它们就是构建模块需要启用的配置选项。在上图中
CONFIG_IWLWIFI_DEBUGFS
CONFIG_IWLWIFI_DEVICE_TRACING
CONFIG_IWLWIFI_DEVICE_SVTOOL
就是你要找的配置选项,现在有了配置内核所需的信息。运行菜单配置工具:
![](http://hi.csdn.net/attachment/201203/17/0_13319480939NRY.gif)
然后按下/键(这会启动搜索)并键入要配置的选项,去掉CONFIG_ 部分字符串。如下图所示(以CONFIG_IWLWIFI_DEBUGFS为例,后面两个雷同)。
![](http://hi.csdn.net/attachment/201203/17/0_13319481255vvw.gif)
搜索之。
![](http://hi.csdn.net/attachment/201203/17/0_13319481547KrC.gif)
搜索结果,如下图所示。
![](http://hi.csdn.net/attachment/201203/17/0_133194818222hl.gif)
该图显示出的就是你所寻找的。Location中的信息告诉你要把模块iwlagn构建到内核中,下面的配置选项必须启用:
![](http://hi.csdn.net/attachment/201203/17/0_13319485298HU3.gif)
第三,配置新内核
进入你下载的新内核解压后的目录,我的是在/home/david/ss.pku/linux-3.2.9目录下的
![](http://hi.csdn.net/attachment/201203/17/0_13319487320qhU.gif)
然后运行菜单配置工具进行配置,sudo make menuconfig,按照上面的路径,去把相应模块选中,即
方括号中选上*(“如上图的【*】”)
第四,重新编译、安装新内核
安装模块
![](http://hi.csdn.net/attachment/201203/17/0_1331948757GRtH.gif)
安装内核
![](http://hi.csdn.net/attachment/201203/17/0_1331948772cIq5.gif)
不用担心会重新编译全部的内核,make会查找哪些做出了更改。
小技巧:如果你的CPU是双核,或者4核,那么在make的时候,你可以采用sudomake install -j4或者sudo make 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可以看到加载了新内核,并且无线网卡已经驱动起来了,可以无线上网了。