修改linux的/sys目录下内核参数、模块...

这篇具有很好参考价值的文章主要介绍了修改linux的/sys目录下内核参数、模块...。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

/sys文件系统最重要的目录结构

① /sys/devices

该目录下是全局设备结构体系,包含所有被发现的注册在各种总线上的各种物理设备。一般来说,所有的物理设备都按其在总线上的拓扑结构来显示,但有两个例外,即platform devices和system devices。platform devices一般是挂在芯片内部的高速或者低速总线上的各种控制器和外设,它们能被CPU直接寻址;system devices不是外设,而是芯片内部的核心结构,比如CPU,timer等,它们一般没有相关的驱动,但是会有一些体系结构相关的代码来配置它们。

② /sys/dev

该目录下有字符设备(block)和块设备(char)两个子目录,里面全是以主次设备号(major:minor)命名的链接文件,链接到/sys/devices。

③ /sys/class (按功能分类设备)

该目录下包含所有注册在kernel里面的设备类型,每个设备类型表达具有一种功能的设备。每个设备类型子目录下是具体设备的符号链接,这些链接指向/sys/devices/…下的具体设备。设备类型和设备并没有一一对应的关系,一个物理设备可能具备多种设备类型;一个设备类型只表达具有一种功能的设备,比如:系统所有输入设备都会出现在/sys/class/input之下,而不论它们是以何种总线连接到系统的。(/sys/class也是构成linux统一设备模型的一部分)

④ /sys/block (从linux2.6.26版本开始已经移到了/sys/class/block)

代表着系统中当前被发现的所有块设备。按照功能来说防止在/sys/class下会更合适,但由于历史遗留因素而一直存在于/sys/block,但从linux2.6.22内核开始这部分就已经标记为过去时,只有打开了CONFIG_SYSFS_DEPRECATED配置编译才会有这个目录存在,并且其中的内容在从linux2.6.26版本开始已经正式移到了/sys/class/block,旧的接口/sys/block为了向后兼容而保留存在,但其中的内容已经变为了指向它们在/sys/devices/中真实设备的符号链接文件。

⑤ /sys/bus (按总线类型分类设备)

一般来说每个子目录(总线类型)下包含两个子目录,一个是devices,另一个是drivers;其中devices下是这个总线类型下的所有设备,这些设备都是符号链接,它们分别指向真正的设备(/sys/devices/…下);而drivers下是所有注册在这个总线上的驱动,每个driver子目录下 是一些可以观察和修改的driver参数。 (它也是构成linux统一设备模型的一部分)

⑥ /sys/module

该目录包含所有被载入Kernel的模块,无论这些模块是以内联(inlined)方式编译到内核映像文件中还是编译为外模块(.ko文件)

⑦ /sys/fs

该目录用来描述系统中所有的文件系统,包括文件系统本身和按照文件系统分类存放的已挂载点。

⑧ /sys/kernel

该目录下存放的是内核中所有可调整的参数

⑨ /sys/firmware

该目录下包含对固件对象(firmware object)和属性进行操作和观察的接口,即这里是系统加载固件机制的对用户空间的接口.(关于固件有专用于固件加载的一套API)

⑩/sys/power

该目录下有几个属性文件可以用于控制整个机器的电源状态,如向其中写入控制命令让机器关机/重启等等。

sys目录是一个虚拟文件系统,它包含了与内核相关的文件。这些文件通常是只读的,因此在sys目录下创建或编辑文件是不被支持的,也不会生效。如果您需要在启动时执行一些操作,可以考虑使用/etc/rc.local或者其他的系统启动脚本来实现。但是请注意,修改内核相关的配置或文件可能会导致系统不稳定或无法启动,因此在进行此类操作时应当非常谨慎并备份数据。

sys目录下的文件通常是只读的,因为这些文件包含了与内核相关的信息,不建议直接修改。如果您需要修改内核参数或配置,请使用sysctl命令或者在/etc/sysctl.conf文件中进行修改。对于其他的sys目录下的文件,建议不要随意修改。如果您一定需要修改,可以考虑使用initramfs技术,在系统启动时加载一个自定义的initramfs镜像,其中包含了您需要修改的文件。这样可以避免重启后还原。但是请注意,修改内核相关的配置或文件可能会导致系统不稳定或无法启动,因此在进行此类操作时应当非常谨慎并备份数据。

Initramfs(Initial RAM Filesystem)是一个用于在Linux系统启动时加载临时根文件系统的技术。它包含了必要的内核模块和文件,可以在系统启动时使用。如果您需要在启动时修改sys目录下的文件并使其生效,可以考虑使用initramfs技术。

