当前位置:文档之家› 在ubuntu12.04下编译linux内核

在ubuntu12.04下编译linux内核

在ubuntu12.04下编译linux内核
在ubuntu12.04下编译linux内核

在ubuntu12.04下编译linux内核

写这个东西的时候,

想起07年第一次编译内核,

想起06年开始看内核代码,

想起那段,生命中最灰暗的日子。

那时,

经常在校内写读内核的心得,

只因发现,

目录

前言 (2)

一、编译前的准备工作 (2)

二、内核的配置 (2)

三、内核的生成和安装 (3)

四、启动新内核 (4)

五、修改默认的配置文件 (4)

5.1修改默认配置添加软件功能 (4)

5.2修改默认配置添加pci和usb设备驱动 (5)

5.3修改默认配置添加杂类设备驱动 (7)

前言

编译内核和编译其它软件相比,除了配置之外,没有什么特别的地方。既然编译内核这么简单,网上也能找到很多介绍的文章,我为什么还要写呢?

因为看到有些文章源自不断抄袭旧东西,导致抄了些没用的东西,而且基本都对内核配置避而不谈,这样实际上一定会有人遇到问题。

所以,写点吧,给初学者。

一、编译前的准备工作

编译软件需要先安装编译环境,主要的就是工具链(toolchain)。由于安装包需要下载的数据量较大,所以如果软件源建议还是换成国内的吧。

我用163的源,source.list文件在这里,覆盖/etc/apt/source.list就行了。

替换源后,执行如下命令:

apt-get update

apt-get install build-essential p7zip-full

后面的7z工具供下载了xz后缀文件的同学使用。

下载内核源码的网站是https://www.doczj.com/doc/6b1332623.html,,版本随意,源码包名字是linux-3.x.x.tar.gz,

有很多版本提供.xz结尾的压缩版本,压缩比较高,看自己网络情况定吧。我这里下载的版本是3.6.6,名为linux-3.6.6.tar.gz。

接着解压源码,假设我们的编译目录为/home/sb/,解压命令为:

tar xf linux-3.6.6.tar.gz-C/home/sb

这样/home/sb/下出现一个linux-3.6.6的目录。

二、内核的配置

内核支持很多的设备和功能,这些设备驱动和功能的开关主要通过内核的配置文件确定。编译时,内核使用的配置文件是内核源码树根目录下一个名为.config的隐藏文件。

x86电脑默认内核配置文件可直接使用arch/x86/config/i386_defconfig,如下命令:cp arch/x86/config/i386_defconfig.config

make menuconfig

默认的配置文件对于启动系统足够了,但是不同的机器硬件配置不同,默认的配置可能不支持你机器的部分硬件,火鹤缺少一些你需要的功能。所以实际上,你会需要修改默认配置文件,重新编译来达到你的需求,关于配置文件修改见后续“修改默认的配置文件”一章。

make menuconfig后有个蓝白界面弹出来,就是内核的配置界面,如下:

三、内核的生成和安装

配置完成之后,用左右键和回车退出配置界,按照提示保存操作即可。

编译之前,说下编译的时间长度。

现在默认内核配置文件的模块非常少,少到几乎没有,所以编译时间较短。

如果用ubuntu的配置文件(/boot/下config开头的就是),由于需要支持的模块非常多,编译时间的确很长,这时建议减少模块的编译数量。由于自己编译的内核一般使用场景确定,可以减少文件系统的支持数量和设备驱动中明显不需要的。比如你电脑就一个以太网卡,其余的网卡的驱动都不要选。类似的方式去掉你认为不用的文件系统。当然,减少模块的编译需要修改内核配置文件。

编译就一条命令:

make-j n

n是个数字,默认是1。编译的机子如果是双核建议make-j3,4核make-j7。如果是8和以上,make-j10吧,据说比较合适的数值是cpu的核数乘以2加1,这个我自己实验过,发现没有那么玄乎,基本8核用10个进程就行了。

编译一般20分钟内能完成。

于是,内核有了,模块也有了(如果有的话)。

