linux内核加载过程(linux 内核加载)

linux内核加载过程(linux

linux操作系统中,加载和删除内核模块的命令是什么?

modprobe命令 Linux命令:modprobe 。 功能说明:自动处理可载入模块。 语  法:modprobe 。 补充说明:modprobe可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。 内容

1、modprobe 命令是根据depmod -a的输出/lib/modules/version/modules.dep来加载全部的所需要模块。

2、删除模块的命令是:modprobe -r filename。

3、系统启动后,正常工作的模块都在/proc/modules文件中列出。使用lsmod命令也可显示相同内容。

4、在内核中有一个“Automatic kernel module loading”功能被编译到了内核中。当用户尝试打开某类型的文件时,内核会根据需要尝试加载相应的模块。/etc/modules.conf或 /etc/modprobe.conf文件是一个自动处理内核模块的控制文件。 modprobe命令主要用于在Linux 2.6内核中加载和删除Linux内核模块。通过此命令用户可以轻松地加载和删除Linux内核模块,同时使用此命令加载Linux内核模块时,Linux内核会自动解决内核模块之间的依赖关系,将相互依赖的模块自动加载,如下所示: 1) 加载RAID1阵列级别模块: # modprobe raid1 2) 显示已加载的RAID1阵列级别模块: # lsmod |grep raid1 raid1 25153 0 3) 删除RAID1阵列级别模块: # modprobe -r raid1 4) 显示RAID1阵列级别模块: # lsmod |grep raid1 modprobe命令在加载模块时会自动解决依赖的模块。当加载的模块需依赖另一个模块时,系统会自动将此模块加载。而当用户使用insmod命令加载模块时,则不会自动解决相对应的依赖模块。 modprobe命令中的”-r”参数表示删除指定模块,”-c”参数表示显示/etc/modprobe.conf配置文件的参数,”-C”参数表示指定内核配置文件,”-f”表示覆盖,”-l”表示显示模块的绝对路径。 # modprobe -l|grep raid /lib/modules/2.6.18-8.el5/kernel/drivers/md/raid0.ko /lib/modules/2.6.18-8.el5/kernel/drivers/md/raid456.ko /lib/modules/2.6.18-8.el5/kernel/drivers/md/raid1.ko /lib/modules/2.6.18-8.el5/kernel/drivers/md/raid10.ko /lib/modules/2.6.18-8.el5/kernel/drivers/scsi/megaraid.ko /lib/modules/2.6.18-8.el5/kernel/drivers/scsi/aacraid/aacraid.ko /lib/modules/2.6.18-8.el5/kernel/drivers/scsi/megaraid/megaraid_mbox.ko /lib/modules/2.6.18-8.el5/kernel/drivers/scsi/megaraid/megaraid_mm.ko /lib/modules/2.6.18-8.el5/kernel/drivers/scsi/megaraid/megaraid_sas.ko /lib/modules/2.6.18-8.el5/kernel/drivers/scsi/raid_class.ko 以上命令表示显示系统中所有的编译模块,并过滤包含有raid字符串的模块。

linux初始服务器启动盘如何使用?

答具体方法如下

启动第一步--加载 BIOS

当你打开计算机电源,计算机会首先加载 BIOS 信息,BIOS 信息是如此的重要,以至于计

算机必须在最开始就找到它。这是因为 BIOS 中包含了 CPU 的相关信息、设备启动顺序信

息、硬盘信息、内存信息、时钟信息、PnP 特性等等。在此之后,计算机心里就有谱了,

知道应该去读取哪个硬件设备了。

启动第二步--读取 MBR

众所周知,硬盘上第 0 磁道第一个扇区被称为 MBR,也就是 Master Boot Record,即主

引导记录,它的大小是 512 字节,别看地方不大,可里面却存放了预启动信息、分区表信

息。

系统找到 BIOS 所指定的硬盘的 MBR 后,就会将其复制到 0x7c00 地址所在的物理内存中。

其实被复制到物理内存的内容就是 Boot Loader,而具体到你的电脑,那就是 lilo 或者 grub

了。

启动第三步--Boot Loader

Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可

以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,

以便为最终调用操作系统内核做好一切准备。

Boot Loader 有若干种,其中 Grub、Lilo 和 spfdisk 是常见的 Loader。

我们以 Grub 为例来讲解吧,毕竟用 lilo 和 spfdisk 的人并不多。

系统读取内存中的 grub 配置信息(一般为 menu.lst 或 grub.lst),并依照此配置信息来

启动不同的操作系统。

启动第四步--加载内核

根据 grub 设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕

一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK,

booting the kernel”。

系统将解压后的内核放置在内存之中,并调用 start_kernel()函数来启动一系列的初始化函

数并初始化各种设备,完成 Linux 核心环境的建立。至此,Linux 内核已经建立起来了,基

