Linux 内核编译
http://www.cnblogs.com/zhunian/archive/2012/04/04/2431883.html
创建内核的第一步是创建一个 .config 文件,此文件含有内核的选项,像是文件系统、SCSI、网络功能支持等。有许多功能可以直接编译到内核,也可编译成模块。对于每一个配置选项,你有下列三种选择:
- 编译进内核(回答“yes”)
- 编译成模块(回答“m”)
- 不想要该功能(回答“no”)
Linux 开发者提供三种方法让你产生 .config 文件,分别是 make confg(命令行), make menuconfig(文本模式的菜单环境), make xconfig(GUI 菜单窗口)。
在创建好 .config 文件之后,下一步是稍微修改 Makefile 的内容,使你新建的内核与 Linux distribution 随附的通用内核有所区别。
VERSION =
PATCHLEVEL =
SUBLEVEL =
EXTRAVERSION =
建议你将 EXTRAVERSION 改成其他有意义的值,例如 -p4custom,如此产生出来的内核版本是2.4.31-p4custom。
编译步骤:
1 切换工作目录
cd /usr/src/linux-2.6
2 产生 .config 文件
zcat /proc/config.gz > .config
或如果你有当前内核的配置,请将它复制到工作目录下的 .config 中,然后执行 make oldconfig
cp /boot/previous-config .config
make oldconfig
3 调整内核选项
make menuconfig(在文字终端环境下)
make xconfig(在X窗口系统环境下)
4 清理前次编译过程遗留下的文件,第一次编译时刻省略
make clean
5 开始编译
make
2.6.x 版内核把 make dep, make bzImage, make modules 三个步骤整合成了一个 make
6 安装模块
make modules_install
7 安装
make install
例如:当前系统为CentOS Linux release 6.0 (Final),内核版本为2.6.32-71.el6.i686.由于最近内核出现最新的漏洞(linux kernel 又爆内存提权漏洞,2.6.39 内核无一幸免,所以将内核升级至3.2.2最新版本。
1. 查看当前系统内核
# uname -r
2 2.6.32-71.el6.i686
2. 下载linux-3.2.2内核包
# cd ~
# wget -c http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.2.2.tar.bz2
# tar jxvf linux-3.2.2.tar.bz2
# cd linux-3.2.2
3. 配置内核并安装
# make mrproper #清除环境变量,即清除配置文件
# make menuconfig #在菜单模式下选择需要编译的内核模
找到以下选中选项并选中networking support → networking options → network packet filtering framework(netfilter)
(1).core netfilter configuration
- 勾中”Netfilter connection tracking support” -m state相关模块是依赖它的,不选则没有。
- 将netbios name service protocal support(new) 编译成模块,不然后面升级iptables后启动时会出错
- 勾中“Netfilter Xtables support (required for ip_tables)”
(2).IP: Netfilter Configuration
- 将 “IPv4 connection tracking support (require for NAT)” 编译成模块。
- 勾中IP tables support (required for filtering/masq/NAT) 。
- 将 “Full NAT” 下的 “MASQUERADE target support” 和 “REDIRECT target support” 编译成模块
(3).其它模块可以根据自己的需要进行选择,若不懂可以参考内核配置手册.
# make clean #确保所有东西均保持最新状态.
# make bzImage #生成内核文件
# make modules #编译模块
# make modules_install #安装模块
# make install #安装
4. 编辑 /etc/grub.conf 文件,将 default=1 改为 default=0
# cat /etc/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/mapper/VolGroup-lv_root
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS Linux (3.2.2)
root (hd0,0)
kernel /vmlinuz-3.2.2 ro root=/dev/mapper/VolGroup-lv_root rd_LVM_LV=VolGroup/lv_root rd_LVM_LV=VolGroup/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet
initrd /initramfs-3.2.2.img
title centos (2.6.32-71.el6.i686)
root (hd0,0)
kernel /vmlinuz-2.6.32-71.el6.i686 ro root=/dev/mapper/VolGroup-lv_root rd_LVM_LV=VolGroup/lv_root rd_LVM_LV=VolGroup/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet
initrd /initramfs-2.6.32-71.el6.i686.img
5. 重启系统,并查看内核
# reboot # uname -r
3.2.2
Linux 内核编译的更多相关文章
- 运行在TQ2440开发板上以及X86平台上的linux内核编译
一.运行在TQ2440开发板上的linux内核编译 1.获取源码并解压 直接使用天嵌移植好的“linux-2.6.30.4_20100531.tar.bz2”源码包. 解压(天嵌默认解压到/opt/E ...
- linux内核编译环境配置
linux内核编译环境配置 如果不是编译内核,只需要安装与内核相匹配的kernel-devel开发包即可.即是/lib/modules/`uname -r`/build -> /usr/src/ ...
- Linux内核编译与安装
2013-04-16 Linux内核介绍 Linux内核是一个用C语言写成的,符合POSIX标准的类Unix操作系统.内核是操作系统中最基本的一部分,提供了众多应用程序访问计算机硬件的机制.L ...
- Lab1:Linux内核编译及添加系统调用(详细版)
实验一:Linux内核编译及添加系统调用(HDU) 花了一上午的时间来写这个,良心制作,发现自己刚学的时候没有找到很详细的,就是泛泛的说了下细节地方也没有,于是自己写了这个,有点长,如果你认真的看完了 ...
- Linux内核编译、安装流程
原文链接:https://blog.csdn.net/qq_28437139/article/details/83692907 此处只讲linux内核编译步骤至于安装虚拟机,安装ubuntu操作系统请 ...
- Linux内核编译完整过程
Linux内核编译完整过程 通过网上的资料我自己的实际内核编译,我把对Linux内核编译的过程写在这里,也许对其他的Linux爱好者的编译学习有些帮助,其中很大部分是网上的资料,另外就是我在实际编译过 ...
- Linux 内核 编译模块
背景: 由于调试内核或者由于分区大小限制,有时候内核组件不一定完全需要编进内核中. 所以,在开发中经常将内核组件编译成为模块,等到在恰当的时机加载. 概览: Linux内核模块的编译方法有两种: 1. ...
- Linux内核编译配置脚本
环境 宿主机平台:Ubuntu 16.04.6 目标机:iMX6ULL Linux内核编译配置脚本 在linux开发过程中熟练使用脚本可以大大简化命令行操作,同时对于需要经常重复操作的指令也是一种备忘 ...
- linux内核编译,配置本机驱动
1.前言 编译linux内核失败的原因很多时候就是驱动选错,适合自己本机的驱动没编译进去.面对特殊平台(或者有些洁癖者,我就是^_^),要编译精简内核,只要本机驱动,其他都不需要.面对内核里面这么多 ...
- linux内核编译相关
参考:http://www.arm.linux.org.uk/docs/kerncomp.php 一. 内核编译1) linux 2.4make clean/make mrpropermake dep ...
随机推荐
- MongoDB win安装后无法远程连接访问
mongoDB安装后无法远程连接访问,原因是端口没有开放允许连接的权限 开启允许连接的权限: 管理工具-高级win防火墙
- Hybrid App开发者一定不要错过的框架和工具///////////z
ionicFramework 我是hybrid app的忠实粉丝和大力倡导者,从 新浪移动云开始就不断的寻找能帮助Web程序员开发出漂亮又好用的UI层框架.在历经了jqmobile.sencha to ...
- 2.2 C#的注释
注释,是代码中的一些“说明文档”,注释注释本身不会参与程序代码的编译和运行,仅仅是为了方便程序员阅读. C#的注释分为:单行注释.多行注释.文档注释. 单行注释的符号是2条斜杠线(斜线的方向是左下到右 ...
- Unit01: JAVA开发环境
Top JAVA开发环境 1. JAVA开发环境 1.1. 认识Linux操作系统 1.1.1. Linux的由来及发展 Linux起源于1991年,1995年流行起来,大家可以看到旁边的这个人,它就 ...
- Python 多线程教程:并发与并行
转载于: https://my.oschina.net/leejun2005/blog/398826 在批评Python的讨论中,常常说起Python多线程是多么的难用.还有人对 global int ...
- C语言初学者代码中的常见错误与瑕疵(23)
见:C语言初学者代码中的常见错误与瑕疵(23)
- 我认识的log4j开源日志
Log4j 在java中如何配置log4j!! 步骤: ①引入jar包,推荐新建一个lib文件夹,用来装所有的jar包(还要进行下图内的操作) 之后项目中就会多出一个引入外部Library的项目 ②创 ...
- JBOSS服务器的安装及配置
1 安装jdk(jdk-1_5_0_05-windows-i586-p.exe)2 配置jdk环境 安装完成后还需要配置运行时环境:右键点击"我的电脑"->"属性& ...
- windows系统nginx配置root绝对路径的问题
看了下logs下面的error.log文件,发现路径有问题,修改了conf配置,把root的路径反斜杠要用两个反斜杠进行转义,再次运行正常了.
- MVC系列2-Model
上一篇我讲了ASP.MET MVC的基础概念,我相信从上一篇,我们可以知道MVC的执行过程.这一篇我们开始讲解Model.我们知道,在我们的应用程序中,大多时候是在遵循业务逻辑通过UI操作数据.所以这 ...