linux重新编译内核

简介:

1.内容简介 
linux内核简介 
linux内核版本号 
linux为什么重新编译内核 
linux内核编译模式 
linux内核功能划分 
linux内核编译步骤


2linux内核简介 
内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动、文件和网络系统,决定着系统的性能和稳定性。

3.内核版本号 
确定内核版本uname -r 
一个树是稳定树(stable tree) 
一个树是非稳定树(unstable tree)或者开发树(development tree) 
源程序版本号的形式为x.y.z 
对于稳定树来说,y是偶数;对于开发树来说,y比相应的稳定树大一(因此,是奇数),比如说2.5.18是正在开发的版本,2.6.18是已经可以用的版本了。

4.为什么重新编译内核 
编译的原因 
支持新安装的硬件设备:比如您刚买了一块新的声卡,但是当前的内核没有提供其驱动,而新版本内核可以驱动该声卡。 
运行一个程序,但是操作系统不支持该程序需要的功能。 
某个用户需要的内核功能。 
用户希望对内核进行优化,自己定制编译的内核运行更快(具有更少的代码)。 
内核升级(驱动、BUG、意愿、功能、安全、有时间进行升级)。 
不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞。

为什么不编译 
如果只是想给内核加上很少数量的功能的话,就没有必要进行编译 
编译内核可能会遇到的困难:面对众多的选项

6.内核编译模式 
如果编译到内核中,在内核启动时就可以自动支持相应部分的功能,这样的优点是方便、速度快,机器一启动,你就可以使用这部分功能了;缺点是会使内核变得庞大起来,不管你是否需要这部分功能,它都会存在,这就是Windows惯用的招数,建议经常使用的部分直接编译到内核中,比如网卡。 
如果编译成模块,就会生成对应的.o文件,在使用的时候可以动态加载,优点是不会使内核过分庞大,缺点是你得自己来调用这些模块。

7.linux内核功能划分 
进程管理 
内存管理 
设备控制 
网络功能 
设备和模块分类 
字符设备、块设备、网络接口 
字符模块、块模块、网络模块

8.新版本内核的获取和更新 
linux内核版本发布的官方网站是http://www.kernel.org 
新版本的内核分两种, 
一种是full Source版本, 
一种是patch文件,即补丁

9.为内核源代码打补丁 
内核经常需要小规模地升级。每次升级修复一个特定的bug,增加一个新的驱动程序或者功能,或者实现其他任务。 
1) 下载主版本的源代码和升级到新版本需要的补丁的源代码。 
2) 使用c d命令把路径切换到/usr/src目录。 
3) 把下载的源代码和补丁都拷贝到这个目录中。 
4) 进入内核源码包内,执行 
bzcat ../patch-2.6.27 -p1 
zcat ../patch-2.6.27 -p1 
5) 准备编译

10.以实现挂载NTFS分区为例 
需要重新编译内核 (需要在make menuconfig时添加内核对ntfs的支持,如果不重新编译内核,可以下个软件,ntfs-3g来达到支持ntfs的功能)
编译内核 
 

 
  1. 1) 获取需要安装的内核源代码   
  2. 2) 使用tar命令把源代码解包到/usr/src/目录   
  3. 3) 使用cd命令把路径切换到这个目录   
  4. 4)"make mrproper"删除目前的配置和所有生成的文件(vim Makefile 1149)5) 选择你想使用的内核配置工具程序   
  5. 图形化功能最少,又很乏味的工具是config程序   
  6. 一个图形化的工具是menuconfig程序   
  7. 用于对内核进行配置的X工具总是最流行的,它叫做xconfig   
  8. Make [config|menuconfig|xconfig|oldconfig]   
  9. 保存并退出内核配置程序之后,就已经有了用来配置内核设置值了   
  10. 6) "make dep"这个命令在2.4以前版本使用。建立依赖关系表,它定义了包括在内核源代码中的某个特定文件如果发生了变化,就需要修改哪一个文件。   
  11. 7) "make bzImage" 完成建立新内核的过程   
  12. 8) "make modules" 编译内核模块并把它们存放到相应的位置。这是那些需要加载或者卸载的内核模块,另外还有一些固定加载的   
  13. 9) "make modules_install"命令安装模块到需要的位置   
  14. 10) "make install"将vmlinuz安装到/boot,并配置grub.conf(也可手动完成) 

11) "reboot"重新启动,加载新的内核