内核源码树根目录下生成vmlinux文件,这个是未压缩的内核,压缩的内核是arch/x86/boot/bzImage,一般启动都用压缩的内核,因为加载时间少。

接着安装编译的内核,命令如下:

make modules_install

这个命令安装所有模块(*.ko)到/lib/modules/的对应内核版本下。

然后,启用新内核,命令为:

make install

这个命令拷贝(压缩的)内核到/boot目录,并改名为vmlinuz-版本号。然后生成initrd.img-版本号。最后在grub.cfg中添加使用新内核grub项(实际是两项)。

对grub有了解的,可以手动修改grub.cfg,其实不麻烦,也是必须掌握的。

四、启动新内核

一切就绪,重启后在grub选择界面的时候选择新条目启动,启动后新内核在我的电脑上出现了几个问题;

一、启动的时候报了一个devtmpfs的错误,导致/dev下的设备节点无法创建

解决方法:重新编译把CONFIG_DEVTMPFS和CONFIG_DEVTMPFS_MOUNT

选上

二、NTFS文件系统不识别

解决方法:重新编译把NTFS的支持选上

三、无线网卡不可用

解决方法:重新编译,把我机子对应的无线网卡驱动选上。

可见,默认配置还是或多或少会遇到些问题的,但除非文件系统不识别,否则启动应该没有问题。

下面介绍配置文件的修改。

五、修改默认的配置文件

从上面我遇到的三个问题看,默认配置文件是不能满足所有需求,需要手动修改。由于默认的配置文件的模块非常非常少,这里只需要关心添加什么就够了。

常见情况下,修改配置主要是增加设备的支持和某些软件功能得支持,下面都做介绍。

顺便提一下,内核中的配置选项都是大写的。

5.1修改默认配置添加软件功能

软件功能的支持添加相对比较简单,只要知道那个功能,比如上面说的NTFS文件系统的支持对应的配置选项名,选上即可。

一般初学者按照最常规的步骤来,先make menuconfig,然后搜索配置选项的关键字。

make menuconfig的界面出来后,打’/’(斜杠)后出现一个输入框。

输入NTFS,出现如下对话框:

有时匹配的项超过一页,就需要上下翻,看哪个名字比较像,这里明显是NTFS_FS这

个选项,现在默认是n,表示没有编译。这时按空格选择编译进内核或者编译成模块,为'*'表示编入内核,'M'表示模块,建议变成*吧,反正也不大。

选上后一步步退出保存,然后编译即可。

5.2修改默认配置添加pci和usb设备驱动

本来,pci和usb的设备驱动分开描述,因为很不一样。但是考虑到大部分人(包括我)都无法准确区分一个设备到底是pci设备还是usb设备,所以就放在一起。

下面就假设用默认配置启动后,有设备不工作,因为驱动没有编译。

两种情况,一种是ubuntu内核可以工作,一种是本来就不能工作。用ubuntu的内核都不工作的,因为设备驱动没有编译的概率不大,因为ubuntu的驱动支持还是比较全面的。万一遇到了,要么搜索,要么用设备id号去源码查找,或者上厂家的网站下载linux驱动。

如果ubuntu的内核支持,而用默认配置文件编出的内核不支持,就基本是驱动没有编译的问题了。

要添加设备驱动,首先得知道你的硬件设备的基本信息。用lspci和lsusb这两条命令就够了。比如现在我的有线网卡不工作,ubuntu行的(有线网卡一般是pcie设备,3G、无线网卡一般是usb设备。如果lspci没看到网卡,那么就lsusb去找。这个多少需要懂点英

文单词。),那么就到ubuntu下输入:

lspci-k

-k表示显示出内核使用的驱动名。lspci-k后找Eehernet这个单词,看到如下:

04:00.0Ethernet controller:Marvell Technology Group Ltd.88E8039PCI-E Fast Ethernet Controller(rev14)

Subsystem:QUANTA Computer Inc Device0761

Kernel driver in use:sky2

最后一行是kernel driver in use:sky2,说明内核中这个网卡驱动的名字叫做sky2。

