linux内核编译,配置本机驱动
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内核编译,配置本机驱动的更多相关文章
- Linux内核编译配置脚本
环境 宿主机平台:Ubuntu 16.04.6 目标机:iMX6ULL Linux内核编译配置脚本 在linux开发过程中熟练使用脚本可以大大简化命令行操作,同时对于需要经常重复操作的指令也是一种备忘 ...
- Linux内核编译完整过程
Linux内核编译完整过程 通过网上的资料我自己的实际内核编译,我把对Linux内核编译的过程写在这里,也许对其他的Linux爱好者的编译学习有些帮助,其中很大部分是网上的资料,另外就是我在实际编译过 ...
- linux内核编译环境配置
linux内核编译环境配置 如果不是编译内核,只需要安装与内核相匹配的kernel-devel开发包即可.即是/lib/modules/`uname -r`/build -> /usr/src/ ...
- 【内核】linux2.6版本内核编译配置选项(二)
目录 Linux2.6版本内核编译配置选项(一):http://infohacker.blog.51cto.com/6751239/1203633 Linux2.6版本内核编译配置选项(二):http ...
- 【内核】linux2.6版本内核编译配置选项(一)
Linux 2.6.19.x 内核编译配置选项简介 作者:金步国 版权声明 本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布.任何人都可以自由使用.转载.复制和再分发, ...
- 运行在TQ2440开发板上以及X86平台上的linux内核编译
一.运行在TQ2440开发板上的linux内核编译 1.获取源码并解压 直接使用天嵌移植好的“linux-2.6.30.4_20100531.tar.bz2”源码包. 解压(天嵌默认解压到/opt/E ...
- Linux内核编译与安装
2013-04-16 Linux内核介绍 Linux内核是一个用C语言写成的,符合POSIX标准的类Unix操作系统.内核是操作系统中最基本的一部分,提供了众多应用程序访问计算机硬件的机制.L ...
- linux内核的配置
以2.6.35.7版本的内核为例 总结:.config决定了Make时的条件编译与连接..config文件由两次配置第一次make XX_defconfig 第二次menuconfig. 1.分析源码 ...
- Linux 内核 编译模块
背景: 由于调试内核或者由于分区大小限制,有时候内核组件不一定完全需要编进内核中. 所以,在开发中经常将内核组件编译成为模块,等到在恰当的时机加载. 概览: Linux内核模块的编译方法有两种: 1. ...
随机推荐
- Ext.NET 4.1 最新版本破解
Ext.NET 4.1 最新版本破解 今天在将Ext.NET 4.1版本的程序发布到公网时居然要license(localhost和127.0.0.1不收费),而且一年$4999,突然间觉得这是什么鬼 ...
- 织梦CMS的MVC体系
13年无意中翻看DedeCMS的代码,发现DedeCMS中是有了一个基本MVC框架的,在现有的版本中,主要是应用到了ask.book等模块上. 织梦这个东西,里面很多设计思想是非常优秀的,但整体代码的 ...
- idea中maven项目xml资源文件无法读取
解决方法:编辑pom.xml文件 添加如下标签 <build> <resources> <resource> <directory>src/main/j ...
- NYOJ:题目860 又见01背包
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=860 方法一:不用滚动数组(方法二为用滚动数组,为方法一的简化) 动态规划分析:最少要拿总 ...
- NYOJ 42 一笔画问题
一笔画问题 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下 ...
- 约瑟夫问题(c++实现)
描述:约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1 开始报数.就这样,直到圈内只剩下一只猴子时,这个猴子 ...
- Underscore学习笔记1
项目用了很久underscore.每次都是临时查手册,没有系统的研究过,最近有空正好看看 github地址:https://github.com/lily1010/underscore_learn 一 ...
- VisualStudio中解决方案
在VS中创建一个项目通常会生成一个解决方案文件(.sln)和一个隐藏的解决方案用户选项文件(.suo). 解决方案文件是一个文本文件,包含以下信息: 将被加载的所有项目以构成完整解决方案的项目清单 解 ...
- android ImageSwitcher
<?xml version="1.0" encoding="UTF-8"?> <RelativeLayout xmlns:android=&q ...
- Android项目实战(五):TextView自适应大小
对于设置TextView的字体默认大小对于UI界面的好看程度是很重要的,小屏幕设置的文字过大或者大屏幕设置的文字过小都造成UI的不美观 现在就让我们学习自适应大小的TextView控件,即当文字长度变 ...