initramfs技术前提

在Linux系统中,initramfs是一个内核自带的功能,因此不需要单独安装。initramfs是在操作系统启动时由内核自动加载的,用于初始化和加载内核模块、挂载根文件系统等操作。用户可以通过编辑initramfs文件,添加、删除或修改其中的内容,以满足自己的需求。

另外,建议在使用initramfs技术前先了解相关知识和经验,并备份好系统数据,以防出现操作失误或其他问题。在对initramfs文件进行任何修改之前,请确保您已经完全理解其中的文件结构和内容,以及其作用和影响。

确认系统内核支持initramfs。在Linux内核的配置中,可以通过CONFIG_INITRAMFS_SOURCE选项来启用initramfs功能。您可以使用以下命令查看当前内核是否支持initramfs:

zgrep CONFIG_INITRAMFS_SOURCE /proc/config.gz

如果该命令输出“# CONFIG_INITRAMFS_SOURCE is not set”信息,则表示当前内核不支持initramfs。否则,该选项将列出其相应的值(通常是一个文件路径)。

准备基本的initramfs环境。在创建自己的initramfs之前,您需要准备一个包含必要驱动和工具程序的基本initramfs环境,以便在启动时加载。可以使用命令创建一个基本的initramfs,详情参考技术方法2

sudo update-initramfs -c -k $(uname -r)

initramfs技术方法1

下面是一个基本的步骤:

创建一个新的目录,用于存放initramfs镜像的文件

mkdir my_initramfs
cd my_initramfs

在该目录下创建一个名为init的脚本,并添加需要修改的sys目录下的文件。例如,假设您需要修改sys/kernel/debug/tracing/trace_clock文件:

#!/bin/sh

mount -t sysfs none /sys
mount -t debugfs none /sys/kernel/debug

echo local > /sys/kernel/debug/tracing/trace_clock

umount /sys/kernel/debug
umount /sys
#脚本说明
这个脚本的作用是启用Linux内核的跟踪功能,它会执行以下操作:

挂载sysfs和debugfs文件系统到/sys和/sys/kernel/debug目录。
具体来说,这个命令使用了mount工具程序,并指定以下选项:
-t sysfs:指定要挂载的文件系统类型为sysfs。sysfs是一种特殊的文件系统,它提供了一种用户空间访问和管理内核数据结构的接口。
none:表示要挂载的设备或文件系统不存在。在这里,我们并没有指定任何设备节点或文件路径,而是直接将sysfs文件系统挂载到/sys目录下。
/sys:表示挂载点(即目标目录),也就是我们要将sysfs文件系统挂载到的目录。在Linux系统中,/sys目录通常被用于显示当前系统硬件及其状态信息。
因此,当您执行这个命令时,系统会将sysfs文件系统挂载到/sys目录下,并在该目录中显示与当前系统相关的内核数据结构、设备和驱动程序等信息。通过/sys目录,用户可以方便地查看和管理系统中的各种硬件和软件资源,从而更好地理解和调试Linux系统。

将trace_clock设置为“local”,以便在跟踪数据中使用本地时钟。

卸载debugfs和sysfs文件系统。

sysfs文件系统提供了一种获取系统信息的接口,而debugfs文件系统则提供了访问内核调试信息的接口。在这个脚本中,通过挂载这两个文件系统并修改相应的内核参数,可以启用Linux内核的跟踪功能,从而帮助开发人员诊断和调试系统问题。

请注意,需要具有root权限才能运行这个脚本,并且对于不同版本的Linux内核,可能需要进行适当的修改才能正确地启用跟踪功能。

将该脚本赋予执行权限:

chmod +x init

使用find命令将需要的文件复制到initramfs目录中:

find . | cpio --create --format='newc' > ../my_initramfs.cpio
#命令说明
这个命令的作用是将当前目录(包括子目录)中的所有文件和文件夹打包成一个initramfs文件。

具体来说,这个命令使用了两个工具程序:find和cpio。

find命令:用于查找当前目录(包括子目录)中的所有文件和文件夹,并将它们输出到标准输出中。其中,“.”表示当前目录,“|”表示管道符号,将find的输出传递给cpio命令。

cpio命令:用于创建或提取归档文件。在这个命令中,使用了以下选项:

--create:表示创建新的归档文件。

--format='newc':指定归档文件的格式为“newc”,这是一种特定于Linux内核的压缩格式。