那默认内核配置文件是否包含了这个sky2的驱动呢?

cat.config|grep SKY

输出为:

CONFIG_SKY2=y

#CONFIG_SKY2_DEBUG is not set

可见,默认内核中有这个驱动,而且是编译进内核。假如没有,会显示:

#CONFIG_SKY2is not set

我们假设默认没有编译,那么在make menuconfig后打一个’/’,然后输入SKY,回车,出现如下对话框:

看到第6行有个Location,提示了如何找到CONFIG_SKY2选项。先进入Device Drivers,然后Network device support,如此一层层下去。

最后找到对应的名称是Prompt:Marvell Yukon2support的那项,选择编译到内核,保存并编译即可。

无线网卡的驱动不支持概率挺大,而且无线驱动的名字找起来麻烦一些,我认为标准做法是先执行lsusb命令:

看到如下一行:

Bus001Device002:ID148f:2573Ralink Technology,Corp.RT2501/RT2573 Wireless Adapter

是的,我的网卡是Ralink牌子的。中间有个148f:2573是设备的厂商号和设备号,可

作为设备的类别标志。查找内核中ubuntu内核中这款无线网卡的支持驱动名:cat/lib/modules/3.2.0-23-generic-pae/https://www.doczj.com/doc/6b1332623.html,bmap|grep2573|grep148f

输出为:

rt73usb0x00030x148f0x25730x0000(后面省略)

输出说明支持这个无线网卡的驱动叫做rt73usb,有时会出现一个设备有多个驱动支持的情况,此时可以搜索下或随便选一个。

这个驱动默认配置没有支持,按照上面说的make menuconfig找配置的方法找到位置,编入内核。

5.3修改默认配置添加杂类设备驱动

除了pci和usb设备之外,一定会有人遇到其它小设备不能用的情况,或者有些usb 接口的设备但是不在lsusb中出现的。比如鼠标,usb转串口线等。

这里以鼠标为例介绍找杂七杂八设备驱动的方法,实际就是看ubuntu下的内核打印,猜测驱动的名字。

要是3年前,如果鼠标如果不支持,说起来还挺复杂的,但现在的默认配置比较好,USB控制器的驱动都编译到内核了,所以就容易处理了。

还是那句话,ubuntu下应该支持吧,不支持就悬了。

ubuntu下如果行,但是你自己编译的内核不行,看下ubuntu调用了哪个内核驱动。

为了使信息更清晰,先清空dmesg的内容,命令为:

dmesg-c

然后插入鼠标,查看打印:

dmesg

看后面的打印是什么,现在手头只有无线的鼠标,看到的打印如下:

[4081.871505]usbhid6-1:1.0:looking for a minor,starting at96

