初探Linux——内核编译

版权声明:转载时请标注http://blog.csdn.net/roger_lzh https://blog.csdn.net/Roger_LZH/article/details/53440809

此次操作环境为VirtualBox中的centos6.5,编译的内核内核版本为linux-2.6.32.63

1、下载内核

可以在终端输入指令查看自己的内核版本,如果系统不是centos6.5的可以根据自己的内核下一个更高版本的内核源码进行编译安装。

	uname -rs


kernel.org下载所需版本的内核源码

在终端运行

	wget https://kernel.org/pub/linux/kernel/v2.6/longterm/v2.6.32/linux-2.6.32.63.tar.xz

2、准备编译

拷贝内核代码到src目录

	cp ./linux-2.6.32.63.tar.xz /usr/src
解压缩代码,.tar.xz格式的代码不能直接用tar解压,要先解压成.tar文件,再用tar进行解压缩
	xz -d linux-2.6.32.63.tar.xz
	tar -xvf linux-2.6.32.63.tar


3、生成编译所需的配置文件

扫描二维码关注公众号,回复: 3866760 查看本文章

进入解压后的源码目录内,执行环境清空操作

	make distclean/make mrproper/make clean
	#make clean 删除大多数的编译生成文件, 但是会保留内核的配置文件.config, 还有足够的编译支持来建立扩展模块
	#make mrproper 删除所有的编译生成文件, 还有内核配置文件, 再加上各种备份文件
	#make distclean 将configure生成的文件全部删除掉,包括Makefile文件。
	#执行make mrproper, 会先执行make clean, 执行make distclean之前, 会先执行make mrproper。


准备配置文件

.config文件——用户选择的配置选项,存放内核配置后的结果

在/boot目录下有个linux系统安装时生成的config-*文件,可以基于该文件进行编译配置

	cp /boot/config-* ./.config


4、配置内核选项

	#三选一
	make defconfig/make config  #i386模板/全手工
	make oldconfig/make menuconfig/make (x)gconfig #基于.config或者/boot/config-*
	make [> /dev/null]

我直接采用/boot目录下的config-*,没有进行手工配置,直接开始编译内核。

5、开始编译内核

编译内核,此过程比较慢,为了加快编译速度,可添加选项-jn,其中n替换为线程数值,一般是cpu核数的两倍

	#二选一
	make
	make -jn all

在此过程中可能会报错说没有某个命令,我就出现了这个问题,把那个命令安装后重新回到第三步即可。

6、安装内核模块

内核编译过程中没有报错的话就可进行内核模块的安装,安装内核模块到/lib/modules/2.6.32的目录下

	make modules_install


7、安装内核镜像

将编译生成的内核镜像文件拷贝到启动分区目录下

	make install
	#作用等同于cp -v arch/x86/boot/bzImage /boot/vmlinuz-KernelName

为新内核创建一个initrd(initial RAM disk)
	mkinitrd /boot/initramfs-2.6.32.63.img 2.6.32.63

linux初始RAM磁盘(initrd)是在系统引导过程中挂载的一个临时根文件系统,用来支持两阶段的引导过程。initrd文件中包含了各种可执行程序和驱动程序,它们可以用来挂载实际的根文件系统。linux发行版在内核中只编译了基本的硬件驱动,在安装过程中通过检测系统硬件,生成包含安装系统硬件驱动的initrd。boot loader加载内核和initrd(以文件系统镜像文件形式存在)到内存,执行initrd中的init脚本加载驱动模块,执行完成后开始挂载真正的文件系统,在真正的根文件系统上进行正常启动过程,执行/sbin/init。


8、重启

内核到此编译安装完成,重启后可以在系统的引导界面看到你自己编译的内核。


猜你喜欢

转载自blog.csdn.net/Roger_LZH/article/details/53440809
今日推荐