您的位置:首页 > 运维架构 > Linux

Linux技术研究-基础篇(内核,模块)

2011-05-21 11:46 501 查看
Linux技术研究-基础篇(内核,模块)

编译内核的目的

对现有内核添加新的功能 就是向内核添加新模块

对现有系统添加新的内核

对现有内核进行升级

选择内核版本

以次版本号为偶数的为准,奇数版属于测试版或开发版 不稳定

新内核可以去 http://www.kernel.org/ 下载

介绍

技术上说Linux是一个内核。“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux。

微内核和单内核

微内核是将所有功能独立出来,内核只负责通信(消息传递),优点是灵活,缺点是消息传递过多影响性能,可自由加载卸载模块

单内核是将所有功能换成一体,内核可直接调用函数,无需消息传递.优点简单高效,缺点不好维护

,不能独立卸载与加载新的模块,WINDOWS NT与MAC OS则是典型的单内核

linux则是他们的混合物,汲取双方的优点于一身.既可直接调用函数 又可随时按需加载卸载模块

1.升级内核

安装检查 需要安装开发库和开发工具里的包

[root@stu32 ~]# rpm -qa | grep "ncurses"

ncurses-devel-5.5-24.20060715

ncurses-5.5-24.20060715

下载 linux-2.6.29.tar.gz

[root@stu32 src]# tar xvjf linux-2.6.29.tar.gz

内核帮助文档

Documentation/

介绍 devices.txt

# ll /dev/sda

brw-r----- 1 root disk 8, 0 06-04 07:45 /dev/sda

# rm -rf /dev/sda

# mknod -m 640 /dev/sda b 8 0

# man mknod

# chown :disk /dev/sda

# ll /dev/sda

brw-r----- 1 root disk 8, 0 06-04 10:10 /dev/sda

#

cd /usr/src/linux-2.6.29

make mrproper # 清理代码数(会将.o和.ko删除)

make menuconfig # 配置内核模块 会自动从/boot/config-version加载现机器的内核配置

make # 开始编译

make modules_install # 安装模块 模块的位置 /lib/modules/KERNEL-VERSION/kernel

maks install # 安装内核及相关文件到 /boot/ 下 并修改启动菜单

2.模块

lsmod 查看系统中已加载的模块

管理模块

rmmod 卸载模块

insmod 加载模块

加载模块要写模块的绝对路径

modinfo 查看模块的详细信息

-l 查看所有模块

modprobe --show-depends lp 查依赖关系

模块有依赖性

卸载一个模块必须先将依赖着它的模块先卸载掉 加载模块也必须先加载依赖关系

# modinfo lp | grep depends

depends: parport

# modinfo parport_pc | grep depends

depends: parport

#

# rmmod parport

ERROR: Module parport is in use by lp,parport_pc

# rmmod lp

# rmmod parport_pc

# rmmod parport

#

让系统自动来完善依赖关系(只能在加载时,卸载无效,还需手动)

# lsmod | grep -e lp -e parport

# modprobe lp

# lsmod | grep -e lp -e parport

parport_pc 29157 1

lp 15849 0

parport 37513 2 parport_pc,lp

#

# modprobe -r parport

FATAL: Module parport is in use.

modprobe 是通过 /lib/modules/2.6.18-53.el5/modules.* 来维护依赖关系的

当这些文件丢失或新添了模块时 可以手动重新产生依赖关系

depmod

3.为原内核添加新模块的方法:

安装前的检查

[root@stu32 ~]# rpm -qa | grep "ncurses\|rpm-build"

ncurses-devel-5.5-24.20060715

ncurses-5.5-24.20060715

rpm-build-4.4.2-47.el5

[root@stu32 ~]#

# rpm -ivh kernel-2.6.18-53.el5.src.rpm

# cd /usr/src/redhat/SPECS

# rpmbuild -bp --target=$(uname -m) kernel-2.6.spec

# cd /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.i686

# uname -r

2.6.18-53.el5

# head -n 5 Makefile

VERSION = 2

PATCHLEVEL = 6

SUBLEVEL = 18

#EXTRAVERSION = -prep

EXTRAVERSION = -53.el5

# make menuconfig

# make M=fs/ntfs/

错误1

ERROR: Kernel configuration is invalid.

include/linux/autoconf.h or include/config/auto.conf are missing.

Run 'make oldconfig && make prepare' on kernel src to fix it.

解决方法

# make oldconfig && make prepare

再次编译模块

# make M=fs/ntfs/

错误2

/bin/sh: scripts/mod/modpost: 没有那个文件或目录

make[1]: *** [__modpost] 错误 127

make: *** [modules] 错误 2

解决方法

# make scripts

# make M=fs/ntfs/

Building modules, stage 2.

MODPOST

CC fs/ntfs/ntfs.mod.o

LD [M] fs/ntfs/ntfs.ko

# cp fs/ntfs/ntfs.ko /lib/modules/2.6.18-53.el5/kernel/fs/ntfs/

# depmod -a

# modprobe ntfs

# lsmod | grep ntfs

ntfs 187284 0

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: