linux学习之路之模块管理和内核编译

我们知道linux内核再启动过程中,主要完成以下几种功能:

1、侦测硬件信息

2、驱动初始化(可能借助intrd文件加载硬件模块)

3、以只读方式挂载根文件系统

4、转载第一支程序init


如果我们的kernel识别不了某些硬件或者实现不了某些功能的话,那么只能将某些功能代码添加在内核当中,或者将这些功能代码做成模块的形式,kernel需要哪些模块就直接调用这些模块即可。通过这两种功能就可以实现相应的功能。

而不同的实现机制和kernel设计有关。

kernel设计分为2种:

一种是单内核:这种内核将某些功能代码直接编译到内核中,因此该内核的容量较大。不过现在的单内

              核也借助了微内核的优势,将某些功能做成模块的形式供kernel调用。

另一种是为内核:这种内核是将某些功能的做成模块的形式供kernel调用。

而我们的linux kernel才采用单内核设计。


如何管理模块?

使用lsmod命令可以查看系统上所有的模块

其中第一段为模块的名字。第二段为模块的大小。第三段Used by表示被使用了几次,以及哪些模块使用了该模块。


modprobe MOD_NAME:装在模块,这里接模块名

modprobe -r MOD_NAME:删除某个模块


modinfo  MOD_NAME:查看某个模块的详细信息

其中filename为该模块的文件路径

depends:表示该模块安装依赖于哪个模块(相依属性问题)


insmod /PATH/TO/MODULE_FILENAME:装载指定模块,注意这里是文件路径,不是模块名称

rmmod MOD_NAME:删除指定模块,这里接模块名称

depmod /PATH/TO/MODILES_DIR :可以用来生成模块依赖列表


一般用户说来,空间访问内核空间是通过/proc、/sys这两个目录来完成的

在/proc/sys/目录下,大部分文件具有rw权限

而/sys/目录下,只要部分文件具有w权限

而我们修改内核参数一般是通过/proc/sys/,/sys/来完成的。

修改内核参数有3种方法:

1、使用echo VALUE > /proc/sys/TO/SOMEFILE

例如:修改/proc/sys/vm/drop_caches的参数


2、使用sysctl命令来修改。不过该命令只用于修改/proc/sys/目录下的文件

sysctl -w /proc/sys目录下的子目录.FILE=STRING

例如:修改/proc/sys/kernel/hostname为xsl.www.com

3、使用上述两张方法修改的内核参数,只能立即生效,但是不能永久生效。要想永久生效可以修改内核的配置文件/etc/sysctl.conf.

要想修改配置文件立即生效,使用sysctl -p命令可以重读配置文件

使用sysctl -a可以显示所有内核参数和其值


一般来说,内核的核心功是直接在内核里,其他大多数功能具有以下三种选择:

1、不使用该功能

2、将这些功能编译成模块的形式

3、将这些功能直接编译进内核当中


那么该如何手动编译内核呢?

手动编译的方式:

使用make gconfig命令,不过使用该命令适用于Gnome桌面环境,且需要安装图形开发库

使用make kconfig命令,该命令适用于KDE桌面环境,且需要安装图形开发库


不过最常见的方式是使用make menuconfig命令来编译,使用该命令会产生一个窗口界面

在该窗口下有许多参数可以选择

然后选择完成之后执行make modules_install来安装编译的模块

最后执行make、make install来完成整个编译过程


在二次编译前,最好先执行make clean命令来清理上次编译过程中产生的一些配置文件,核心文件(.config)不会被清理掉

如果是第一次编译,也最好执行make mrproper命令来清理一些残留文件,不过该命令也会将核心配置文件(.config)删除掉,所以建议在执行该命令前,最好将 .config文件备份一下



screen命令:
screen -ls: 显示已经建立的屏幕
screen: 直接打开一个新的屏幕
    Ctrl+a, d: 拆除屏幕
screen -r ID: 还原回某屏幕
exit: 退出





本文出自 “linux学习之路” 博客,谢绝转载!

linux学习之路之模块管理和内核编译,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。