[4081.871635]hid-generic0003:09DA:054F.0007:input,hiddev0,hidraw0:USB HID v1.11Keyboard[A4TECH USB Device]on usb-0000:00:1d.1-1/input0 [4081.871997]usb6-1:adding6-1:1.1(config#1,interface1)

[4081.872731]usbhid6-1:1.1:usb_probe_interface

[4081.872739]usbhid6-1:1.1:usb_probe_interface-got id

[4081.875412]input:A4TECH USB Device as

/devices/pci0000:00/0000:00:1d.1/usb6/6-1/6-1:1.1/input/input14

[4081.875610]hid-generic0003:09DA:054F.0008:input,hidraw1:USB HID v1.11 Mouse[A4TECH USB Device]on usb-0000:00:1d.1-1/input1

[4081.875691]hub6-0:1.0:state7ports2chg0000evt0002

看到有A4TECH吧,这个的就是鼠标的牌子,双飞燕。

然后make menuconfig搜下A4,就能找到对应的设备驱动项了,有时这个找驱动名的过程需要点运气和细心,类似方法能适用于大部分能热插拔的设备。

如果没有打印,还是上网搜索比较合适,当然前提是你知道设备的型号之类的信息。

发现了吧,大部分情况下,真的没有什么。对于配置的熟悉需要不断使用,等到对内核的目录,对设备的了解多了,就知道配置选项大概在哪里,找起来就更快更准。

Linux内核修改与编译图文教程

Linux 内核修改与编译图文教程 1

1、实验目的 针对Ubuntu10.04中,通过下载新的内核版本,并且修改新版本内核中的系统调用看,然后,在其系统中编译,加载新内核。 2、任务概述 2.1 下载新内核 https://www.doczj.com/doc/6b1332623.html,/ 2.2 修改新内核系统调用 添加新的系统调用函数,用来判断输入数据的奇偶性。 2.3 进行新内核编译 通过修改新版内核后,进行加载编译。最后通过编写测试程序进行测试 3、实验步骤 3.1 准备工作 查看系统先前内核版本: (终端下)使用命令:uname -r 2

3.2 下载最新内核 我这里使用的内核版本是 3.3 解压新版内核 将新版内核复制到“/usr/src”目录下 在终端下用命令:cd /usr/src进入到该文件目录 解压内核:linux-2.6.36.tar.bz2,在终端进入cd /usr/src目录输入一下命令: bzip2 -d linux-2.6.36.tar.bz2 tar -xvf linux-2.6.36.tar 文件将解压到/usr/src/linux目录中 3

使用命令: ln -s linux-2.6.36 linux 在终端下输入一下命令: sudo apt-get install build-essential kernel-package libncurses5-dev fakeroot sudo aptitude install libqt3-headers libqt3-mt-dev libqt3-compat-headers libqt3-mt 4

如何自行编译一个Linux内核的详细资料概述

如何自行编译一个Linux内核的详细资料概述 曾经有一段时间,升级Linux 内核让很多用户打心里有所畏惧。在那个时候,升级内核包含了很多步骤,也需要很多时间。现在,内核的安装可以轻易地通过像 apt 这样的包管理器来处理。通过添加特定的仓库,你能很轻易地安装实验版本的或者指定版本的内核(比如针对音频产品的实时内核)。 考虑一下,既然升级内核如此容易,为什么你不愿意自行编译一个呢?这里列举一些可能的原因: 你想要简单了解编译内核的过程 你需要启用或者禁用内核中特定的选项,因为它们没有出现在标准选项里 你想要启用标准内核中可能没有添加的硬件支持 你使用的发行版需要你编译内核 你是一个学生,而编译内核是你的任务 不管出于什么原因,懂得如何编译内核是非常有用的,而且可以被视作一个通行权。当我第一次编译一个新的Linux 内核(那是很久以前了),然后尝试从它启动,我从中(系统马上就崩溃了,然后不断地尝试和失败)感受到一种特定的兴奋。 既然这样,让我们来实验一下编译内核的过程。我将使用Ubuntu 16.04 Server 来进行演示。在运行了一次常规的 sudo apt upgrade 之后,当前安装的内核版本是 4.4.0-121。我想要升级内核版本到 4.17,让我们小心地开始吧。 有一个警告:强烈建议你在虚拟机里实验这个过程。基于虚拟机,你总能创建一个快照,然后轻松地从任何问题中回退出来。不要在产品机器上使用这种方式升级内核,除非你知道你在做什么。 下载内核 我们要做的第一件事是下载内核源码。在 Kernel 找到你要下载的所需内核的URL。找到URL 之后,使用如下命令(我以 4.17 RC2 内核为例)来下载源码文件: wget https://git.kernel/torvalds/t/linux-4.17-rc2.tar.gz

如何安装Linux内核源代码

如何获取Linux内核源代码 下载Linux内核当然要去官方网站了,网站提供了两种文件下载,一种是完整的Linux 内核,另一种是内核增量补丁,它们都是tar归档压缩包。除非你有特别的原因需要使用旧版本的Linux内核,否则你应该总是升级到最新版本。 使用Git 由Linus领头的内核开发队伍从几年前就开始使用Git版本控制系统管理Linux内核了(参考阅读:什么是Git?),而Git项目本身也是由Linus创建的,它和传统的CVS不一样,Git是分布式的,因此它的用法和工作流程很多开发人员可能会感到很陌生,但我强烈建议使用Git下载和管理Linux内核源代码。 你可以使用下面的Git命令获取Linus内核代码树的最新“推送”版本: $ git clone git://https://www.doczj.com/doc/6b1332623.html,/pub/scm/linux/kernel/git/torvalds/linux-2.6.git 然后使用下面的命令将你的代码树与Linus的代码树最新状态同步: $ git pull 安装内核源代码 内核包有GNU zip(gzip)和bzip2格式。Bzip2是默认和首选格式,因为它的压缩比通常比gzip更好,bzip2格式的Linux内核包一般采用linux-x.y.z.tar.bz2形式的文件名,这里的x.y.z是内核源代码的具体版本号,下载到源代码包后,解压和抽取就很简单了,如果你下载的是bzip2包,运行: $ tar xvjf linux-x.y.z.tar.bz2 如果你下载的是gzip包,则运行: $ tar xvzf linux-x.y.z.tar.gz 无论执行上面哪一个命令,最后都会将源代码解压和抽取到linux-x.y.z目录下,如果你使用Git下载和管理内核源代码,你不需要下载tar包,只需要运行git clone命令,它就会自动下载和解压。 内核源代码通常都会安装到/usr/src/linux下,但在开发的时候最好不要使用这个源代码树,因为针对你的C库编译的内核版本通常也链接到这里的。 应用补丁

嵌入式Linux系统内核的配置、编译和烧写

实验二 嵌入式Linux系统内核的配置、编译和烧写 1.实验目的 1)掌握交叉编译的基本概念; 2)掌握配置和编译嵌入式Linux操作系统内核的方法; 3)掌握嵌入式系统的基本架构。 2.实验环境 1)装有Windows系统的计算机; 2)计算机上装有Linux虚拟机软件; 3)嵌入式系统实验箱及相关软硬件(各种线缆、交叉编译工具链等等)。 3.预备知识 1)嵌入式Linux内核的配置和裁剪方法; 2)交叉编译的基本概念及编译嵌入式Linux内核的方法; 3)嵌入式系统的基本架构。 4.实验内容和步骤 4.1 内核的配置和编译——配置内核的MMC支持 1)由于建立交叉编译器的过程很复杂,且涉及汇编等复杂的指令,在这里 我们提供一个制作好的编译器。建立好交叉编译器之后,我们需要完成 内核的编译,首先我们要有一个完整的Linux内核源文件包,目前流行 的源代码版本有Linux 2.4和Linux 2.6内核,我们使用的是Linux 2.6内核; 2)实验步骤: [1]以root用户登录Linux虚拟机,建立一个自己的工作路径(如用命令 “mkdir ‐p /home/user/build”建立工作路径,以下均采用工作路径 /home/user/build),然后将“cross‐3.3.2.tar.bz2、dma‐linux‐2.6.9.tar.gz、 dma‐rootfs.tar.gz”拷贝到工作路径中(利用Windows与虚拟机Linux 之间的共享目录作为中转),并进入工作目录; [2]解压cross‐3.3.2.tar.bz2到当前路径:“tar ‐jxvf cross‐3.3.2.tar.bz2”; [3]解压完成后,把刚刚解压后在当前路径下生成的“3.3.2”文件夹移 动到“/usr/local/arm/”路径下,如果在“/usr/local/”目录下没有“arm” 文件夹,用户创建即可; [4]解压“dma‐linux‐2.6.9.tar.gz”到当前路径下:

