1.前言 

编译linux内核失败的原因很多时候就是驱动选错,适合自己本机的驱动没编译进去。面对特殊平台(或者有些洁癖者,我就是^_^),要编译精简内核,只要本机驱动,其他都不需要。面对内核里面这么多驱动,不懂硬件的我们,看到都头大。本人第一次安装gentoo的时候,内核编译了5次,前4次主要失败原因是以太网卡驱动、无线网卡驱动、显卡驱动、声卡驱动都没一次性配置正确。虽然gentoo提供了genkernel命令,可以自动帮你编译内核,但还是想自己手工尝试下。

2.获取本机驱动信息

既然跟内核挂钩,我们获取本机内核驱动信息最直接的办法就是使用lspci命令,这个命令可以输出本机驱动信息,配合-k选项可以看到此驱动在内核的位子。

一般编译内核的场景:更新旧内核,安装定制版linux发行版(gentoo,arch等),嵌入式平台,其他特殊平台等等...

大部分场景在下都可以使用lspci命令,安装gentoo的livecd版都提供了该工具,如果其他系统没有就安装该工具

debian系列安装

 $:sudo apt-get install pciutils 

或者源码编译安装,下载地址https://www.kernel.org/pub/software/utils/pciutils/

然后我们获取本机环境现存的驱动信息,下面是我的机器上面的信息:

 $:lspci -k
 :)
     Subsystem: Lenovo Device 21e2
 :/2nd Generation Core Processor Family PCI Express Root Port (rev )
     Kernel driver in use: pcieport
 :)
     Subsystem: Lenovo Device 21e3
     Kernel driver in use: i915
 : Series/C200 Series Chipset Family MEI Controller # (rev )
     Subsystem: Lenovo Device 21e2
     Kernel driver in use: mei_me
 :1a. USB controller: Intel Corporation  Series/C200 Series Chipset Family USB Enhanced Host Controller # (rev )
     Subsystem: Lenovo Device 21e2
     Kernel driver in use: ehci-pci
 :1b. Audio device: Intel Corporation  Series/C200 Series Chipset Family High Definition Audio Controller (rev )
     Subsystem: Lenovo Device 21e2
     Kernel driver in use: snd_hda_intel
 :1c. PCI bridge: Intel Corporation  Series/C200 Series Chipset Family PCI Express Root Port  (rev b4)
     Kernel driver in use: pcieport
 :1c. PCI bridge: Intel Corporation  Series/C200 Series Chipset Family PCI Express Root Port  (rev b4)
     Kernel driver in use: pcieport
 :1c. PCI bridge: Intel Corporation  Series/C200 Series Chipset Family PCI Express Root Port  (rev b4)
     Kernel driver in use: pcieport
 :1c. PCI bridge: Intel Corporation  Series/C200 Series Chipset Family PCI Express Root Port  (rev b4)
     Kernel driver in use: pcieport
 :1c. PCI bridge: Intel Corporation  Series/C200 Series Chipset Family PCI Express Root Port  (rev b4)
     Kernel driver in use: pcieport
 :1d. USB controller: Intel Corporation  Series/C200 Series Chipset Family USB Enhanced Host Controller # (rev )
     Subsystem: Lenovo Device 21e2
     Kernel driver in use: ehci-pci
 :1f. ISA bridge: Intel Corporation HM65 Express Chipset Family LPC Controller (rev )
     Subsystem: Lenovo Device 21e2
     Kernel driver in use: lpc_ich
 :1f. SATA controller: Intel Corporation  Series/C200 Series Chipset Family  port SATA AHCI Controller (rev )
     Subsystem: Lenovo Device 21e2
     Kernel driver in use: ahci
 :1f. SMBus: Intel Corporation  Series/C200 Series Chipset Family SMBus Controller (rev )
     Subsystem: Lenovo Device 21e2
 :00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Seymour [Radeon HD 6400M/7400M Series] (rev ff)
     Kernel driver in use: radeon
 :/ PCI Express Gigabit Ethernet Controller (rev )
     Subsystem: Lenovo Device 21e2
     Kernel driver in use: r8169
 :)
     Subsystem: Lenovo Device 21e2
     Kernel driver in use: sdhci-pci
 :.11b/g/n WiFi Adapter (rev )
     Subsystem: Realtek Semiconductor Co., Ltd. Device
     Kernel driver in use: rtl8192ce

我们可以看到每个驱动后面都有Kernel driver in use:,代表驱动在内核中的链接位子。

3.配置内核驱动

下载内核源码https://www.kernel.org/,我这里下载的是stable 4.3.3,解压后进入源码目录执行:

 $:make menuconfig

接下来就会弹出编译选项界面,如图:

我们可以看到上面有快捷键操作说明,我重点在</> for Search,在界面直接按反斜杠,进入搜索界面。接下来挑个重点驱动说明一下,我们看

Network controller,可以看到型号是Realtek  RTL8188CE,然后Kernel driver in use: rtl8192ce,在内核的位子链接是rtl8192ce

我们按</>,输入rtl8192ce,然后回车,就会出现详细位子,如图:

我们可以看到Pormt提示上面跟我要的型号一样,具体选项的前面有个(1),注意这里同一个Symbol(就是刚刚输入的rtl8192ce)有的对应很多选项,根据前面的序号,按对应的数字就可以直接进入选项,按<esc>可以返回来这个界面。这里,我直接按1。按1后,就到具体选项了,如图:

我们看到上面,发行版为了兼容各种机器,把所有Realtek的驱动都编译进成了模块。接下来就保留自己的驱动型号,去掉其他不要的。

剩下的驱动跟上面操作一样的,还有的不必要驱动是直接编译进了内核,非模块。对照自己的驱动,其他都可以不要。配置好后的内核

配置文件最好保存下来,如果驱动没配置成功,再配置的时候把保存的配置文件复制一份到源码目录,命名为.config。继续make menuconfig配置。

linux内核编译,配置本机驱动的更多相关文章

  1. Linux内核编译配置脚本

    环境 宿主机平台:Ubuntu 16.04.6 目标机:iMX6ULL Linux内核编译配置脚本 在linux开发过程中熟练使用脚本可以大大简化命令行操作,同时对于需要经常重复操作的指令也是一种备忘 ...

  2. Linux内核编译完整过程

    Linux内核编译完整过程 通过网上的资料我自己的实际内核编译,我把对Linux内核编译的过程写在这里,也许对其他的Linux爱好者的编译学习有些帮助,其中很大部分是网上的资料,另外就是我在实际编译过 ...

  3. linux内核编译环境配置

    linux内核编译环境配置 如果不是编译内核,只需要安装与内核相匹配的kernel-devel开发包即可.即是/lib/modules/`uname -r`/build -> /usr/src/ ...

  4. 【内核】linux2.6版本内核编译配置选项(二)

    目录 Linux2.6版本内核编译配置选项(一):http://infohacker.blog.51cto.com/6751239/1203633 Linux2.6版本内核编译配置选项(二):http ...

  5. 【内核】linux2.6版本内核编译配置选项(一)

    Linux 2.6.19.x 内核编译配置选项简介 作者:金步国 版权声明 本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布.任何人都可以自由使用.转载.复制和再分发, ...

  6. 运行在TQ2440开发板上以及X86平台上的linux内核编译

    一.运行在TQ2440开发板上的linux内核编译 1.获取源码并解压 直接使用天嵌移植好的“linux-2.6.30.4_20100531.tar.bz2”源码包. 解压(天嵌默认解压到/opt/E ...

  7. Linux内核编译与安装

    2013-04-16    Linux内核介绍  Linux内核是一个用C语言写成的,符合POSIX标准的类Unix操作系统.内核是操作系统中最基本的一部分,提供了众多应用程序访问计算机硬件的机制.L ...

  8. linux内核的配置

    以2.6.35.7版本的内核为例 总结:.config决定了Make时的条件编译与连接..config文件由两次配置第一次make XX_defconfig 第二次menuconfig. 1.分析源码 ...

  9. Linux 内核 编译模块

    背景: 由于调试内核或者由于分区大小限制,有时候内核组件不一定完全需要编进内核中. 所以,在开发中经常将内核组件编译成为模块,等到在恰当的时机加载. 概览: Linux内核模块的编译方法有两种: 1. ...

随机推荐

  1. 极简Unity调用Android方法

    简介 之前写了篇unity和Android交互的教程,由于代码里面有些公司的代码,导致很多网友看不懂,并且确实有点小复杂,这里弄一个极简的版本 步骤 废话不多说,直接来步骤吧 1.创建工程,弄大概像这 ...

  2. C#中往数据库插入/更新时候关于NUll空值的处理

    本文转载:http://blog.csdn.net/chybaby/article/details/2338943 本文转载:http://www.cnblogs.com/zfanlong1314/a ...

  3. DataSet与DataTable对象

    DataSet与DataTable对象 摘自:http://www.cnblogs.com/fttbfttb/articles/1509662.html DataSet对象 DataSet是ADO.N ...

  4. Microsoft.DirectX.DirectSound.dll和Microsoft.DirectX.dll引用,导致项目无法调试问题

    最近在做录音功能,用到了Microsoft.DirectX.DirectSound.dll和Microsoft.DirectX.dll两个dll,但是引入后,无法调试项目 具体解决方法: 修改app. ...

  5. Web基础开发最核心要解决的问题

    Web基础开发要解决的问题,往往也就是那些框架出现的目的 - 要解决问题. 1. 便捷的Db操作: 2. 高效的表单处理: 3. 灵活的Url路由: 4. 合理的代码组织结构: 5. 架构延伸 缓存. ...

  6. JS之跨域

    今天学了跨域,迫不及待想跟大家分享!不妥之处希望大家指正. 首先来明确一下"跨域"这个概念. 跨域指的是,到外域去取数据.那什么是"外域"呢?我们先来了解同域. ...

  7. NPOI Excel类

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using NPOI.HSSF.Us ...

  8. How does Web Analytics works under sharePoint 2010

    [http://gokanx.wordpress.com/2013/06/15/how-does-web-analytics-works-under-sharepoint-2010/] You nee ...

  9. 挣值管理(PV、EV、AC、SV、CV、SPI、CPI)记忆之我见

    挣值管理(PV.EV.AC.SV.CV.SPI.CPI)记忆之我见 挣值管理法中的PV.EV.AC.SV.CV.SPI.CPI这些英文简写相信把大家都搞得晕头转向的.在挣值管理法中,需要记忆理解的有三 ...

  10. IOS MenuController初步了解

    IOS MenuController初步了解 默认情况下有以下控件已经支持MenuController. UITextField UITextView UIWebView 让其他控件也支持MenuCo ...