知识屋:更实用的电脑技术知识网站
所在位置:首页 > 操作系统 > linux

Linux核心编译

发布时间:2014-09-05 17:09:11作者:知识屋

 

核心更新的目的

1. 原来的核心太臃肿,为了系统更加稳定,去掉不需要的功能

2. 新功能的需求

3. 为了适应更新的硬件,需要编译核心

4. 嵌入式系统的需要

核心的版本

? 版本的组成--:『[主].[次].[释出]-[修改]』

? 次版本位为奇数则说明此版本位测试版本(2.5.x),为偶数说明是稳定版本(2.6.x)。

? 不同版本间升级要注意核心函数库的变更情况,如变动大不建议升级核心以免造成依赖的软件不可用

? 核心释放的官方网站为:www.kernel.org

? 核心patch的升级要连续版本升级,查看patch说明才能决定

核心源码的下载安装

1. 源码的解压缩位置

a) 一般位于/usr/src/kernels/

b) 命令为tar -jxvf linux-2.6.30.3.tar.bz2 -C /usr/src/kernels/

arch :与硬体平台有关的项目,大部分指的是CPU 的类别,例如x86, x86_64, Xen 虚拟支援等;

block :与区块装置较相关的设定资料,区块资料通常指的是大量储存媒体!还包括类似ext3 等档案系统的支援是否允许等。

crypto :核心所支援的加密的技术,例如md5 或者是des 等等;

Documentation :与核心有关的一堆说明文件,若对核心有极大的兴趣,要瞧瞧这里!

drivers :一些硬体的驱动程式,例如显示卡、网路卡、PCI 相关硬体等等;

firmware :一些旧式硬体的微指令码(韧体) 资料;

fs :核心所支援的filesystems ,例如vfat, reiserfs, nfs 等等;

include :一些可让其他程序呼叫的标头(header) 定义资料;

init :一些核心初始化的定义功能,包括挂载与init 程式的呼叫等;

ipc :定义Linux 作业系统内各程序的沟通;

kernel :定义核心的程序、核心状态、执行绪、程序的排程(schedule)、程序的讯号(signle) 等

lib :一些函式库;

mm :与记忆体单元有关的各项资料,包括swap 与虚拟记忆体等;

net :与网路有关的各项协定资料,还有防火墙模组(net/ipv4/netfilter/*) 等等;

security :包括selinux 等在内的安全性设定;

sound :与音效有关的各项模组;

virt :与虚拟化机器有关的资讯,目前核心支援的是KVM (Kernel base Virtual Machine)

2. 源码下面的目录,以及用处

3. 核心编译前的处理和核心功能选择

a) 检测硬件

b) 核心功能需求

4. 编译前的做法

a) 保持干净的源码

·Make dep 保证所需要的文件都在相关位置

·make mrproper 将会删除所有的配置文件,包括之前编译过核心留下来的配置

·make clean 只删除编译中间产生的中间代码,保留之前配置的核心配置

b) 开始挑选核心功能

·Make menuconfig 用文本目录模式来挑选核心功能

·Make oldconfig 通过已存在的配置文件,来修改核心功能

·Make xconfig 以Qt为基础的图形界面来显示,需要用Qt设计的X Window,KDE可以使用

·Make gconfig 以ftk为基础的图形界面来显示,GNOME可以使用

·Make config 老是方法,文本问答模式,不可逆,不建议

c) 核心功能的细项解释

 

 clip_image002

· 设置方式

 

1. 『左右方向键』:可以移动最底下的<Select>, <Exit>, <Help>项目;

2. 『上下方向键』:可以移动上面大框框部分的反白光柱,若该行有箭头(---&gt;) 则表示该行内部还有其他细项需要来设定的意思;

3. 选定项目:以『上下键』选择好想要设定的项目之后,并以『左右键』选择<Select> 之后, 按下『Enter 』就可以进入该项目去作更进一步的细部设定;

4. 可挑选之功能:在细部项目的设定当中,如果前面有[ ] 或< > 符号时,该项目才可以选择, 而选择可以使用『空白键』来选择;

5. 若为[*] <*> 则表示编译进核心;若为<M> 则表示编译成模组! 尽量在不知道该项目为何时,且有模组可以选,那么就可以直接选择为模组!

6. · 当在细项目选择<Exit> 后,并按下Enter ,那么就可以离开该细部项目!

· 解释

1. General setup

与Linux 最相关的程序互动、核心版本说明、是否使用发展中程式码等资讯都在这里设定的。这里的项目主要都是针对核心与程式之间的相关性来设计的,基本上,保留预设值即可! 不要随便取消底下的任何一个项目,因为可能会造成某些程式无法被同时执行的困境喔! 不过底下有非常多新的功能,如果你有不清楚的地方,可以按<Help> 进入查阅,里面会有一些建议! 你可以依据Help 的建议来选择新功能的启动与否!

d) 编译命令:

·Make vmlinux 编译未经压缩的核心

·Make modules 编译内核模块

·Make bzImage 编译经过压缩后的核心

·Make all 进行以上三个动作

e) 安装核心以及核心模块

· 把生成的核心文件copy到boot目录

·Make modules_install 安装核心模块

1. mkinitrd -v /boot/initrd-2.6.30.3vbird.img 2.6.30.3vbird

·Mkinitrd –v 目标文件 核心版本 生成initrd文件

· 修改grub.conf文件,来引导新核心启动

f) 额外单一模块的编译

· 模块编译的准备工作

1. Make GCC 等编译工具

2. Kernel-devel软件

· 单一模块的编译

1. 核心中有的功能没有编译,需要核心源码编译

a) 源码所在目录下达make menuconfig讲选项设定没模块

b) 然后make fs/ntfs编译出所需要的模块

c) 将该模块复制到相关的目录里面

d) Depmod –a生成依赖性关系

2. 核心中没有的功能,需要第三方源码编译

a) 源码解压

b) 源码编译出目标文件

c) 安装模块

i. make install

ii. install -m 744 -c r8168.ko /lib/modules/2.6.30.3vbird/kernel/drivers/net/

d) 更新模块依赖性信息 depmod –a

(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