linux内核配置模块编译安装

Linux内核配置编译和加载 Linux内核模块 Linux内核结构非常庞大,包含的组件也非常多,想要把我们需要的部分添加到内核中,有两个方法:直接编译进内核和模块机制 由于直接编译进内核有两个缺点,一是生成的内核过大,二是每次修改内核中功能,就必须重新编译内核,浪费时间。因此我们一般采用模块机制,模块本身不被编译进内核映像,只有在加载之后才会成为内核的一部分,方便了修改调试,节省了编译时间。 配置内核 (1)在drivers目录下创建hello目录存放hello.c源文件 (2)在hello目录下新建Makefile文件和Kconfig文件 Makefile文件内容: obj-y += hello.o //要将hello.c编译得到的hello.o连接进内核 Kconfig文件内容: 允许编译成模块,因此使用了tristate (3)在hello目录的上级目录的Kconfig文件中增加关于新源代码对应项目的编译配置选项 修改即driver目录下的Kconfig文件,添加

source "drivers/hello/Kconfig" //使hello目录下的Kconfig起作用 (4)在hello目录的上级目录的Makefile文件中增加对新源代码的编译条目 修改driver目录下的Makefile文件,添加 obj-$(CONFIG_HELLO_FOR_TEST) += hello/ //使能够被编译命令作用到 (5)命令行输入“make menuconfig”,找到driver device,选择select,发现test menu 已经在配置菜单界面显示出来 (6)选择test menu进入具体的配置,可以选择Y/N/M,这里我选择编译为M,即模块化 (7)保存退出后出现 (8)进入kernels目录中使用“ls -a”查看隐藏文件,发现多出.config隐藏文件,查看.config 文件

