Linux 2.6内核编译过程
2010-07-19 23:39
573 查看
以下是自己在vmware里编译Linux 2.6内核的全过程,只记录大致编译的步骤.具体要求根据实际情况而定.
获得内核源码的方式
FTP 地 址: ftp://ftp.kernel.org/pub/linux/kernel/v2.6/
HTTP 地 址: http://www.kernel.org/pub/linux/kernel/v2.6/
方式一:下载内核源码包
[root@station1 src]# tar -jxvf linux-2.6.34.1.tar.bz2
方式二:下载内核补丁包,使用patch升级.
[root@station1 src]# ln -s linux-2.6.34.1 linux
[root@station1 src]# cd linux
[root@station1 linux]# bunzip2 -dv /usr/local/src/patch-2.6.34.1.bz2 | patch -p1
/usr/local/src/patch-2.6.34.1.bz2: done
[root@station1 linux]#
查看是否安装了必要的工具:
[root@station1 linux]# rpm -qa | grep module-init
module-init-tools-3.3-0.pre3.1.54.el5
[root@station1 linux]# rpm -qa | grep mkinitrd
mkinitrd-5.1.19.6-54
[root@station1 linux]# rpm -qa |grep lvm2
lvm2-2.02.46-8.el5
[root@station1 linux]# rpm -qa |grep device-mapper
device-mapper-1.02.32-1.el5
下面开始进入正题:
[root@station1 ~]# uname -r
2.6.18-164.el5
[root@station1 src]# tar -jxvf linux-2.6.34.1.tar.bz2
[root@station1 src]# cd linux-2.6.34.1/
[root@station1 linux-2.6.34.1]# make mrproper
出现警告信息
[root@station1 linux-2.6.34.1]#
make: warning: Clock skew detected. Your build may be incomplete.
[root@station1 linux-2.6.34.1]#
解决
[root@station1 linux-2.6.34.1]# date
Sat Jun 26 14:23:38 CST 2010
[root@station1 linux-2.6.34.1]# date 07192010.21
Mon Jul 19 20:10:21 CST 2010
[root@station1 linux-2.6.34.1]# make mrproper #确保源代码目录下没有不正确的.o文件
[root@station1 linux-2.6.34.1]#
[root@station1 linux-2.6.34.1]# make menuconfig #配置内核各选项
如下图:
General setup -----> 核心的一般设定:
1. Prompt for development and/or incomplete code/driver
(核心的code开发维护,非kernel开发维护都建议不选择些选项)
说明: [ * ]--将该功能编译进内核
[ ]--不将该功能编译进内核,也不编成模块
[M]-以模块形式加载
2. 支持模块实时加载
3. Processor type and features处理器的类型和特点
Sysmetric multi-processing support 多处理器支持.
Generic x86 support 对x86的cpu架构支持较佳.
High Memory support (4GB) 较大内存支持.
4. Power management and ACPI options 电源管理选项
…………….
加载与保存配置文件.
核心的编译与安装
[root@station1 linux-2.6.34.1]# make clean #删除旧的*.o文件.
在2.6以前需要make bzImage;make modules 来制作核心文件与模块, 而且还需要将vmlinuz和System.map复制到/boot目录
注:如果同一版本的核心编译两次,得先将/lib/modules里面的核心模块先移掉或者改名.
例如: mv 2.6.12.2 2.6.14.2.old
[root@station1 linux-2.6.34.1]# make
[root@station1 linux-2.6.34.1]# make modules_install #安装模块
[root@station1 linux-2.6.34.1]# make install #安装新内核
[root@station1 linux-2.6.34.1]#reboot
启动错误信息1.
insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists
解决:
用原来的内核启动系统.
[root@station1 ~]# cp /boot/initrd-2.6.34.1liwanhong.liunx.img /tmp/
[root@station1 ~]# cd /tmp/;ls
gconfd-root keyring-pOzksI scim-panel-socket:0-root
initrd-2.6.34.1liwanhong.liunx.img mapping-root
keyring-jWuruw orbit-root
[root@station1 tmp]# mkdir initrd
[root@station1 tmp]# cd initrd
[root@station1 initrd]# zcat ../initrd-2.6.34.1liwanhong.liunx.img | cpio -i14545 blocks
[root@station1 initrd]# ls
bin dev etc init lib proc sbin sys sysroot
[root@station1 initrd]# vim init
重复加载了/lib/dm-region-hash.ko,删除其中加载项.
echo "Loading dm-region-hash.ko module"
insmod /lib/dm-region-hash.ko
[root@station1 initrd]# find . | cpio -c -o > ../newinitrd
14545 blocks
[root@station1 initrd]#
[root@station1 initrd]# cd ..
[root@station1 tmp]# gzip -9 <newinitrd> initrd.img
[root@station1 tmp]# ll | grep initrd
drwxr-xr-x 9 root root 4096 Jul 20 11:37 initrd
-rw------- 1 root root 3283050 Jul 20 11:28 initrd-2.6.34.1liwanhong.liunx.img
-rw-r--r-- 1 root root 3283045 Jul 20 11:49 initrd.img
-rw-r--r-- 1 root root 7447040 Jul 20 11:48 newinitrd
[root@station1 tmp]# cp initrd.img /boot/initrd-2.6.34.1liwanhong.liunx.img
cp: overwrite `/boot/initrd-2.6.34.1liwanhong.liunx.img'? yes
[root@station1 tmp]# reboot
启动错误信息2
Mount: could not find filesystem ‘/dev/root’…
解决:
[root@station1 ~]# cd /usr/src/linux-2.6.34.1/
[root@station1 linux-2.6.34.1]# vim .config
[align=left] [/align]
[align=left]设置.config文件,添加:[/align]
[align=left]CONFIG_SYSFS_DEPRECATED_V2=Y[/align]
[align=left]即:[/align]
[align=left]重新再编译一次.[/align]
[align=left]注:将之前安装的到/lib/modules里的模块删除./boot里的内核与ramdisk文件删除.[/align]
[align=left]再以新内核启动Linux:
[root@station1 ~]# uname -r[/align]
[align=left]2.6.34.1[/align]
[align=left][root@station1 ~]#[/align]
[align=left] [/align]
本文出自 “xxfvert” 博客,请务必保留此出处http://xxfvert.blog.51cto.com/794431/353182
获得内核源码的方式
FTP 地 址: ftp://ftp.kernel.org/pub/linux/kernel/v2.6/
HTTP 地 址: http://www.kernel.org/pub/linux/kernel/v2.6/
方式一:下载内核源码包
[root@station1 src]# tar -jxvf linux-2.6.34.1.tar.bz2
方式二:下载内核补丁包,使用patch升级.
[root@station1 src]# ln -s linux-2.6.34.1 linux
[root@station1 src]# cd linux
[root@station1 linux]# bunzip2 -dv /usr/local/src/patch-2.6.34.1.bz2 | patch -p1
/usr/local/src/patch-2.6.34.1.bz2: done
[root@station1 linux]#
查看是否安装了必要的工具:
[root@station1 linux]# rpm -qa | grep module-init
module-init-tools-3.3-0.pre3.1.54.el5
[root@station1 linux]# rpm -qa | grep mkinitrd
mkinitrd-5.1.19.6-54
[root@station1 linux]# rpm -qa |grep lvm2
lvm2-2.02.46-8.el5
[root@station1 linux]# rpm -qa |grep device-mapper
device-mapper-1.02.32-1.el5
下面开始进入正题:
[root@station1 ~]# uname -r
2.6.18-164.el5
[root@station1 src]# tar -jxvf linux-2.6.34.1.tar.bz2
[root@station1 src]# cd linux-2.6.34.1/
[root@station1 linux-2.6.34.1]# make mrproper
出现警告信息
[root@station1 linux-2.6.34.1]#
make: warning: Clock skew detected. Your build may be incomplete.
[root@station1 linux-2.6.34.1]#
解决
[root@station1 linux-2.6.34.1]# date
Sat Jun 26 14:23:38 CST 2010
[root@station1 linux-2.6.34.1]# date 07192010.21
Mon Jul 19 20:10:21 CST 2010
[root@station1 linux-2.6.34.1]# make mrproper #确保源代码目录下没有不正确的.o文件
[root@station1 linux-2.6.34.1]#
[root@station1 linux-2.6.34.1]# make menuconfig #配置内核各选项
如下图:
General setup -----> 核心的一般设定:
1. Prompt for development and/or incomplete code/driver
(核心的code开发维护,非kernel开发维护都建议不选择些选项)
说明: [ * ]--将该功能编译进内核
[ ]--不将该功能编译进内核,也不编成模块
[M]-以模块形式加载
2. 支持模块实时加载
3. Processor type and features处理器的类型和特点
Sysmetric multi-processing support 多处理器支持.
Generic x86 support 对x86的cpu架构支持较佳.
High Memory support (4GB) 较大内存支持.
4. Power management and ACPI options 电源管理选项
…………….
加载与保存配置文件.
核心的编译与安装
[root@station1 linux-2.6.34.1]# make clean #删除旧的*.o文件.
在2.6以前需要make bzImage;make modules 来制作核心文件与模块, 而且还需要将vmlinuz和System.map复制到/boot目录
注:如果同一版本的核心编译两次,得先将/lib/modules里面的核心模块先移掉或者改名.
例如: mv 2.6.12.2 2.6.14.2.old
[root@station1 linux-2.6.34.1]# make
[root@station1 linux-2.6.34.1]# make modules_install #安装模块
[root@station1 linux-2.6.34.1]# make install #安装新内核
[root@station1 linux-2.6.34.1]#reboot
启动错误信息1.
insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists
解决:
用原来的内核启动系统.
[root@station1 ~]# cp /boot/initrd-2.6.34.1liwanhong.liunx.img /tmp/
[root@station1 ~]# cd /tmp/;ls
gconfd-root keyring-pOzksI scim-panel-socket:0-root
initrd-2.6.34.1liwanhong.liunx.img mapping-root
keyring-jWuruw orbit-root
[root@station1 tmp]# mkdir initrd
[root@station1 tmp]# cd initrd
[root@station1 initrd]# zcat ../initrd-2.6.34.1liwanhong.liunx.img | cpio -i14545 blocks
[root@station1 initrd]# ls
bin dev etc init lib proc sbin sys sysroot
[root@station1 initrd]# vim init
重复加载了/lib/dm-region-hash.ko,删除其中加载项.
echo "Loading dm-region-hash.ko module"
insmod /lib/dm-region-hash.ko
[root@station1 initrd]# find . | cpio -c -o > ../newinitrd
14545 blocks
[root@station1 initrd]#
[root@station1 initrd]# cd ..
[root@station1 tmp]# gzip -9 <newinitrd> initrd.img
[root@station1 tmp]# ll | grep initrd
drwxr-xr-x 9 root root 4096 Jul 20 11:37 initrd
-rw------- 1 root root 3283050 Jul 20 11:28 initrd-2.6.34.1liwanhong.liunx.img
-rw-r--r-- 1 root root 3283045 Jul 20 11:49 initrd.img
-rw-r--r-- 1 root root 7447040 Jul 20 11:48 newinitrd
[root@station1 tmp]# cp initrd.img /boot/initrd-2.6.34.1liwanhong.liunx.img
cp: overwrite `/boot/initrd-2.6.34.1liwanhong.liunx.img'? yes
[root@station1 tmp]# reboot
启动错误信息2
Mount: could not find filesystem ‘/dev/root’…
解决:
[root@station1 ~]# cd /usr/src/linux-2.6.34.1/
[root@station1 linux-2.6.34.1]# vim .config
[align=left] [/align]
[align=left]设置.config文件,添加:[/align]
[align=left]CONFIG_SYSFS_DEPRECATED_V2=Y[/align]
[align=left]即:[/align]
[align=left]重新再编译一次.[/align]
[align=left]注:将之前安装的到/lib/modules里的模块删除./boot里的内核与ramdisk文件删除.[/align]
[align=left]再以新内核启动Linux:
[root@station1 ~]# uname -r[/align]
[align=left]2.6.34.1[/align]
[align=left][root@station1 ~]#[/align]
[align=left] [/align]
本文出自 “xxfvert” 博客,请务必保留此出处http://xxfvert.blog.51cto.com/794431/353182
相关文章推荐
- Linux 2.6 内核编译及过程分析
- Linux 2.6、4.3内核编译过程的感受与总结
- Linux 2.6、4.3内核编译过程的感受与总结
- Linux 2.6的内核编译过程
- Linux 2.6 内核编译及过程分析
- linux系统2.6内核编译全过程
- Linux 2.6内核编译安装全景体验(上)
- Linux 2.6内核的编译步骤及模块的动态加载
- Linux内核编译过程详解(kernel2.6.7) 转
- Linux内核编译配置过程
- linux内核编译过程及配置说明解释(5)--Bus options,Executable file formats,Emulations
- LInux 2.6 编译内核出现Question
- 一个Linux爱好者的2.6.11内核编译过程
- 在Linux 2.6内核下编译可以加载的内核模块
- LINUX内核编译过程详解[UBUNTU9.04 kernel 2.6.28.9]
- Linux-2.6.25内核编译简单过程
- Linux-2.6内核移植过程中常见问题及解决方法
- Linux2.6内核编译裁剪记录(Kernel panic - not syncing: Attempted to kill init!)
- linux-2.6内核的编译
- HOWTO compile kernel modules for the kernel 2.6: (编译linux2.6版本内核)