linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > article > Linux开发区 > 内核研究 >
栏目导栏
资料搜索
热门文章
·linux-2.6内核升级文档
·Linux源代码的注释
·linux2.6内核编译方法详述
·Linux操作系统内核编译详解
·Linux内核结构详解
·Linux配置与编译内核
·Linux内核升级全攻略
·定时器
·FC5(Fedora Core5)下编译内核总
·Ubuntu 6.06 dapper 内核编译初
·Linux 内核编译详解
·Linux内核管理基础知识概述
·Linux2.4升级到2.6内核升级指南
·如何编译linux内核
·第八章 设备驱动
最新文章
·Linux Kernel 最新稳定版2.6.2
·Kernel硬件中断的初始化流程
·Linux内核bootsplash功能的实现
·Linux内核2.6.25全新发布加入众
·Debian Linux系统编译内核标准
·Linux2.4内核和2.6内核对Initr
·2.6.24内核编译 initrd-2.6.24
·Qtopia应用程序与Linux内核数据
·Linux 2.6内核中sysfs文件系统
·Linux2.6内核驱动移植参考
·Andrew Morton:Linux内核的执法
·Fedora 8 Linux系统的内核配置
·Kernel中的irq.c函数
·Linux核心出现权限扩张及记忆体
·Linux 2.6本地权限提升漏洞
Google
 