linux内核编译和生成makefile文件实验报告

操作系统实验报告 姓名:学号: 一、实验题目 1.编译linux内核 2.使用autoconf和automake工具为project工程自动生成Makefile,并测试 3.在内核中添加一个模块 二、实验目的 1.了解一些命令提示符,也里了解一些linux系统的操作。 2.练习使用autoconf和automake工具自动生成Makefile,使同学们了解Makefile的生成原理,熟悉linux编程开发环境 三、实验要求 1使用静态库编译链接swap.c,同时使用动态库编译链接myadd.c。可运行程序生成在src/main目录下。 2要求独立完成,按时提交 四、设计思路和流程图(如:包括主要数据结构及其说明、测试数据的设计及测试结果分析) 1.Makefile的流程图: 2.内核的编译基本操作 1.在ubuntu环境下获取内核源码 2.解压内核源码用命令符:tar xvf linux- 3.18.12.tar.xz 3.配置内核特性:make allnoconfig 4.编译内核:make 5.安装内核:make install

6.测试:cat/boot/grub/grub.conf 7.重启系统:sudo reboot,看是否成功的安装上了内核 8.详情及结构见附录 3.生成makefile文件: 1.用老师给的projec里的main.c函数。 2.需要使用automake和autoconf两个工具,所以用命令符:sudo apt-get install autoconf 进行安装。 3.进入主函数所在目录执行命令:autoscan,这时会在目录下生成两个文件 autoscan.log和configure.scan,将configure.Scan改名为configure.ac,同时用gedit打开,打开后文件修改后的如下: # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS]) AC_CONFIG_SRCDIR([main.c]) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE(main,1.0) # Checks for programs. AC_PROG_CC # Checks for libraries. # Checks for header files. # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_OUTPUT(Makefile) 4.新建Makefile文件,如下: AUTOMAKE_OPTIONS=foreign bin_PROGRAMS=main first_SOURCES=main.c 5.运行命令aclocal 命令成功之后,在目录下会产生aclocal.m4和autom4te.cache两个文件。 6.运行命令autoheader 命令成功之后,会在目录下产生config.h.in这个新文件。 7.运行命令autoconf 命令成功之后,会在目录下产生configure这个新文件。 8.运行命令automake --add-missing输出结果为: Configure.ac:11:installing./compile’ Configure.ac:8:installing ‘.install-sh’ Configure.ac:8:installing ‘./missing’ Makefile.am:installing ‘./decomp’ 9. 命令成功之后,会在目录下产生depcomp,install-sh和missing这三个新文件和执行下一步的Makefile.in文件。 10.运行命令./configure就可以自动生成Makefile。 4.添加内核模块

linux、内核源码、内核编译与配置、内核模块开发、内核启动流程

