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. Google的分布式关系型数据库F1和Spanner

    F1是Google开发的分布式关系型数据库,主要服务于Google的广告系统.Google的广告系统以前使用MySQL,广告系统的用户经常需要使用复杂的query和join操作,这就需要设计shard ...

  2. Winform开发框架之权限管理系统改进的经验总结(4)--用户分级管理

    在实际的系统应用环境中,用户的分级管理一般也是比较常见的功能,小的业务系统可以不需要,但是一般涉及到集团.分子公司.或者是事业单位里面的各个处室或者某某局的人员管理,这些分级管理就显得比较必要,否则单 ...

  3. Java的final关键字详解

    Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...

  4. 技巧题---Single boy

    Description Today is Christmas day. There are n single boys standing in a line. They are numbered fo ...

  5. 【Asphyre引擎】关于AsphyreTypes中OverlapRect的改动,都是泪啊!!!

    OverlapRect改动:两个参数对调了.想问问LP,这样真的好吗? Sphinx304版本的代码: function OverlapRect(const Rect1, Rect2: TRect): ...

  6. Android应用开发基础之六:页面跳转和数据传递

    创建第二个Activity 需要在清单文件中为其配置一个activity标签 标签中如果带有这个子节点,则会在系统中多创建一个快捷图标 <intent-filter> <action ...

  7. C#枚举类型和结构体

    注意:枚举类型和结构体都属于值类型. 结构体:就是一个自定义的集合,里面可以放各种类型的元素,用法大体跟集合一样. 一.定义的方法: struct student { public int nianl ...

  8. java微信开发(wechat4j)——access_token中控服务器实现

    access_token是与微信服务器交互过程中的一个凭证,每次客户服务器主动与微信服务器通信都需要带上access_token以确认自己的身份.wechat4j内部封装了对access_token的 ...

  9. virtualenv and virtualenvwrapper on Ubuntu 14.04

    In this post I’ll go over my attempt to setup virtual environments for Python development. Most Pyth ...

  10. jekyll

    bundle show minima查看安装路径 bundle exec github-pages versions 建立一个类似于master的分支,与master是完全独立 git checkou ...