Linux内核管理基础知识概述
[ 作者:  加入时间:2005-12-28 11:14:56  来自:中国IT实验室 ]
一、什么是内核;

    内核官方:http://www.kernel.org

    内核洋文用 kernel,我刚才翻了一下词典,kernel 中文意思是内核、核心、中心、精髓的意思;也是果仁、果核的意思。从字面理解,kernel 是一事物的中心,植物的果实最重要的也是果仁和果核;:) 由此我们可以推断内核是操作系统的中心。

    我们知道Linus Torvalds 开发了Linux ,其实他开发的就是内核,按内核官方主页的理解,这个内核就是Linux ;其它的扩展和应用都是围绕内核而展开的。所有Linux应用程序都会和内核发生直接或者间接的接触;比如硬件需要内核支持,网络的通信也需要内核支持;文件系统更需要内核支持... ...

    直言我的能力的不行,如果您想了解和学习解操作系统,我写的教程只是初级应用,理论性的东西不是一言两语能说的清楚的,更不是应用者能说的清楚的。

    二、为什么需要编译内核和管理内核

    硬件是需要内核支持才行,有些硬件的支持没有被编入内核,这也需要我们重编内核;内核的包含的不仅仅是设备的驱动,还有其它的内容,比如网络协议的支持,防火墙的支持... ... 比如iptables的实现,有些功能是需要内核支持的,如果内核与iptables相关的内容没有被编入,iptables 相关的功能就无法实现;

    三、内核编译方法

    请参考:《编译内核操作流程 ──为新手指南》

    四、管理内核模块的相关命令

    1、lsmod 列加以挂载的内核模块;

    lsmod 是列出目前系统中已加载的模块的名称及大小等;另外我们还可以查看 /proc/modules ,我们一样可以知道系统已经加载的模块;

    [root@localhost beinan]# lsmod

    2、modinfo 查看模块信息;

    modinfo 可以查看模块的信息,通过查看模块信息来判定这个模块的用途;

    [root@localhost beinan]# moinfo 模块名

    举例:

    [root@localhost beinan]# modinfo ne2k-pci
    filename: /lib/modules/2.6.11-1.1369_FC4/kernel/drivers/net/ne2k-pci.ko
    author: Donald Becker / Paul Gortmaker
    description: PCI NE2000 clone driver
    license: GPL
    parmtype: debug:int
    parmtype: options:array of int
    parmtype: full_duplex:array of int
    parm: debug:debug level (1-2)
    parm: options:Bit 5: full duplex
    parm: full_duplex:full duplex setting(s) (1)
    vermagic: 2.6.11-1.1369_FC4 686 REGPARM 4KSTACKS gcc-4.0
    depends: 8390
    alias: pci:v000010ECd00008029sv*sd*bc*sc*i*
    alias: pci:v00001050d00000940sv*sd*bc*sc*i*
    alias: pci:v000011F6d00001401sv*sd*bc*sc*i*
    alias: pci:v00008E2Ed00003000sv*sd*bc*sc*i*
    alias: pci:v00004A14d00005000sv*sd*bc*sc*i*
    alias: pci:v00001106d00000926sv*sd*bc*sc*i*
    alias: pci:v000010BDd00000E34sv*sd*bc*sc*i*
    alias: pci:v00001050d00005A5Asv*sd*bc*sc*i*
    alias: pci:v000012C3d00000058sv*sd*bc*sc*i*
    alias: pci:v000012C3d00005598sv*sd*bc*sc*i*
    alias: pci:v00008C4Ad00001980sv*sd*bc*sc*i*
    srcversion: 6ACE95F441CD26DF9DC31C2

    上面的例子是我们查看 ne2k-pci 这个模块的信息,通过查看,我们知道ne2k-pci 模块是8029网卡(PCI NE2000 clone driver)的驱动;模块是位于 /lib/modules/2.6.11-1.1369_FC4/kernel/drivers/net/ 中ne2k-pci.ko

    我们现在常用的网卡也有8139的,8139网卡所用的驱动是 8139too ;查查看?

    [root@localhost beinan]# modinfo 8139too

    我们再查查vfat 和ntfs 的模块信息;

    [root@localhost beinan]# modinfo vfat
    [root@localhost beinan]# modinfo ntfs

    自己尝试一下;

    注意: 模块名是不能带有后缀的,我们通过modprobe -l 所看到的模块,都是带有.ko 或.o后缀;

    3、modprobe 挂载新模块以及新模块相依赖的模块

    modprobe 我们常用的功能就是挂载模块,在挂载某个内核模块的同时,这个模块所依赖的模块也被同时挂载;当然modprobe 也有列出内核所有模块,还有移除模块的功能;下在我们举个例子说一说咱们常用的功能和参数;

    modprobe [-v] [-V] [-C config-file] [-n] [-i] [-q] [-o ] [parameters...]
    modprobe -r [-n] [-i] [-v] ...
    modprobe -l -t [ -a ...]

    上面是modprobe 的用法,具体更为详细的帮助,我们可以查看 man modprobe ;

    [root@localhost beinan]# modprobe -c

    modprobe -c 可以查看modules 的配置文件,比如模块的别名是什么等;

    [root@localhost beinan]# modprobe -l

    modprobe -l 是列出内核中所有的模块,包括已挂载和未挂载的;通过modprobe -l ,我们能查看到我们所需要的模块,然后根据我们的需要来挂载;其实modprobe -l 读取的模块列表就位于 /lib/modules/'uname -r' 目录中;其中uname -r 是内核的版本;

    [root@localhost beinan]# uname -r
    2.6.11-1.1369_FC4
    [root@localhost beinan]# ls /lib/modules/2.6.11-1.1369_FC4/

    通过上面的命令,自己试试看?

    [root@localhost beinan]# modprobe 模块名 注:挂载一个模块;

    举例:

    [root@localhost beinan]# modprobe ne2k-pci 注:挂载 ne2k-pci 模块;
    [root@localhost beinan]# modprobe vfat 注:挂载vfat 模块
    [root@localhost beinan]# modprobe ntfs 注:挂载ntfs 模块
    [root@localhost beinan]# lsmod 注:列出已挂载模块, 我们会看到ne2k-pci ,vfat ,ntfs的模块 ;

    注意: 模块名是不能带有后缀的,我们通过modprobe -l 所看到的模块,都是带有.ko 或.o后缀;

    [root@localhost beinan]# modprobe -r 模块名 注:移除已加载的模块,和rmmod 功能相同;

    注意: 模块名是不能带有后缀的,我们通过modprobe -l 所看到的模块,都是带有.ko 或.o后缀;

    [root@localhost beinan]# modprobe -r 模块名

    举例:

    [root@localhost beinan]# modprobe -r ne2k-pci

    就说这么多吧,更为详细的还是用 man modprobe 来查看和尝试;

    4、rmmod 移除已挂载模块;

    命令格式:

    rmmod 模块名

    注意: 模块名是不能带有后缀的,我们通过modprobe -l 所看到的模块,都是带有.ko 或.o后缀;

    举例:

    [root@localhost beinan]# rmmod vfat 注:移除已挂载的模块vfat

    5、depmod 创建模块依赖关系的列表

    这个模块管理工具是创建模块依赖关系的列表,有几个参数我们注意一下就行了,目前的的Linux 发行版所用的内核是2.6x版本,是自动解决依赖关系,所以这个命令知道就行了;模块之前也有依赖关系,比如我们想驱动USB 移动硬盘,目前有两种驱动,一种是udev ,在内核中有,但目前不太稳定;另一种办法是用usb-storage驱动,而usb-storage 依赖的模块是scsi 模块,所以我们要用usb-storage 的模块,也得把scsi 编译安装;

    再举个例子:sata的硬盘,在Linux中的设备表示的是/dev/sd* ,比如 /dev/sda,/dev/sdb 等... 系统要驱动 sata硬盘,则需要把sata在内核中选中,或编译成模块,或内置于内核之中,在此同时,还需要在内核中选中ide ,scsi 的支持等;

    depmod 工具的洋文原意:depmod — program to generate modules.dep and map files.(我译的:为modules.dep 文件或映射文件创建依赖关系)

    [root@localhost beinan]# depmod -a 注:为所有列在/etc/modprobe.conf 或/etc/modules.conf 中的所有模块创建依赖关系,并且写入到modules.dep文件;
    [root@localhost beinan]# depmod -e 注:列出已挂载但不可用的模块;
    [root@localhost beinan]# depmod -n 注:列出所有模块的依赖关系,但仅仅是输出出来 (Write the dependency file on stdout only)

    注:modules.dep 位于 /lib/modules/内核版本 目录

    比如 Fedora Core 4.0 中,系统默认的内核:

    [root@localhost beinan]# ls /lib/modules/2.6.11-1.1369_FC4/modules.dep
    /lib/modules/2.6.11-1.1369_FC4/modules.dep

    6、insmod 挂载模块;

    insmod 这个工具,和modprobe 有点类似,但功能上没有modprobe 强,modprobe 在挂载模块是不用指定模块文件的路径,也不用带文件的后缀.o 或.ko ;而insmod 需要的是模块的所在目录的绝对路径,并且一定要带有模块文件名后缀的(modulefile.o 或modulesfile.ko );

    对于这个工具,我们只是介绍一下, 并不推荐使用。因为模块有依赖关系,对于新手来说,可能不知道这个模块依赖和哪个模块依赖;

    举例:

    [root@localhost beinan]# insmod /lib/modules/2.6.11-1.1369_FC4/kernel/drivers/net/tg3.ko

    我们要到 /lib/modules/内核版本 uname -r 的命令输出/kernel/drivers 中找相对应的模块才行,要有绝对路径,而且必须要用到文件名的全称,不能把文件名的后缀省略;

    五、与内核模块加载相关的配置文件;

    1、模块的配置文件 modules.conf 或 modprobe.conf

    内核模块的开机自动挂载模块一般是位于一个配置文件,一般的Linux发行版本都有 /etc/modules.conf 或 /etc/modprobe.conf 。比如Fedora Core 4.0 内核模块开机自动加载文件是 /etc/modprobe.conf ;在这个文件中,一般是写入模块的加载命令或模块的别名的定义等;比如我们在modules.conf 中可能会发行类似的一行 ;

    alias eth0 8139too

Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
分页:[1] 2
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
无相关信息