linux、内核源码、内核编译与配置、内核模块开发、内核启动流程(转) linux是如何组成的? 答:linux是由用户空间和内核空间组成的 为什么要划分用户空间和内核空间? 答:有关CPU体系结构,各处理器可以有多种模式,而LInux这样的划分是考虑到系统的 安全性,比如X86可以有4种模式RING0~RING3 RING0特权模式给LINUX内核空间RING3给用户空间 linux内核是如何组成的? 答:linux内核由SCI(System Call Interface)系统调用接口、PM(Process Management)进程管理、MM(Memory Management)内存管理、Arch、 VFS(Virtual File Systerm)虚拟文件系统、NS(Network Stack)网络协议栈、DD(Device Drivers)设备驱动 linux 内核源代码 linux内核源代码是如何组成或目录结构? 答:arc目录存放一些与CPU体系结构相关的代码其中第个CPU子目录以分解boot,mm,kerner等子目录 block目录部分块设备驱动代码 crypto目录加密、压缩、CRC校验算法 documentation 内核文档 drivers 设备驱动 fs 存放各种文件系统的实现代码 include 内核所需要的头文件。与平台无关的头文件入在include/linux子目录下,与平台相关的头文件则放在相应的子目录中 init 内核初始化代码 ipc 进程间通信的实现代码 kernel Linux大多数关键的核心功能者是在这个目录实现(程序调度,进程控制,模块化) lib 库文件代码 mm 与平台无关的内存管理,与平台相关的放在相应的arch/CPU目录net 各种网络协议的实现代码,注意而不是驱动 samples 内核编程的范例 scripts 配置内核的脚本 security SElinux的模块 sound 音频设备的驱动程序 usr cpip命令实现程序 virt 内核虚拟机 内核配置与编译 一、清除 make clean 删除编译文件但保留配置文件

linux 内核编译编译选项

1.Code maturity level options 代码成熟等级。此处只有一项:prompt for development and/or incomplete code/drivers,如果你要试验现在仍处于实验阶段的功能,就必须把该项选择为Y了;否则可以把它选择为N。 2. Loadable module support 对模块的支持。这里面有三项: Enable loadable module support:除非你准备把所有需要的内容都编译到内核里面,否则该项应该是必选的。 Set version inFORMation on all module symbols:可以不选它。 Kernel module loader:让内核在启动时有自己装入必需模块的能力,建议选上。 3. Processor type and features CPU类型。有关的几个如下: Processor family:根据你自己的情况选择CPU类型。 High Memory Support:大容量内存的支持。可以支持到4G、64G,一般可以不选。 Math emulation:协处理器仿真。协处理器是在386时代的宠儿,现在早已不用了。 MTTR support:MTTR支持。可不选。 Symmetric multi-processing support:对称多处理支持。除非你富到有多个CPU,否则就不用选了。 4. General setup 这里是对最普通的一些属性进行设置。这部分内容非常多,一般使用缺省设置就可以了。下面介绍一下经常使用的一些选项: Networking support:网络支持。必须,没有网卡也建议你选上。 PCI support:PCI支持。如果使用了PCI的卡,当然必选。 PCI access mode:PCI存取模式。可供选择的有BIOS、Direct和Any,选Any 吧。 Support for hot-pluggabel devices:热插拔设备支持。支持的不是太好,可不选。 PCMCIA/CardBus support:PCMCIA/CardBus支持。有PCMCIA就必选了。System V IPC BSD Process Accounting Sysctl support:以上三项是有关进程处理/IPC调用的,主要就是System V 和BSD两种风格。如果你不是使用BSD,就按照缺省吧。 Power Management support:电源管理支持。 Advanced Power Management BIOS support:高级电源管理BIOS支持。

史上最全linux内核配置详解