../my_initramfs.cpio:将归档文件的输出重定向到上级目录中的名为“my_initramfs.cpio”的文件中。如果该文件不存在,则会自动创建;如果存在,则会覆盖原有内容。

因此,这个命令执行后会将当前目录中的所有文件和文件夹打包成一个名为“my_initramfs.cpio”的initramfs文件,该文件可以被用于启动和初始化Linux系统。

修改GRUB配置文件,以加载initramfs镜像文件。打开/etc/default/grub文件,在GRUB_CMDLINE_LINUX_DEFAULT行中添加initrd=/path/to/my_initramfs.cpio,例如:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash initrd=/path/to/my_initramfs.cpio"

更新GRUB配置文件并重启:

sudo update-grub
sudo reboot

在系统重新启动后,您修改的sys目录下的文件应该已经生效了。请注意,使用initramfs技术需要一定的Linux系统知识,并且修改内核相关的配置或文件可能会导致系统不稳定或无法启动,因此在进行此类操作时应当非常谨慎并备份数据。

注意!!!

initramfs技术方法2

使用initramfs技术在启动时修改/sys目录下的文件并使其生效的步骤如下:

创建一个临时的initramfs环境。可以使用以下命令创建一个包含必要驱动和工具程序的基本initramfs:

sudo update-initramfs -c -k $(uname -r)
#命令说明
这个命令的作用是生成当前系统正在运行的内核版本的initramfs文件,以供启动时使用。

具体来说,这个命令使用了update-initramfs工具程序,并指定以下选项:

sudo:以超级用户权限执行该命令。

update-initramfs:用于更新或创建initramfs文件的工具程序。

-c:表示创建新的initramfs文件。

-k (uname−r):指定要操作的内核版本号。(uname−r):指定要操作的内核版本号。(uname -r)会输出当前正在运行的内核版本号。因此,使用-k选项和$(uname -r)参数,可以确保生成与当前正在运行的内核版本相对应的initramfs文件。

因此,当您执行这个命令时,系统会在/initrd.img目录(也可能是其他目录)下创建一个名为“initrd.img-<kernel_version>”(例如,initrd.img-5.4.0-89-generic)的initramfs文件。该文件包含了必要的驱动、工具程序和文件系统信息,用于在Linux系统启动时初始化和加载内核模块,以及挂载根文件系统。

将/sys目录及其子目录(如果有)添加到initramfs中。可以使用以下命令创建一个脚本,并将其存储在/etc/initramfs-tools/scripts/init-top/目录中:

sudo vim /etc/initramfs-tools/scripts/init-top/add_sys_directory.sh

然后,在该脚本中输入以下内容:

#!/bin/sh
mount --bind /sys /root/sys

这个脚本的作用是将/sys目录挂载到initramfs根目录下的/sys目录中。

  1. 修改需要修改的/sys目录下的文件。您可以使用任何编辑器进行修改。
  2. 在initramfs中添加修改后的文件。可以使用以下命令创建一个脚本,并将其存储在/etc/initramfs-tools/scripts/init-top/目录中:
sudo nano /etc/initramfs-tools/scripts/init-top/copy_modified_files.sh

然后,在该脚本中输入以下内容:

#!/bin/sh
cp /sys/path/to/modified/file /root/sys/path/to/modified/file

这个脚本的作用是将修改后的文件复制到initramfs中/sys目录下。

  1. 保存并关闭脚本文件,并设置其可执行权限:
sudo chmod +x /etc/initramfs-tools/scripts/init-top/add_sys_directory.sh
sudo chmod +x /etc/initramfs-tools/scripts/init-top/copy_modified_files.sh
  1. 重新生成initramfs文件。可以使用以下命令重新生成initramfs:
sudo update-initramfs -u -k $(uname -r)

其中,-u选项表示更新当前内核版本的initramfs;-k选项后面跟随当前内核版本号。

  1. 重启系统以使更改生效。在启动时,initramfs环境会自动加载修改过的/sys目录和文件。

第二种方法(要充分了解模块或驱动)

确认您所要修改的文件属于/sys目录。可以使用以下命令查看文件的路径和属性信息:

ls -l /sys/path/to/file

找到控制该文件的内核模块或驱动程序。可以使用以下命令查看与该文件相关的进程和模块信息:

sudo lsof /sys/path/to/file
sudo lsmod | grep module_name

卸载与该文件相关的内核模块或驱动程序,以停止文件的操作。可以使用以下命令卸载模块:

sudo rmmod module_name

修改文件内容,并保存更改。

编辑系统配置文件,以在每次启动时自动加载修改后的内核模块或驱动程序。具体来说,在/etc/modules-load.d/目录下创建一个新的模块加载文件,例如"my_module.conf",并将模块名称添加到该文件中。例如:

# /etc/modules-load.d/my_module.conf
my_module

重启系统以使更改生效。

请注意,对/sys目录下的文件进行不正确的修改可能会导致系统崩溃或其他严重问题。因此,在进行任何更改之前,请确保您已经完全理解了该文件的含义和作用,并备份好系统数据。建议在修改/sys目录下的文件之前先了解相关知识和经验。文章来源地址https://www.toymoban.com/news/detail-754111.html

到了这里,关于修改linux的/sys目录下内核参数、模块...的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 软件课设(Ⅲ)——padavan-ng编译以及内核模块修改

    我记得今年的很多笔试面试都遇到了linux相关的操作,答题状况都挺……昂。算是补课吧,正好大四的毕业实习、软3还有研0的项目都需要linux的环境进行推进,记录一下,聊作纪念。 实验要求 编译系统,下载并提交,验收的时候,我会找MIPS板子,让大家下载验证。 编译一个

    2024年02月02日
    浏览(39)
  • Ubuntu目录和linux内核文件用途

    1./:根目录,是整个文件系统的起点 2./bin:binary 二进制可执行文件目录,包含用于系统启动和运行的基本命令 3./boot: 启动加载器目录,包含用于系统启动的内核和引导程序文件。 4./dev: device 设备文件目录,包含系统中使用的所有设备文件,如硬盘、光驱、键盘、鼠标等5./etc

    2024年02月10日
    浏览(36)
  • Linux技术内核:数字化时代企业运维的终极武器

    在当今企业的IT运维领域,Linux操作系统因其开源性、高稳定性和强大的定制能力而成为众多企业的首选。Linux技术内核作为系统的核心,对于保障企业运维的稳定性、安全性以及提升效率起着至关重要的作用。接下来,本文将深入探讨Linux技术内核在企业运维中的应用及其带

    2024年03月18日
    浏览(47)
  • 【小吉送书—第三期】Linux私教课:技术内核与企业运维篇

    find [搜索范围] [选项] 🎈按文件名 根据名称查找/home目录下的hello.txt文件 🎈按拥有者 查找/opt目录下,用户名称为nobody的文件 🎈查找Linux系统下大于200M的文件 (+n 大于,-n 小于,n 等于) 查找整个Linux系统下大于200M的文件(M是大写) (因为是整个Linux系统,所以find后面是

    2024年02月08日
    浏览(40)
  • 【送书福利-第十八期】《Linux私教课:技术内核与企业运维篇》

    😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号:程序员洲洲。 🎈 本文专栏:本文收录于洲洲的《送书福利》系列专栏,该专栏福利多多

    2024年02月07日
    浏览(34)
  • Linux内核学习(十三)—— 设备与模块(基于Linux 2.6内核)

    目录 一、设备类型 二、模块 构建模块 安装模块 载入模块 在 Linux 以及 Unix 系统中,设备被分为以下三种类型: 块设备(blkdev) :以块为寻址单位,块的大小随设备的不同而变化;块设备通常支持重定位(seeking)操作,也就是对数据的随机访问。如硬盘、蓝光光碟和 Flas

    2024年02月11日
    浏览(42)
  • Linux驱动开发——内核模块

    目录 内核模块的由来 第一个内核模块程序  内核模块工具  将多个源文件编译生成一个内核模块  内核模块参数 内核模块依赖 关于内核模块的进一步讨论  习题 最近一直在玩那些其它的技术,眼看快暑假了,我决定夯实一下我的驱动方面的技能,迎接我的实习,找了一本

    2024年02月04日
    浏览(53)
  • 【嵌入式Linux内核驱动】内核模块三要素与验证测试

    内核模块 Linux内核模块是一种可以动态加载和卸载的软件组件,用于扩展Linux操作系统的功能。Linux内核本身只包含了必要的核心功能,而内核模块则允许开发者在运行时向内核添加新的功能、驱动程序或文件系统支持,而无需重新编译整个内核或重新启动系统。 内核模块是

    2024年02月06日
    浏览(38)
  • 如何将模块加载到linux内核

    假设存在一个文件叫mymq.c,下该文件相同目录下的makefile如下语句: obj-y += mymq.o 然后编译:编译完成了以后,mymq.c文件中,有个函数叫mymq_open,搜索这个函数在不在System.map文件中,如果在,就说明这个模块被内置到内核中了。 执行grep -rn mymq_open System.map,在文件System.map中搜索

    2023年04月24日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包