Chinaunix首页 | 论坛 | 博客
  • 博客访问: 982423
  • 博文数量: 186
  • 博客积分: 10020
  • 博客等级: 上将
  • 技术积分: 1676
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-14 17:08
文章存档

2011年(5)

2009年(11)

2008年(2)

2007年(111)

2006年(57)

我的朋友

分类: LINUX

2007-03-17 01:56:29

1.升级内核可以下载内核RPM软件包并安装它们达到升级系统上的内核的目的
  如果有必要,创建初始化RAM映像,并配置引导装载程序来载入新内核
  注:用户最好保留旧内核,以防新内核出问题
 
2.如果系统使用ext3文件系统或SCSI控制器,用户就需要初始RAM磁盘。初始RAM磁盘的目的是:允许模块化的内核在它能够进入模块通常驻留
的设备之前,具备进入内核需要从该设备引导模块的能力
  初始RAM磁盘通过使用mkinitrd命令来创建(然而,如果内核及其相关文件是从RPM软件包中安装或升级,这个步骤会被自动执行)
 
3.要增加对某部分(如网络)功能的支持,可以把相应部分编译到内核(build-in),也可以把该部分编译成模块,使之动态调用。
 
4.在使用新的内核可以在上面取得最新版本的内核
编译内核需要root权限,以下操作都假定当前用户身份是root用户
  # cp Linux-2.4.18.tar.gz /usr/src   /* 下载了内核源码之后,需要把升级的内核源代码拷贝到/usr/src下 */
 /* 建议不要使用/usr/src/Linux这个目录来存放源代码,因为使用了这个目录,需要手工在/usr/include目录下创建一些符号链接 */
 /* 建议为源码单独建一个目录,这里使用的目录是/usr/src/Linux2.6.18*/
  # cd /usr/src
  # tar jxvf Linux-2.6.18.tar.bz2
 
5. 如果是2.4的系统,要正常编译和运行新的内核,需要升级一些软件包,这些信息在源码目录下的Documentation/Changes文件中,请根据实
际情况选择升级。2.4内核在这里需要下载module-init-tools工具包,并升级
# tar -xvzf module-init-tools-3.0.tar.gz
/* 在module-init-tools-3.0目录下,进行编译和安装 */
# ./configure --prefix=/
# make moveold /* 作用是把系统原来的modutils工具程序改名为*.old(例如将lsmod改为lsmod.old) */
               /* 这一步是非常重要的一步,千万不要省略,这将使原有的Linux-2.4.0系统可以继续使用 */
               /* 因为在2.4.x系统下,新的module-init-tools工具包实际上还依赖原来*.old程序来加载内核模块 */
# make all install
# ./generate-modprobe.conf /etc/modprobe.conf  /* 此命令用来生成新的配置文件/etc/modprobe.conf */
新的module-init-tools工具包不再使用原来的/etc/modules.conf配置文件了,而是使用新的配置文件/etc/modprobe.conf
 
***********************************************************************************
-----------------------下面开始正式配置,编译和安装Linux-2.6.x内核-------------------
***********************************************************************************
1)# cd /usr/src/Linux-2.6.18
2)# make mrproper  /* 删除原来编译产生的垃圾,如果内核没有编译过,就不需要用make mrproper命令 */
3)# make menuconfig  /* 进入内核选项设置*/
    y--将这个项目编译进内核        m--编译为模块      n--取消选择     ?--将打印这个选项的帮助信息   Esc--将返回到上层菜单
注意:a.新内核中有两个GUI配置工具,过去的make xconfig现在是一个使用QT库作为界面方案的配置工具了,要使用必须先安装QT库
      b.另一个是make gconfig这是使用GTK库作为界面方案的工具,同样要先安装GTK库
      c.LINUX上使用ext3文件系统,所以要把ext3文件系统编译进内核;如果是SCSI硬盘,并且根文件在SCSI硬盘上,配置内核时在设备驱动
       项(第八项)中的SCSI device support子项中,要把SCSI磁盘支持编译进内核。总之,系统需要什么,就要编译相应内容。