对于每一个配置选项,用户可以回答"y"、"m"或"n"。其中"y"表示将相应特性的支持或设备驱动程序编译进内核;"m"表示将相应特性的支持或设备驱动程序编译成可加载模块,在需要时,可由系统或用户自行加入到内核中去;"n"表示内核不提供相应特性或驱动程序的支持。只有<>才能选择M 1. General setup(通用选项) [*]Prompt for development and/or incomplete code/drivers,设置界面中显示还在开发或者还没有完成的代码与驱动,最好选上,许多设备都需要它才能配置。 [ ]Cross-compiler tool prefix,交叉编译工具前缀,如果你要使用交叉编译工具的话输入相关前缀。默认不使用。嵌入式linux更不需要。 [ ]Local version - append to kernel release,自定义版本,也就是uname -r可以看到的版本,可以自行修改,没多大意义。 [ ]Automatically append version information to the version string,自动生成版本信息。这个选项会自动探测你的内核并且生成相应的版本,使之不会和原先的重复。这需要Perl的支持。由于在编译的命令make-kpkg 中我们会加入- –append-to-version 选项来生成自定义版本,所以这里选N。 Kernel compression mode (LZMA),选择压缩方式。 [ ]Support for paging of anonymous memory (swap),交换分区支持,也就是虚拟内存支持,嵌入式不需要。 [*]System V IPC,为进程提供通信机制,这将使系统中各进程间有交换信息与保持同步的能力。有些程序只有在选Y的情况下才能运行,所以不用考虑,这里一定要选。 [*]POSIX Message Queues,这是POSIX的消息队列,它同样是一种IPC(进程间通讯)。建议你最好将它选上。 [*]BSD Process Accounting,允许进程访问内核,将账户信息写入文件中,主要包括进程的创建时间/创建者/内存占用等信息。可以选上,无所谓。 [*]BSD Process Accounting version 3 file format,选用的话统计信息将会以新的格式(V3)写入,注意这个格式和以前的v0/v1/v2 格式不兼容,选不选无所谓。 [ ]Export task/process statistics through netlink (EXPERIMENTAL),通过通用的网络输出工作/进程的相应数据,和BSD不同的是,这些数据在进程运行的时候就可以通过相关命令访问。和BSD类似,数据将在进程结束时送入用户空间。如果不清楚,选N(实验阶段功能,下同)。 [ ]Auditing support,审计功能,某些内核模块需要它(SELINUX),如果不知道,不用选。 [ ]RCU Subsystem,一个高性能的锁机制RCU 子系统,不懂不了解,按默认就行。 [ ]Kernel .config support,将.config配置信息保存在内核中,选上它及它的子项使得其它用户能从/proc/ config.gz中得到内核的配置,选上,重新配置内核时可以利用已有配置Enable access to .config through /proc/config.gz,上一项的子项,可以通过/proc/ config.gz访问.config配置,上一个选的话,建议选上。 (16)Kernel log buffer size (16 => 64KB, 17 => 128KB) ,内核日志缓存的大小,使用默认值即可。12 => 4 KB,13 => 8 KB,14 => 16 KB单处理器,15 => 32 KB多处理器,16 => 64 KB,17 => 128 KB。 [ ]Control Group support(有子项),使用默认即可,不清楚可以不选。 Example debug cgroup subsystem,cgroup子系统调试例子 Namespace cgroup subsystem,cgroup子系统命名空间 Device controller for cgroups,cgroups设备控制器

配置和编译Linux内核

配置和编译Linux内核 对内核进行正确配置后,才能进行编译。配置不当的内核,很有可能编译出错,或者不能正确运行。 1.1.1 快速配置内核 进入Linux内核源码数顶层目录,输入make menuconfig命令,可进入如图0.1所示的基于Ncurses的Linux内核配置主界面(注意:主机须安装ncurses相关库才能正确运行该命令并出现配置界面)。如果没有在Makefile中指定ARCH,则须在命令行中指定: $ make ARCH=arm menuconfig 图0.1基于Ncurses的Linux内核配置主界面 基于Ncurses的Linux内核配置界面不支持鼠标操作,必须用键盘操作。基本操作方法: ?通过键盘的方向键移动光标,选中的子菜单或者菜单项高亮; ?按TAB键实现光标在菜单区和功能区切换; ?子菜单或者选项高亮,将光标移功能区选中