于 Linux 的程序应该可以正常运行了。

启动第五步--用户层 init 依据 inittab 文件来设定运行等级

内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab 文件,并依据

此文件来进行初始化工作。

其实/etc/inittab 文件最主要的作用就是设定 Linux 的运行等级,其设定形式是“:

id:5:initdefault:”,这就表明 Linux 需要运行在等级 5 上。Linux 的运行等级设定如下:

0:关机

1:单用户模式

2:无网络支持的多用户模式

3:有网络支持的多用户模式

4:保留,未使用

5:有网络支持有 X-Window 支持的多用户模式

6:重新引导系统,即重启

启动第六步--init 进程执行 rc.sysinit

在设定了运行等级后,Linux 系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit 脚本程

序,它做的工作非常多,包括设定 PATH、设定网络配置(/etc/sysconfig/network)、启

动 swap 分区、设定/proc 等等。如果你有兴趣,可以到/etc/rc.d 中查看一下 rc.sysinit 文

件。

启动第七步--启动内核模块

具体是依据/etc/modules.conf 文件或/etc/modules.d 目录下的文件来装载内核模块。

启动第八步--执行不同运行级别的脚本程序

根据运行级别的不同,系统会运行 rc0.d 到 rc6.d 中的相应的脚本程序,来完成相应的初始

化工作和启动相应的服务。

启动第九步--执行/etc/rc.d/rc.local

你如果打开了此文件,里面有一句话,读过之后,你就会对此命令的作用一目了然

rc.local 就是在一切初始化工作后,Linux 留给用户进行个性化的地方。你可以把你想设置

和启动的东西放到这里。

启动第十步--执行/bin/login 程序,进入登录状态

tunko内核模块怎么加载?

1.hello.c

#include

#include

MODULE_LICENSE(“DualBSD/GPL”);

MODULE_AUTHOR(“MDAXIA”);

static int __inithello_init(void)

{

printk(KERN_ALERT “Helloworld!n”);

return 0;

}

static void __exithello_exit(void)

{

printk(KERN_ALERT “Goodbye,cruelworld!”);

}

module_init(hello_init);

module_exit(hello_exit);

2.Makefile

ifeq ($(KERNELRELEASE),)

KDIR := /lib/modules/$(shell uname-r)/build

PWD := $(shell pwd)

modules:

$(MAKE) -C $(KDIR) M=$(PWD)modules

modules_install:

$(MAKE) -C $(KDIR) M=$(PWD)modules_install

clean:

rm -rf *.o *.ko .depend *.mod.o*.mod.c Module.* modules.*

.PHONY:modules modules_installclean

else

obj-m :=hello.o

endif

3. 编译模块

#sudomake (调用第一个命令default)

这时,在hello.c 所在文件夹就会有 hello.ko,这个就是我们需要的内核模块啦

#sudo make clean

清理编译垃圾,hello.ko 也会清理掉。

4. 插入模块,让其工作。注意必须是root权限

#sudo insmod ./hello.ko

我们用dmesg 就可以看到 产生的内核信息啦,Hello world!

如果没有输出”hello from helloworld”,因为如果你在字符终端而不是终端模拟器下运行的话,就会输出,因为在终端模拟器下时会把内核消息输出到日志文件/var/log/kern.log中。

#sudo rmmod ./hello

再用dmesg 可以看到 Bye world!

扩展阅读:

示例一 将开机信息发邮件

man dmesg 写道

The program helps users to print out their bootup messages.Instead of copying the messages by hand, the user need only:

dmesg > boot.messages

and mail the boot.messages file to whoever can debug their problem.

# dmesg >boot.messages

# ls -l boot.messages

-rw-r–r– 1 root root 15838 12-09 12begin_of_the_skype_highlighting 15838 12-0912 免费 end_of_the_skype_highlighting:55boot.messages

# mail -s “Boot Log of Linux Server”public@web3q.net

#

通过管道查找

dmesg | grep world

dmesg | tail

dmesg -a

dmesg -c打印并清除

如何获知linux是否支持内核模块动态加载?

希望能帮到你, 用EXPORT_SYMBOL_GPL 声明一下。

向delay()都有标准函数,不需要自己写。

操作系统加载详细过程?

计算机接通电源后,要进行加电自检,检查RAM、驱动器等;然后BIOS会读取活动分区主引导记录的启动装载器;然后完成启动装载器初始化,然后操作系统启动正式开始,分为引导阶段、加载内核阶段、初始化内核阶段、登录系统启动这四个阶段。

是先读取C盘中的启动文件,然后进行初始化,系统需要加载很多底层硬件的驱动程序,读取注册表信息、寻找新硬件设备、启动相关服务,初始化显示设备和显示出用户界面等。到这就能看见“欢迎使用”了(XP系统),然后就登录了。大概就是这样。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平