author: hjjdebug
date: 2024年 12月 25日 星期三 16:32:44 CST
description: /proc /dev /sys 目录的用途
文章目录
- 甲: /proc目录:
- 对module 的管理:
- $cat /proc/devices
- 乙: /dev 目录
- 创建设备节点命令 mknod
- 丙: /sys 目录
- 1. /sys/dev
- 2. /sys/devices
- 3. /sys/module
- 4. /sys/class
甲: /proc目录:
是一个虚拟文件系统,/proc存储的是当前内核的运行状态信息。
用户可以通过访问/proc目录下的文件获取系统硬件信息和正在运行的进程信息。
例如,
/proc/cpuinfo, 提供了当前cpu信息, 是lscpu 的信息来源
/proc/meminfo, 提供了当前内存的信息。 是 free
/proc/xxx_processID, 提供了各个进程的信息
/proc/sysrq-trigger, 系统请求键. 向它输入g, 会使系统进入调试状态,等待外部接入.
例:
//注册ttyS1 为kgdb调试 on cable 的设备
sudo sh -c “echo ttyS1 > /sys/module/kgdboc/parameters/kgdboc”
sudo sh -c “echo g > /proc/sysrq-trigger”
重点介绍一下 /proc/devices 文件.
/proc/devices 是一个文件. 提供了当前设备信息
其中记录的设备包括了通过insmod加载到内核的,
对module 的管理:
可以通过lsmod查看module
通过insmod 加载module, 通过rmmod 卸载module,
未直接编译到内核的设备驱动就是可卸载的模块. 即驱动也可以动态加载和卸载.
怎样查看设备的主设备号?
$cat /proc/devices
查看字符设备 :“Character devices”,
在命令行输入:
$cat /proc/devices
看其前半部分
查看块设备 :“block devices”,
在命令行输入:
$cat /proc/devices
看其后半部分
查看块设备还可以使用
$lsblk
/proc文件系统为系统管理员和开发人员提供了一种方便的方式来了解系统内部及各进程的运行情况
乙: /dev 目录
/dev是一个特殊的文件系统,
系统已经运行起来,我们(应用程序)怎样与系统打交道?
就是通过对/dev下这些文件的读写及控制来访问实际的硬件设备。
我们可以通过mknod命令来创建设备文件,需要知道设备类型和主设备号
创建设备节点命令 mknod
//mknod /dev/设备名 <b/c>类型 [主设备号] [次设备号]
其中b(块设备), c(字符设备)
例如:
创建一个名为test_device的字符设备,其主设备号230,次设备号为0
sudo mknod /dev/test_device c 230 0
如果底层驱动支持,应用程序对这些文件的操作会调用到底层驱动,实现对硬件的控制。
丙: /sys 目录
也是一个虚拟文件系统,主要用于访问Linux内核的信息。
通过kobj_add函数注册的设备、驱动和总线会在/sys目录下创建对应的文件和目录,形成一个树形结构,便于管理和访问。
介绍其目录下的两个子目录 /sys/dev /sys/devices
1. /sys/dev
它有两个子目录block和char,存放的是块设备和字符设备的主次设备号,形式为(major:minor),
它指向 /sys/devices 目录下的设备。
2. /sys/devices
设备树文件,按照设备挂接的总线类型,组织成层次结构,保存了系统所有的设备,
用户态的后台程序(udev)会动态地周期性的扫描/sys目录中的属性项来自动管理设备文件(也称为设备节点),
从而在/dev目录建立或者删除对应的设备文件。
3. /sys/module
系统模块信息目录, 新添加的模块可以从这里查看
4. /sys/class
该目录以类的方式来组织驱动
需要一个真实的驱动来进行实际的操练,参考…