4)# make                     /* 编译内核本身 */
5)# make modules             /* 编译选择的模块 */
6)# make modules_install     /* 将编译后的模块转移到系统标准位置 */
7)# make install             /* 安装内核(一定要先编译并安装模块,再运行make install;否则可能会出现错误,导致内核升级失败) */
    (a)把压缩内核映像拷贝到/boot目录下,并创建相应的System.map符号链接;
    (b)修改bootloader的配置文件;
    (c)调用mkinitrd程序创建内核的initrd映像
那么如何确定根目录"/"在哪个分区呢?用命令df,在这里看到与"/"分区对应的是/dev/hda1,所以需要将启动参数改为:"root=/dev/hda1"
make install命令将会修改引导装载配置文件,对于GRUB而言,将在/etc/grub.conf配置文件增加如下类似的配置行:
title jesse Linux (2.6.18)
root(hd0, 0)
kernel /boot/vmlinuz-2.6.18 ro root=/dev/hda1
initrd /boot/initrd-2.6.18.img
 
8)最后,使用init 6命令重新引导系统,在引导菜单中就会多出一个2.6内核的选项,使用该选项可以用Linux2.6的内核引导系统
 
***********************************************************************************
---------------------------  Linux 模块管理 ------------------------------
***********************************************************************************
1)模块(modules)指的是内核模块(kernel modules),通常一个模块提供一个功能,如isofs,minix,nfs,lp等
 
2)模块有两种设计方法:
  a.设计者可以把各项功能分离到单独的叫做线程的处理中去(又称微内核,优点:内核很小;缺点:增加了线程间协调工作的通信开销)
  b.将内核以包含/排除一些功能的方式重新编译(这里Linux采用的解决方案---包含内核模块,这些模块可以按需要随时装载和卸载的)
 
3)内核与模块各自独立,优点有:
  a.将来修改kernel时,不必全部重新编译,可节省不少时间;
  b.若需要安装新的模块可,不必重新编译内核,只要插入(通过insmode指令)对应的模块即可
  c.减少内核对系统资源的占用,内核可以集中精力做最基本的事情,把一些扩展功能都交给模块实现
 
4)加载内核模块的方法有两种:
  a.使用insmod命令手工把它插入到内核
  b.按需加载。当内核发现需要一个模块的时候,内核会请求内核守护进程(kerneld)试图加载合适的模块;内核守护进程kerneld非常智能,能
够主动的把用户需要的模块插入内核,将没有用到的模块从内核中清除。
kerneld的组成:
  ---第一部分工作于Linux的内核,负责向daemon发送请求
  ---另一部分工作于系统的用户数据区,负责调入由内核请求指定的模块
如果没有kerneld,就只能通过用insmod或modeprobe命令手工加载模块
 
5)与模块操作有关的命令
  lsmode:列出已经被内核调入的模块
  insmode:将某个module插入到内核中
  rmmod:将某个module从内核中卸载
  depmod:生成依赖文件,告诉insmod将来要从哪儿调入模块。这个依赖文件在/lib/modules/[当前内核版本]/modules.dep中
  kerneld:负责自动的将模块调入内核和把模块从内核中卸载
 
6)手工加载模块
  a.如果手工加载模块,建议使用modprobe,因为它可以解决模块之间的依赖性问题
    原因:在系统启动脚本里有一条"depmod -a"命令,会给系统中的所有可用的模块创建一个依赖关系的列表。而"modprobe module-name"会
使用这个列表,在装入指定模块之前,会先去安装那些要先装入的模块
  b.但若使用insmod,它不会自动完成其他模块的调入
 
7)从内存中卸载模块
  a.用lsmod可以查看该模块是否确实已经被加载
  b.用rmmod xxx来移除正在使用中的模块,如果有依赖关系,那么就先要先移除那个没有被其他模块依赖的模块,按顺序来一个一个移除
阅读(1478) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~