内核、模块

内核参数说明

/proc目录介绍详见链接

内核参数目录及配置文件:

  1. /proc/*
  2. /usr/lib/sysctl.d/*
  3. /etc/sysctl.d/*.conf
  4. /etc/sysctl.conf #开机读取的内核参数文件:

修改内核参数的注意事项

  1. Sysctl命令用来配置与显示在/proc/sys目录中的内核参数.如果想使参数长期保存,可以通过编辑/etc/sysctl.conf文件来实现。
  2. 修改/proc下内核参数文件内容,不能使用编辑器来修改内核参数文件,理由是由于内核随时可能更改这些文件中的任意一个,另外,这些内核参数文件都是虚拟文件,实际中不存在,因此不能使用编辑器进行编辑,而是使用echo命令,然后从命令行将输出重定向至 /proc 下所选定的文件中。参数修改后立即生效,但是重启系统后,该参数又恢复成默认值。因此,想永久更改内核参数,需要修改/etc/sysctl.conf文件。
    1. echo 1 > /proc/sys/net/ipv4/ip_forward
    2. sysctl -w net.ipv4.ip_forward=1
    3. 永久的方法:
    4. echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
  3. 如果想使参数马上生效,也可以执行如下命令sysctl -p

模块说明

全称为动态可加载内核模块(Loadable Kernel Module,LKM),简称为模块

模块是具有独立功能的程序,它可以被单独编译,但不能独立运行。它在运行时被链接到内核作为内核的一部分在内核空间运行,这与运行在用户空间的进程是不同的。模块通常由一组函数和数据结构组成,用来实现一种文件系统、一个驱动程序或其他内核上层的功能。

总之,模块是一个为内核(从某种意义上来说,内核也是一个模块)或其他内核模块提供使用功能的代码块。

模块存放目录以及配置文件:

  1. /etc/modprobe.d/*.conf | /run/modprobe.d/*.conf| /usr/lib/modprobe.d/*.conf #依次从/etc/,/run/,/usr/lib/目录读取,模块的额外参数
  2. /etc/modules-load.d/*.conf | /run/modules-load.d/*.conf | /usr/lib/modules-load.d/*.conf #依次从/etc/,/run/,/usr/lib/目录读取,读取开机加载的模块
    1. 该目录格式为每个模块一行
    2. 注意不要给模块名加任何后缀
    3. 具体效果可以详见右图
  • /usr/lib/modules/$(uname -r)/kernel/ #注:不同版本内核的模块目录不同,所有安装的模块都在该目录下,如果需要把模块加载到内核中,则可以通过命令来加载该目录下的对应模块即可
    1. arch #与硬件平台有关的项目,例如CPU的等级等等
    2. crypto #核心所支持的加密的技术,例如md5或者des等等
    3. drivers #一些硬件的驱动程序,例如显卡、网卡、PCI相关硬件等等
    4. fs #核心所支持的filesystems,例如vfat、reiserfs、nfs等等
    5. lib #一些函数库
    6. net #与网络有关的各项协定数据,还有防火墙模块
    7. sound #与音效有关的各项模块

模块之间的依赖性

使用depmod命令读取/lib/modules/$(uname -r )/kernel/目录下每个模块并分析,然后把分析结果写入/lib/modules/$(uname -r)/modules.dep文件中。

语法结构

内核参数控制命令

sysctl [OPTIONS] [variable[=value]] [...] #在运行环境中配置内核参数

  1. OPTIONS

    1. -a #显示所有变量
    2. -p #从文件中读取值
    3. -w #写一个值到变量中
  2. EXAMPLE

模块控制命令

depmod #输出适用于modprobe可用性的依赖列表,然后把分析结果写入/lib/modules/$(uname -r)/modules.dep文件中。

  1. EXAMPLE

    1. depmod -n #可以不写入文件而把结果输出到屏幕上
    2. depmod -e #显示出目前已载入的不可执行的模块名称

lsmod #显示当前系统下已经加载了哪些模块。共三列信息Module(模块名)、size(模块的大小)、Used by(此模块被哪个模块所使用)

  1. EXAMPLE

    1. lsmod ##显示当前系统下已经加载了哪些模块

modinfo [OPTIONS] <ModuleName|FileName...> #通过模块名或者模块文件名来查看模块信息

  1. OPTIONS

    1. -a #仅列出作者名称
    2. -d #仅列出该module的description
    3. -l #仅列出该module的license
    4. -n #仅列出该module的filename项(module的文件所在路径)
  2. EXAMPLE

modprobe [OPTIONS] ModuleName #通过module的名字管理module(不能通过文件名);如果用该命令不加任何OPTIONS则是加载module,重启后消失

modprobe(module探针)(自动处理可载入模块)是linux的一个命令,可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod.dep文件的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块

  1. OPTIONS

    1. -c #列出目前系统所有的模块
    2. -f #强制载入该模块
    3. -r #移除摸个module
  2. EXAMPLE

原文地址:https://www.cnblogs.com/Forsake-dream/p/9980707.html

时间: 2024-10-10 17:41:36

内核、模块的相关文章

ubuntu 下面编译内核

1. 安装编译内核环境工具 <pre name="code" class="html">sudo apt-get install build-essential kernel-package libncurses5-dev libqt3-headers build-essential (基本的编程库(gcc, make 等) kernel-package (Debian 系统里生成 kernel-image 的一些配置文件和工具) libncurses5

《Linux内核设计与实现》读书笔记——第一二章

<Linux内核设计与实现>读书笔记——第一二章 第一章 Linux内核简介 1.1 Unix的历史 简洁:仅提供系统调用并有一个非常明确的设计目的. 抽象:Unix中绝大部分东西都被当做文件,这种抽象使对数据和对设备的操作是通过一套相同的系统调用接口来进行的(open().read().write().lseek().close()). 可移植:使用C语言编写,使其在各种硬件体系架构面前都具备令人惊异的移植能力. 进程创建迅速:有独特的fork()系统调用,一次执行保质保量地完成一个任务.简

Linux系统管理之十二---内核编译升级

一.内核基础 1.内核下载地址www.kernel.org 2.内核核心存于:/boot/vmlinuz-version, 用uname  -r命令查询版本号.   内核模块存于:/lib/modules/version 3.linux内核设计:   单内核+模块 4.用户空间访问.监控内核的方式:通过修改/proc, /sys,这两个目录中文件的内容,来访问.修改.监控内核的特性. /proc  :大部分是只读的.     /proc/sys:大多数是可读写的.  设定内核数值的方法::   

ldd3-2 构造和运行模块:环境搭建

编程环境搭建: 因为ubuntu 12.04的内核版本已经是3.x,而目前一些讲解内核驱动的书都是2.6.x. 嵌入式开发的版本一般都是基于3.14移植的,因为嵌入式是跑在开发板上的,所以开发驱动没有问题.但是教材的例子一般都是基于PC机的2.6.x版本,虽然内核内部接口相对稳定,但是我也不太清楚.至于低版本的内核驱动是否直接运行在高版本的Ubuntu上,我也不是太了解这里面的对应关系.为了排除无关的干扰,决定虚拟机安装个Ubuntu 10.04 32位,它对应的内核版本是2.6.32-21,这

Linux内核配置解析 - 概述(基于ARM64架构)

1. 前言 对刚接触Linux kernel的同学来说,遇到的第一个问题就是:我该从哪里入手?. 话说Linux kernel的打开方式是多种多样的:从简单的设备驱动入手:从源代码的目录结构入手:从kernel的启动过程入手:从大的功能模块入手:等等.不管怎样,每条都是正途(条条大路通罗马嘛). 而本文(以及随后的系列文章),将从Linux kernel的配置项入手,从整体上认识Linux kernel.之所以这么做,原因有二: 1)Linux kernel的配置项数目繁多,以至于进行kerne

浅谈mysql主从复制的高可用解决方案

1.熟悉几个组件(部分摘自网络)1.1.drbd     —— DRBD(Distributed Replicated Block Device),DRBD号称是 "网络 RAID",开源软件,由 LINBIT 公司开发.DRBD 实际上是一种块设备的实现,主要被用于Linux平台下的高可用(HA)方案之中.他是有内核 模块和相关程序而组成,通过网络通信来同步镜像整个设备,有点类似于一个网络RAID的功能.也就是说当你将数据写入本地的DRBD设备上的文件系统 时, 数据会同时被发送到网

Apache(一)

以下介绍是基于centos,Apache/2.2.15,进行解释 (资料来自www.netcraft.com) Apache 模块化的软件 Apache=core+module(内核+模块) core:实现基本的web服务 module:Apache服务的拓展功能 Apache功能特性 DSO:dynamic shared object,指定模块的装载方式 MPM:mutipath processing module,多路径处理模块 MPM模块 prefork:每个进程处理一个请求 worker

linux重要目录详细说明

一级目录:             /bin    存放系统命令和工具.二进制命令 (相当于C:\WINDOWS\system32)         /boot   包含linux系统的启动引导文件和GRUB         /dev    存放硬件设备文件及驱动程序         /etc    存放配置文件 .conf  (相当于windows的ini文件)         /home   存放普通用户家目录  (相当于C:\Documents and Settings)         

配置DRBD

一.原理  1. DRBD(Distributed Replicated Block Device)是一种块设备(分布式复制块设备),可以被用于高可用(HA)之中.它类似于一个网络RAID-1功能.当你将数据写入本地文件系统时,数 据还将会被发送到网络中另一台主机上.以相同的形式记录在一个文件系统中.             本地(主节点)与远程主机(备节点)的数据可以保证实时同步.当本地系统出现故障时,远程主机上还会保留有一份相同的数据,可以继续使用.            在高可用(HA)中

读书笔记125

第一章 Linux内核简介 1.1 Unix的历史 由于Unix系统设计简洁并且在发布时提供源代码,所以许多其他组织和团体都对它进了进一步的开发. Unⅸ虽然已经使用了40年,但计算机科学家仍然认为它是现存操作系统中最强大和最优秀的系统.从1969年诞生以来,由Dennis Ritchie和Ken Thompson的灵感火花点亮的这个Unix产物已经成为一种传奇,它历经了时间的考验依然声名不坠. 1.2 追寻Linus足迹:Linux简介 1.3 操作系统和内核简介 处理器在任何指定时间点上的活