Linux内核基本装载卸载

Linux由两部分组成:内核核心+内核模块
核心的命名通常是vmlinuz-VERSION-release,模块的放置于/lib/modules/VERSION-release/

一旦系统运行起来,内核将被加载进内存,查看运行中的内核基本信息
uname [OPTION]...
            -r:内核的release号
            -n:主机名

模块信息获取和管理

如果要了解运行中的内核所加载的模块
lsmod命令   #显示的信息来自于/proc/modules

内核模块详细信息
modinfo [-F field] [-k kernel] [modulename|filename...]
            -F field: 仅显示指定字段的信息;
            -n:显示文件路径;
            -d:显示描述
            -p:显示模块参数

内核模块装卸载
modprobe  [-r]  module_name
            模块的动态装载:modprobe  module_name   #/etc/modprobe.conf给模块传递参数
            动态卸载:modprobe  -r  module_name

模块依赖
          /lib/modules/version-release/目录下有moudules.dep文件记载了模块间的依赖关系,并且此文件被编译成二进制格式(modules.dep.bin)使用,如果此文件损坏或丢失可以使用depmod命令重新生成(也可以生成/boot/system.map)

装卸载内核模块
          insmod命令:insmod  [filename]  [module options...]    装载需完整路径
          rmmod命令:rmmod  [module_name]    卸载只需要模块名称
          此方式需要自行解决模块间的依赖关系

/proc目录简介
把内核可配置参数信息和当前运行状态信息通过/proc伪文件系统
内核参数:可写,可接受用户指定一个“新值”来实现对内核某功能或特性的配置,一般位于/proc/sys,除此其他目录为只读信息
                   参数的修改方式:(1)sysctl命令管理内核参数。(2)echo重定向输出至文件
运行状态:只读,仅用于信息显示。如:此目录下数字命名的子目录为当前运行进程的信息

内核参数调整
(1) sysctl命令
    专用于查看或设定/proc/sys目录下参数的值;
     sysctl [options]  [variable[=value]]
     查看:
          # sysctl  -a   所有能够修改的内核参数
          # sysctl  variable       
     修改: sysctl  -w  variable=value
(2) 文件系统命令(cat, echo)
    查看:cat  /proc/sys/PATH/TO/SOME_KERNEL_FILE
    设定:echo  "VALUE"  > /proc/sys/PATH/TO/SOME_KERNEL_FILE