内核 mkinitrd BUG(个人认为) 
https://bugzilla.redhat.com/show_bug.cgi?id=488991 
No module dm-mem-cache found for 
No module dm-region found for 
No module dm-message found for 
No module dm-raid45 found for (此问题我已经解决) 
http://people.redhat.com/~heinzm/sw/dm/dm-raid45/

手动设置编译好的内核 
vmlinuz-2.6.27 
System.map-2.6.27 
initrd-2.6.27.img 
关于这三个文件的作用,大家可以到http://www.freeopens.com/2010_01_474.html看一下!

 

 
  1. # mkinitrd /boot/initrd-2.6.27.img 2.6.27 --without-dmraid   
  2. No module dm-mem-cache found for kernel 2.6.27, aborting.   
  3. # cp /usr/src/linux-2.6.27/arch/i386/boot/bzImage /boot/vmlinuz-2.6.7   
  4. # cp /usr/src/linux-2.6.7/System.map /boot/System.map-2.6.7 

 本文转自nxlhero 51CTO博客,原文链接:http://blog.51cto.com/nxlhero/407924,如需转载请自行联系原作者

相关文章
|
2月前
|
Linux Shell Perl
Linux三剑客(下)
Linux三剑客(下)
42 1
|
4月前
|
网络协议 安全 Linux
Linux的netns使用总结
Linux的netns(Network Namespace)是一项强大的网络隔离功能,可在内核层面创建多个独立的网络空间,每个空间配备独立的网络协议栈,包括接口、路由表及iptables规则等,确保不同应用或服务在网络环境中互不干扰,提升系统安全性和灵活性。通过`ip netns`命令可轻松管理netns,实现创建、删除及执行命令等功能。netns适用于容器技术、虚拟化环境及网络测试等多种场景,为用户提供高效、安全的网络环境管理方案。
368 3
|
Linux 数据安全/隐私保护
LINUX
用户密码
39 0
|
存储 网络协议 安全
[ linux ] 一篇文章让你掌握什么是linux
都说好的开始是成功的一半,那学习 Linux 的第一个问题是搞明白什么是 Linux ,了解其来龙去脉、前世今生,了解其发展趋势、应用前景,弄清楚为什么学习它,以及如何掌握它和使用它,知其然更要知其所以然。 本文希望让读者对 Linux 有一个宏观的认识,总览其整体,后续再依次讲解 Linux 的每一部分的知识点。 很多人看技术类图书都不喜欢或不重视第一章,甚至直接跳过去,觉得大多是介绍性的内容,且没什么 技术含量。然而我想说的是工欲善其事,必先利其器。建议不管学什么,不管看什么书籍,都不要忽视第一章的学习。
206 0
|
存储 Linux 文件存储
8.6 Linux /etc/gshadow
前面讲过,/etc/passwd 文件存储用户基本信息,同时考虑到账户的安全性,将用户的密码信息存放另一个文件 /etc/shadow 中。本节要将的 /etc/gshadow 文件也是如此,组用户信息存储在 /etc/group 文件中,而将组用户的密码信息存储在 /etc/gshadow 文件中。
163 0
8.6 Linux /etc/gshadow
|
Web App开发 IDE Java
玩转 Manjora,原来大神都是这么用 Linux!
玩转 Manjora,原来大神都是这么用 Linux!
263 0
玩转 Manjora,原来大神都是这么用 Linux!
|
Linux
Linux就该这么学
image.png elinks image.png uname -a uptime free -m who last cat ~/.
980 0
|
Linux
linux下DUCKDNS
版权声明:转载请注明出处:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/79396558 参考:https://www.youtube.com/watch?v=TyqbetLXwcY 登录https://www.duckdns.org选择你的域名,然后看官方文档。
1603 0
|
Linux
linux中的~ / .
~代表你的/home/用户目录 假设你的用户名是xxx,那么~/ = /home/xxx/ .是代表此目录本身,但是一般可以不写 所以cd ~/. = cd ~ = cd ~/ 但是.后面有东西又是另外一个问题,点在文件名头部,代表一个[隐藏文件] ~/.local是你的主目录下一个.local的文件夹的路径, 并且从.可以看出,这是一个饮藏文件, 如果不用ls -a的话,一般ls是无法看到的 / 是目录层的分隔、表示符。
1158 0
|
Linux 网络架构
linux内核数据结构之kfifo【转】
转自:http://www.cnblogs.com/Anker/p/3481373.html 1、前言   最近项目中用到一个环形缓冲区(ring buffer),代码是由linux内核的kfifo改过来的。
1147 0