linux编译内核

前言

Linux内核是操作系统的核心,也是操作系统最基本的部分。
Linux内核的体积结构是单内核的,但是它充分采用了微内核的设计思想、使得虽然是单内核,但工作在模块化的方式下,并且这个模块可以动态装载或卸载;Linux负责管理系统的进程、内存管理、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。如果我们在了解Linux内核的基础上根据自己的需要量身定制一个更高效,更稳定的内核,就需要我们手动去编译和配置内核里的各项相关的参数和信息了。
注意:如果两个内核模块的版本不完全相同是不可以跨版本使用的

正文

首先我们要去获得Linux内核的源码文件,获得的路径很多了,最直接的就是去内核官网获得了(www.kernel.org),也可以到各镜像站上去下载。

注意:/usr/src;一般而言,我们制作Linux内核的时候把解压缩之后的源码文件放置这个目录下,但需要在此目录下创建一个叫linux的软链接指向解压缩后的内核源码目录。

编译内核前提

(1)准备好开发环境
(2)获取目标主机上硬件设备的相关信息
(3)获取目标主机系统功能的相关信息,例如要启用的文件系统
(4)获取内核源码包:www.kernel.org

准备开发环境

Centos 6
安装包组:
	Development Tools
	Server Platform Development

Centos 7
安装包组:
	Development Tools
	Server Platform Development
包:ncurses-devel

获取目标主机上硬件设备的相关信息

CPU:
	# cat /proc/cpuinfo
	# lscpu
	x86info -a

PCI设备:
	# lspci
		-v,-vv
	# lsusb
		-v,-vv
	# lsblk

内核编译过程

步骤:
(1)# tar -xf linux-3.10.67.tar.xz -C /usr/src   #将linux-3.10.67.tar.xz源码包解压至/usr/src目录下
(2)cd /usr/src    #cd到/usr/src目录下
(3)ln linu-3.10.67 linux  #创建一个名为linux的软链接至linux-3.10.67
(4)cd linux  #cd到linux软链接目录中
(5)make menuconfig   #配置内核选项
(6)make [-j #]    #编译内核,可使用-j指定编译线程数量
(7)make modules_install    #安装内核模块
(8)make install    #安装内核
	
	重启系统,选择使用新内核

注意:如果编译是在远程连接上的话,如果因为网络抖动make会出现问题的,如果远程连接断开的话那运行的进程也就断开了,这么make的过程一定是当前系统上运行的子进程,有些一旦父进程挂了,子进程也将不复存在,俗话说:皮之不存毛将焉附,就是这个道理吧
所以我们使用一个叫screen命令来操作,没安装自己安装就是了,可以在一个窗口上启动n个虚拟的桌面,即使退出了也会保留之前的内容。

screen命令
打开一个screen:# screen
拆除一个screen:# Ctrl+a,d
列出screen:# screen -ls
连接至screen:# screen -r SCREEN
关闭screen:# exit 或 Ctrl+d

过程详细说明

(1)配置内核选项
	支持"更新"模式进行配置;子啊已有的.config文件的基础上进行"修改"配置
		配置内核方法很多,主要有如下几种:
		(a)make config:基于命令行以遍历的方式去配置内核中可配置的每个选项(不推荐使用)
		(b)make menuconfig:基于ncurse库编制的图形工具界面
		(c)make gconfig:基于GTK开发环境的窗口界面;“桌面平台开发包组”
		(d)make xconfig:基于X11开发环境的窗口界面

由于对Linux还处在初学阶段,所以选择了简单的配置内核方法,即make menuconfig。在/usr/src/linux目录下在终端上输入make menuconfig,等待几秒后,终端变成图形化的内核配置界面。进行配置时,大部分选项使用其缺省值,只有一小部分需要根据不同的需要选择。
对每一个配置选项,用户有三种选择,它们分别代表的含义如下:
<*>或[*]   #将该功能编译进内核
[ ]    #不将该功能编译进内核
[M]   #将该功能编译成可以在需要时动态装载到内核中的代码

(2)编译
	(a)多线程编译:make [-j #]
	(b)编译内核中的一部分代码:
			(1)只编译某子目录中的相关代码
					# cd /usr/src/linux
					# make path/to/dir/
			(2)只编译一个特定的模块
				    # cd /usr/src/linux
				    # make path/to/dir/file.ko

	  (c)如何交叉编译:
			编译的目标平台与当前编译操作所在的平台不同
			# make ARCH=arch_name

			获取特定目标平台的使用帮助
				# make ARCH=arch_name help
(3)如何在执行过编译操作的内核源码树上做重新编译
	事先清理操作
		# make clean:清理编译生成的绝大多数文件,但会保留config,以编译外部模块所需要的文件
		# make mrproper:清理编译生成的所有文件,包括配置生成的config文件及某些备份文件
		# make distclean:相当于mrproper,额外清理各种patches以及编辑器备份文件



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值