vmware,ubuntu环境中linux内核编译 (很好)
来源:互联网 发布:淘宝详情页一张多少钱 编辑:程序博客网 时间:2024/06/05 18:05
转自:http://liantongxue.javaeye.com/blog/858168
vmware,ubuntu环境中linux内核编译
文章分类:操作系统这个周末搞了一下linux内核的编译,有一些经验在这里记录一下,以便以后查找方便。
软件环境:主操作系统Windows 7,虚拟机软件vmware 7.0.0 build-203739,客操作系统Ubuntu 10.04 内核版本2.6.32-23-generic。
1、 首先去www.kernel.org下载一个新内核包,本次使用的是最新稳定版2.6.34.1。
2、 用命令
tar jxf linux-2.6.34.1.tar.bz2
解压缩到任何目录下,我是解压缩在~/tmp下。
3、 然后cd linux-2.6.34.1/进入解压后的目录,利用命令
cp /boot/config-2.6.32-23-generic ./.config
将当前内核2.6.32-23-generic的编译配置文件从/boot分区中拷贝到当前目录下,并且重新命名为.config,这样就可以在当前正常运行的 内核编译配置下配置新的内核编译过程。
4、 在当前目录下运行命令
make xconfig
启动基于qt3的编译配置程序。在此之前,需要首先安装build-essential和qt3-dev-tools用以下两个命令从ubuntu的源得到
sudo apt-get install build-essential
sudo apt-get install qt3-dev-tools
启动xconfig之后,选择File菜单中的load,把先前拷贝过来的.config加载上。
5、 根据需要配置
6、 配置结束后,选择File中中save。把配置保存在.config文件中。
7、 用命令
make -jn
生成压缩的内核文件以及内核模块,其中n是个数字,表示同时开几个线程进行编译,有几个物理核心就开几个吧。
8、 命令
sudo make install
安装内核压缩文件到/boot分区中
命令
sudo make modules_install
安装内核动态加载模块文件到/lib/modules中相应的内核版本目录中。
9、 命令
sudo mkinitramfs -o /boot/initrd.img-2.6.34.1
在/boot分区中生成启动内存磁盘镜像文件。
10、 更新grub的启动菜单。Ubuntu 10.04采用了新版本的grub,
用update-grub命令可以直接生成grub启动菜单,此时新版本的内核应该在第一个启动位置;但是默认状态下启动菜单并不显示。要想显 示启动菜单,需要修改/etc/default/grub文件中
GRUB_HIDDEN_TIMEOUT=1
GRUB_TIMEOUT=n 这里n表示菜单显示超时时间,默认是10,这里改成自己喜欢的时间。但是这时候菜单的超时时间还是0,还需要 修改/etc/grub.d/30_os-prober文件中
if [ /${timeout} != -1 ]; then
if keystatus; then
if keystatus --shift; then
set timeout=-1
else
set timeout=n
fi
else
if sleep$verbose --interruptible 3 ; then
set timeout=n
fi
fi
fi
EOF
else
cat << EOF
if [ /${timeout} != -1 ]; then
if sleep$verbose --interruptible ${GRUB_HIDDEN_TIMEOUT} ; then
set timeout=n
fi
fi
这里黑体的n原本数值为零,n的数值与GRUB_TIMEOUT相同。保存文件后,运行
sudo update-grub
系统自动生成grub.cfg文件。
11、sudo reboot选择刚刚安装的内核。
12、至少vmware的lsilogic模式的scsi的模拟程序有一个bug,由于vmware的模拟固件总是对它的连接的最大设备数报告为零,因此linux kernel不能从lsilogic模式的scsi设备启动。解决方法一个是不用lsilogic模式的scsi磁盘,而改用buslogic或者干脆就是ide模式磁盘,美中不足的是vmware 7.0的buslogic模式不支持64位系统;一个是修改内核源代码,可参考http://theether.net/download/VMware/linux-2.6-scsi-mpt-vmware-fix.patch 网页内容摘录如下
(The attached patch is a workaround for a bug in VMWare's emulated LSI
Fusion SCSI HBA. The emulated firmware returns zero for the maximumnumber of attached devices; the real firmware returns a positivenumber. Therefore, the kernel that boots and works fine on bare metalwill fail on VMWare because this firmware value is handed to the SCSImidlayer, which then skips the entire bus scan.F7 bz 241935The patch below was submitted by Eric Moore of LSI to the linux-scsimailing list:http://marc.info/?l=linux-scsi&m=117432237404247then immediately rejected by Christoph Hellwig, who prefers thatVMWare fix their emulation instead.--- drivers/message/fusion/mptbase.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-)--- linux-2.6.22.noarch.orig/drivers/message/fusion/mptbase.c+++ linux-2.6.22.noarch/drivers/message/fusion/mptbase.c@@ -2573,8 +2573,19 @@ GetPortFacts(MPT_ADAPTER *ioc, int portn pfacts->MaxPersistentIDs = le16_to_cpu(pfacts->MaxPersistentIDs); pfacts->MaxLanBuckets = le16_to_cpu(pfacts->MaxLanBuckets); -max_id = (ioc->bus_type == SAS) ? pfacts->PortSCSIID :- pfacts->MaxDevices;+switch (ioc->bus_type) {+case SAS:+max_id = pfacts->PortSCSIID;+break;+case FC:+max_id = pfacts->MaxDevices;+break;+case SPI:+default:+max_id = MPT_MAX_SCSI_DEVICES;+break;+}+ ioc->devices_per_bus = (max_id > 255) ? 256 : max_id;
ioc->number_of_buses = (ioc->devices_per_bus < 256) ? 1 : max_id/256;)
我这两天被这个问题困扰了好久,每次安装上新内核总是报告pci 18.2: no compatible bridge window for [io 0xf000-0xffff],然后就说不能加载/lib/modules/2.6.34.1/modules.dep,系统就停在内存磁盘了。后来偶尔一次在vmware 6.5上的虚拟机测试成功了,结果发现6.5版本的默认磁盘是ide的,于是想到可能是vmware scsi的问题,然后上网找了一大圈,才找到这么个文章,确定了这个想法。接下来在vmware 7.0平台的测试中,将磁盘模式改为ide,系统启动的时候虽然也报告no compatible bridge window,但是已经可以正常启动了。现在的疑惑是为什么Ubuntu 10.04自带的内核没这个问题?再研究吧,linux的学问深着呢,呵呵。
- vmware,ubuntu环境中linux内核编译 (很好)
- VMware中Ubuntu编译和升级内核
- vmWare/ubuntu 编译内核
- Linux之环境配置(VMware+Ubuntu)
- Ubuntu 编译 Linux 内核
- Ubuntu 编译 Linux 内核
- ubuntu linux内核编译
- Ubuntu 编译linux内核
- ubuntu环境下编译内核详解(linux kernel compile)
- Linux驱动开发之环境搭建----Ubuntu 12.4 编译内核
- Linux驱动开发之环境搭建----Ubuntu 12.4 编译内核
- ubuntu环境下内核编译
- ubuntu内核模块编译环境
- ubuntu内核编译环境说明
- (编译内核)Vmware编译内核
- 搭建FFmpeg的编译开发环境(VMware+Ubuntu)
- Linux(Ubuntu)下编译内核模块
- linux内核编译学习(ubuntu)
- x264_param_t结构体参数
- div的显示和隐藏 概念,控制div的现实和隐藏
- 2011-03-12 竞彩足球 第一组
- Linux新创建的文件夹没有.bash_profie文件
- poj 3308 最小点权覆盖集, 见 胡驳涛论文里面有讲见图方法 二分图最小权点覆盖 我的想法是一个东西通过两个操作都可以完成,这些操作还可以完成其他的东西,每个操作有一个花费,现在要你选出花费最小的操作。这就是裸的模型
- vmware,ubuntu环境中linux内核编译 (很好)
- RMAN 备份异机恢复 并创建新DBID
- auto_ptr与shared_ptr --- auto_ptr (1)
- auto_ptr与shared_ptr --- shared_ptr (2)
- 李开复:天使投资人本质不是出钱而是增值
- window.open()函数中,Name参数不能包括特殊字符
- shared_ptr 两种常见的使用方式 (1)
- 《Professional assembly language》这本书主要讲的内容
- ANDROID2.3音频系统HAL