Chinaunix首页 | 论坛 | 博客
  • 博客访问: 361786
  • 博文数量: 64
  • 博客积分: 2975
  • 博客等级: 少校
  • 技术积分: 831
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-14 10:59
文章存档

2014年(2)

2012年(7)

2010年(40)

2009年(5)

2008年(8)

2007年(2)

分类: LINUX

2010-05-25 19:54:15

1.环境
redhat 7.2,虚拟机 vpc2007,内核版本2.4.7-10,安装了内核源码在/usr/src下

2.内核版本
系统版本是2.4.7-10,内核模块文件在/lib/modules/2.4.7-10下
因此新编译的内核不应和它冲突,那么新内核的版本如何决定呢?
答案是在源码的根Makefile里指定.
Makefile头几行是
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 7
EXTRAVERSION = -10custom

KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
还有一个
MODLIB    := $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
可见
默认版本是2.4.7-10custom,不会冲突,模块安装路径搞清楚了。

还有内核执行时的版本信息如何控制呢?
例如/proc/version的显示中会给出
[root@mail /proc/net]# cat /proc/version
Linux version 2.4.20-8smp (bhcompile@porky.devel.redhat.com) (gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)) #1 SMP Thu Mar 13 17:45:54 EST 2003

这个的版本信息由init/version.c指定
#define version(a) Version_ ## a
#define version_string(a) version(a)

int version_string(LINUX_VERSION_CODE);

struct new_utsname system_utsname = {
    UTS_SYSNAME, UTS_NODENAME, UTS_RELEASE, UTS_VERSION,
    UTS_MACHINE, UTS_DOMAINNAME
};

const char *linux_banner =
    "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
    LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";

UTS_RELEASE

这个宏定义在
include/linux/version.h中
#define UTS_RELEASE "2.4.7-10custom"
#define LINUX_VERSION_CODE 132103
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
这个文件是由Makefile根据前面的VERSION,PATCHLEVEL和SUBLEVEL生成的
其中LINUX_VERSION_CODE 123103即十六进制0x20407

3.编译内核
路径/usr/src/linux-2.4.7-10
make menuconfig 什么都不做,直接退出保存配置
make dep
make bzImage
make modules
make modules_install

4.安装内核
cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.7-10custom
vi /etc/grub.conf
怎加三行
title Red Hat Linux (2.4.7-10custom)
        root (hd0,0)
        kernel /vmlinuz-2.4.7-10custom ro root=/dev/hda2

5.测试内核
reboot
在grub的菜单中选2.4.7-10custom,看能否启动内核

6.如何修改源码
在虚拟机的字符界面下修改源码不方便,可以安装并启动samba服务,设置vpc 2007的网卡为桥模式,配置linux的网卡ip地址为同网段,在本机的运行中输入\\linux ip地址,输入用户名和密码,就可以共享虚拟机中的文件了。

vpc 2007下的linux是字符界面,不方便复制和粘贴屏幕上的输出,启用linux的sshd服务,用secureCRT连接进linux,屏幕上的复制和粘贴就简单多了,还可以使用rz和sz命令在本地和linux之间方便传文件.





阅读(1168) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~