博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux之基础篇-编译核心
阅读量:2188 次
发布时间:2019-05-02

本文共 2249 字,大约阅读时间需要 7 分钟。

一、什么情况下,需要对核心重新编译?

1.          针对特定的CPU类型优化核心;

2.          提供对没有编译到标准核心文件中的硬件驱动的支持;

3.          支持特殊的硬件;

4.          Bug修复或增加新特征所需要的驱动更新;

5.          使用新核心中的新特征;

6.          为了优化内存而删除不再使用的驱动和特征。

二、准备源码

1. 获取源码

A, 从上下载Linus标准核心

B, 使用厂商提供的核心源码软件包

2. 解包

扩展名为tar.gz的源码包

A, tar   xzvf    linux-2.6.9.tar.gz

-x:从存档展开文件

-z:用 gzip 对存档压缩或解压

-v:详细显示处理的文件

-f:指定存档或设备 

B, gzip  -dc  linux-2.6.9.tar.gz|tar -xvf-

-d:解压缩

-c:标准输出

C, zcat linux-2.6.9.tar.gz|tar  -xvf -

扩展名为tar.bz2的源码包

bunzip2(或bzip2  -dc  linux-2.4.29.tar.bz2|tar -xvf -

bzcat  linux-2.4.29.tar.bz2|tar  -xvf -

3.如果用户只从不同版本之间修改核心,就不用下载整个核心,只下载补丁即可

解包后运行patch  -p0  -N  -E  -s   patch-2.2.14

-pnumpatch文件内容中定义的文件和被patch的文件的相对路径决定的

-N:忽略那些看起来被颠倒的或已经应用过的补丁

-E:在应用补丁后删除空的文件

-s:安静模式

这样可以把/usr/src/linux下的源码从2.2.13版本更新到2.2.14版本

三、整理源码

a.运行命令make mrproper

b.目的是清除原先此目录下残留的.config.oobject文件),如果我们是刚下载的源码,那么这一步就可以省了,但是如果已经编译过多次内核的话,这一步可是一定要的

四、配置核心

1.配置核心的四种方法

make config

基于文本的最为传统的配置界面

缺陷是一旦选择了某种操作,不可能再回去更改,要重新运行该命令来修改。

make menuconfig

基于文本选单的配置界面,推荐使用

运行该命令需要ncurse库,ncurse是字符模式的全屏幕编程类库,

一般的终端都支持

make xconfig

基于图形窗口模式的配置界面

需要启动X Server,需要Tcl/tk的支持

make oldconfig

如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦

2.进行配置时,大部分选项可以使用其缺省值,只有小部分需要根据用户不同的需要选择。例如,如果需要内核支持DOS分区的文件系统,则要在文件系统部分选择FATDOS系统支持;系统如果配有网卡、PCMCIA卡等,需要在网络配置中选择相应卡的类型。

3.选择相应的配置时,有三种选择,它们分别代表的含义如下:

Y 将该功能编译进内核
N 不将该功能编译进内核
M 将该功能编译成可以在需要时动态插入到内核中的模块。

4.将与核心其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响。许多功能都可以这样处理,例如像上面提到的网卡的支持、对FAT等文件系统的支持。

5.编译内核最关键的地方就是配置内核

五、编译

 make dep (确保关键文件在正确的位置) 2.5.*-2.6.0都不需要了。其实2.4.*某些内核也不需要了

make clean (确保所有有关文件都处于最新版本状态)

make zImage (编译压缩形式的内核)

在需要内核支持较多的外设和功能时,内核可能变得很大,此时可以编译大内核:

make bzImage(现在的内核一般都超过1MB,所以应该使用该命令)

注意:2.6以后的版本没有make dep,在配置完核心后,运行make install即可,其实2.4.21后的版本也可以这样做。

六、安装

1.LILO

cp ./arch/i386/boot/zImage /boot/vmlinuz-$VERSION

cd /boot

rm vmlinuz

ln s vmlinuz-$VERSION  vmlinuz

lilo –v

为了避免新编译的内核有问题而无法启动,上面所做的中间

三步改为直接修改/etc/lilo.conf

image=/boot/vmlinuz 

label=linux 
initrd=/boot/initrd 
read-only 
root=/dev/hda3 
vga=769 
image=/boot/vmlinuz-2.4.29 
label=linux-2.4.29 
initrd=/boot/initrd 
read-only 
root=/dev/hda3 
vga=769 
image=/boot/vmlinuz 
label=linux-SafeMode 
initrd=/boot/initrd 
read-only 
root=/dev/hda3 

中间部分为新核心

 

按上图修改lilo.conf,这样即使在新的核心无法启动时,也可以用旧核心启动系统。

2.Loadlin

zImagebzImage文件拷贝到相应的DOS分区内重启系统

3.Boot软盘

运行make zdisk来创建启动软盘

转载地址:http://mjzub.baihongyu.com/

你可能感兴趣的文章
(PAT 1073) Scientific Notation (字符串模拟题)
查看>>
(PAT 1080) Graduate Admission (排序)
查看>>
Play on Words UVA - 10129 (欧拉路径)
查看>>
mininet+floodlight搭建sdn环境并创建简答topo
查看>>
【linux】nohup和&的作用
查看>>
Set、WeakSet、Map以及WeakMap结构基本知识点
查看>>
【NLP学习笔记】(一)Gensim基本使用方法
查看>>
【NLP学习笔记】(二)gensim使用之Topics and Transformations
查看>>
【深度学习】LSTM的架构及公式
查看>>
【python】re模块常用方法
查看>>
剑指offer 19.二叉树的镜像
查看>>
剑指offer 20.顺时针打印矩阵
查看>>
剑指offer 21.包含min函数的栈
查看>>
剑指offer 23.从上往下打印二叉树
查看>>
剑指offer 25.二叉树中和为某一值的路径
查看>>
剑指offer 60. 不用加减乘除做加法
查看>>
Leetcode C++《热题 Hot 100-14》283.移动零
查看>>
Leetcode C++《热题 Hot 100-15》437.路径总和III
查看>>
Leetcode C++《热题 Hot 100-17》461.汉明距离
查看>>
Leetcode C++《热题 Hot 100-18》538.把二叉搜索树转换为累加树
查看>>