注意:上述两种方式的设定仅当前运行内核有效,并不会永久生效,使用配置文件:/etc/sysctl.conf,  /etc/sysctl.d/*.conf
并立即生效的方式:sysctl  -p  [/PATH/TO/CONFIG_FILE]

示例:
free –m   查看缓存占用的内存空间
  /proc/sys/vm/drop_caches=1  回收buffers和cache的内存空间

/sys目录简介
  内核用来输出已经识别硬件设备的属性,也有内核对硬件特性的可设置参数,某些参数修改可用于调整硬件设备工作特性。

/dev目录简介
  此目录用于根据已有硬件设备输出设备文件,然而内核访问设备是直接通过驱动程序的,只有用户访问硬件设备的时候才需要通过设备文件,然而内核启动时探测出各个已存在的硬件信息是不会为之创建设备文件的。所以2.4内核之前是预先创建好各种硬件所有的设备文件,后来是当用户空间需要使用硬件设备时重新触发内核探测硬件,并把信息保留在/sys目录,udev通过读取此目录信息,来为已有的设备创建设备文件。
udev创建出来的设备文件命名都是驱动文件名,可以读取其事先定义好的规则文件,一般在/etc/udev/rules.d/目录下以及/usr/lib/udev/rules.d/目录,来重新为设备文件命名。

ramdisk文件的制作
(1) mkinitrd命令
        为当前使用中的内核重新制作ramdisk文件,此命令也是调用dracut:
        # mkinitrd [OPTION...] [<initrd-image>] <kernel-version>
                  --with=<module>:除了默认的模块之外需要装载至initramfs中的模块;
                  --preload=<module>:initramfs所提供的模块需要预先装载的模块;
         示例: ~]# mkinitrd  /boot/initramfs-$(uname -r).img   $(uname -r)
 
(2) dracut命令
        # dracut [OPTION...] [<image> [<kernel version>]]
         示例: ~]# dracut /boot/initramfs-$(uname -r).img  $(uname -r)

时间: 2024-10-13 00:37:18

Linux内核基本装载卸载的相关文章

Linux内核如何装载和启动一个可执行程序(转)

原文:http://www.cnblogs.com/petede/p/5351696.html 实验七:Linux内核如何装载和启动一个可执行程序 姓名:李冬辉 学号:20133201 注: 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 云课堂笔记: (1)可执行文件的创建 C代码(.c) - 经过编译器预处理,编译成汇编代码(.asm) - 汇编器,生成目标代码(.o) - 链接

Linux内核如何装载和启动一个可执行程序-----实验7

2015108 李泽源 Linux内核如何装载和启动一个可执行程序 理解编译链接的过程和ELF可执行文件格式,详细内容参考本周第一节: 编程使用exec*库函数加载一个可执行文件,动态链接分为可执行程序装载时动态链接和运行时动态链接,编程练习动态链接库的这两种使用方式,详细内容参考本周第二节: 使用gdb跟踪分析一个execve系统调用内核处理函数sys_execve ,验证您对Linux系统加载可执行程序所需处理过程的理解,详细内容参考本周第三节:推荐在实验楼Linux虚拟机环境下完成实验.

实验七:Linux内核如何装载和启动一个可执行程序

原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 题目自拟,内容围绕对Linux内核如何装载和启动一个可执行程序 可以结合实验截图.ELF可执行文件格式.用户态的相关代码等 博客内容中需要仔细分析新可执行程序的执行起点及对应的堆栈状态等 总结部分需要阐明自己对“Linux内核装载和启动一个可执行程序”的理解 实验报告: 理解编译链接的过程和ELF可执行文件格式: C代码——预处理——汇

解析 Linux 内核可装载模块的版本检查机制

转自:http://www.ibm.com/developerworks/cn/linux/l-cn-kernelmodules/ 为保持 Linux 内核的稳定与可持续发展,内核在发展过程中引进了可装载模块这一特性.内核可装载模块就是可在内核运行时加载到内核的一组代码.通常 , 我们会在两个版本不同的内核上装载同一模块失败,即使是在两个相邻的补丁级(Patch Level)版本上.这是因为内核在引入可装载模块的同时,对模块采取了版本信息校验.这是一个与模块代码无关,却与内核相连的机制.该校验机

lab7:Linux内核如何装载和启动一个可执行程序

李俊锋 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验原理 1.elf可执行文件格式 ELF文件由4部分组成,分别是ELF头(ELF header).程序头表(Program header table).节(Section)和节头表(Section header table).实际上,一个文件中不一定包含全部内容,而且他们的位置也未必如同所示这样安排,只有ELF头的位置

Linux内核分析:实验七--Linux内核如何装载和启动一个可执行程序

刘畅 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 写在前面 本次实验着力分析Linux内核装载和启动一个可执行程序的过程,其中包括可执行文件格式的分析.可执行文件的装载和链接的过程,并通过GDB跟踪execve系统调用来梳理Linux系统加载可执行程序的过程. 可执行文件的格式分析 相对于其它文件类型,可执行文件可能是一个操作系统中最重要的文件类型,因为它们是完成操作的真正执行者.可

Linux内核如何装载和启动一个可执行程序

概念总结 1.可执行程序是怎么得来的 C代码——预处理——汇编代码——目标代码——可执行文件 可执行文件的格式  可执行文件最初为A.out格式,后来演化为COFF格式,再后来变成PE(windows系统)和ELF(linux系统).ELF:executable and linkable format,即可执行可链接格式. 可执行程序的执行环境 命令行参数和shell环境,一般我们执行一个程序的Shell环境,我们的实验直接使用execve系统调用. $ ls -l /usr/bin 列出/us

Linux内核分析——可执行程序的装载

链接的过程 首先运行C预处理器cpp,将C的源程序(a.c)翻译成ASCII码的中间文件(a.i) 接着C编译器ccl,将a.i翻译成ASCII汇编语言文件a.s 接着运行汇编器as,将a.s翻译成可重定位的目标文件a.o 最终完全链接成可执行文件a.out 目标文件 目标文件有三种形式: 可重定位的目标文件 可执行目标文件 共享目标文件 ELF格式的可重定位目标文件的结构如下: .text:已编译程序的机器代码 .rodata:只读数据 .data:已初始化的全局C变量 .bss:未初始化的全

《Linux内核分析》第七周学习总结 可执行程序的装载

第七周.可执行程序的装载 一.可执行程序是如何产生的? (1).c文件gcc汇编形成.s和.asm汇编代码: (2)汇编代码经过gas变成.o目标文件: (3)目标文件变成可执行文件: (4)可执行文件loader之后存储. 预处理:gcc –E –o hello.cpp hello.c –m32 编译:gcc –x cpp-output –S –o hello.s hello.cpp –m32 //编译为汇编代码 gcc –x assembler –c hello.s –o hello.o –