转载_linux /sys目录下各个子目录的具体说明

/sys目录是Linux内核的重要组成部分,用于管理和展示系统中的各类设备信息。本篇详细介绍了/sys目录下的主要子目录及其功能,包括全局设备结构体系、设备类型分类模型、块设备列表、总线类型及文件系统等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/sys目录下各个子目录的具体说明
 
/sys下的子目录
内容
 
/sys/devices
该目录下是全局设备结构体系,包含所有被发现的注册在各种总线上的各种物理设备。一般来说,所有的物理设备都按其在总线上的拓扑结构来显示,但有两个例外,即platform devices和system devices。platform devices一般是挂在芯片内部的高速或者低速总线上的各种控制器和外设,它们能被CPU直接寻址;system devices不是外设,而是芯片内部的核心结构,比如CPU,timer等,它们一般没有相关的驱动,但是会有一些体系结构相关的代码来配置它们。
(sys/devices是内核对系统中所有设备的分层次表达模型,也是/sys文件系统管理设备的最重要的目录结构)
 
sys/dev
该目录下维护一个按照字符设备和块设备的主次号码(major:minor)链接到真是设备(/sys/devices)的符号链接文件。
 
/sys/class
该目录下包含所有注册在kernel里面的设备类型,这是按照设备功能分类的设备模型,每个设备类型表达具有一种功能的设备。每个设备类型子目录下都是这种哦哦那个设备类型的各种具体设备的符号链接,这些链接指向/sys/devices/name下的具体设备。设备类型和设备并没有一一对应的关系,一个物理设备可能具备多种设备类型;一个设备类型只表达具有一种功能的设备,比如:系统所有输入设备都会出现在/sys/class/input之下,而不论它们是以何种总线连接到系统的。(/sys/class也是构成linux统一设备模型的一部分)
 
/sys/block
该目录下的所有子目录代表着系统中当前被发现的所有块设备。按照功能来说防止在/sys/class下会更合适,但由于历史遗留因素而一直存在于/sys/block,但从linux2.6.22内核开始这部分就已经标记为过去时,只有打开了CONFIG_SYSFS_DEPRECATED配置编译才会有这个目录存在,并且其中的内容在从linux2.6.26版本开始已经正式移到了/sys/class/block,旧的接口/sys/block为了向后兼容而保留存在,但其中的内容已经变为了指向它们在/sys/devices/中真实设备的符号链接文件。
 
/sys/bus
该目录下的每个子目录都是kernel支持并且已经注册了的总线类型。这是内核设备按照总线类型分层放置的目录结构,/sys/devices中的所有设备都是连接于某种总线之下的,bus子目录下的每种具体总线之下可以找到每个具体设备的符号链接,
一般来说每个子目录(总线类型)下包含两个子目录,一个是devices,另一个是drivers;其中devices下是这个总线类型下的所有设备,这些设备都是符号链接,它们分别指向真正的设备(/sys/devices/name/下);而drivers下是所有注册在这个总线上的驱动,每个driver子目录下 是一些可以观察和修改的driver参数。
(它也是构成linux统一设备模型的一部分)
/sys/fs
按照设计,该目录使用来描述系统中所有的文件系统,包括文件系统本身和按照文件系统分类存放的已挂载点。
/sys/kernel
这个目录下存放的是内核中所有可调整的参数
/sys/firmware
该目录下包含对固件对象(firmware object)和属性进行操作和观察的接口,即这里是系统加载固件机制的对用户空间的接口.(关于固件有专用于固件加载的一套API)
/sys/hypervisor
该目录是与虚拟化Xen相关的装置。(Xen是一个开放源代码的 虚拟机监视器)
 
/sys/module
该目录下有系统中所有的模块信息,不论这些模块是以内联(inlined)方式编译到内核映像文件中还是编译为外模块(.ko文件),都可能出现在/sys/module中。即module目录下包含了所有的被载入kernel的模块。
 
/sys/power
该目录是系统中的电源选项,对正在使用的power子系统的描述。这个目录下有几个属性文件可以用于控制整个机器的电源状态,如可以向其中写入控制命令让机器关机/重启等等。
<think>我们正在寻找与dwc_otg相关的系统文件路径和配置信息。dwc_otg通常是指DesignWare USB On-The-Go控制器,在Linux系统中,其驱动相关的信息会出现在/sys文件系统中。 根据引用[1]和引用[3]中的信息,我们可以知道: - 在/sys目录下可以通过find命令查找与dwc_otg相关的节点。 - 设备树(dts)文件(如rk3288.dtsi)中会配置USB控制器的属性,包括模式(Host/Device)等。 因此,我们可以采取以下步骤: 1. 使用find命令在/sys目录下搜索与dwc_otg相关的文件和目录。 2. 检查设备树中关于dwc_otg的配置(需要查看设备树文件,但设备树信息在运行时可能体现在/sys/firmware/devicetree/base中)。 3. 查看内核模块参数(如果dwc_otg以模块形式加载)。 但是,由于用户要求查找/sys路径及其配置信息,我们重点关注/sys文件系统。 根据经验,dwc_otg驱动在/sys中常见的路径包括: - /sys/module/dwc2/(如果驱动名为dwc2,因为dwc_otg驱动在内核中通常被命名为dwc2) - /sys/devices/platform/soc/*.usb/(具体路径可能因平台而异) 由于不同平台路径可能不同,我们使用find命令来查找。 但是,请注意,用户可能无法直接执行命令,因此我们提供典型的路径和查找方法。 典型路径示例(以树莓派为例,但其他平台类似): - /sys/module/dwc2/drivers/platform:dwc2/ - /sys/devices/platform/soc/*.usb/(如:/sys/devices/platform/soc/20980000.usb/) 在这些目录下,我们可以找到一些重要的文件,例如: - `registers`:寄存器的dump(需要root权限) - `gadget`:当作为设备(gadget)时的配置目录 - `host`:当作为主机时的配置目录 另外,在/sys/class/udc/目录下,会列出所有的USB设备控制器(UDC),其中可能包含dwc_otg对应的UDC。 所以,我们可以这样查找: 1. 查找与dwc_otg相关的驱动模块参数: ``` find /sys/module/dwc2/ -type f ``` 2. 查找USB控制器的设备路径: ``` find /sys/devices/platform -name "*usb*" ``` 3. 查看UDC目录: ``` ls /sys/class/udc/ ``` 4. 在找到的UDC目录下,会有一些配置文件和子目录,例如: - `current_speed`:当前速度 - `state`:当前状态 - `subsystem`:指向/sys/class/udc/ 另外,关于配置信息,我们可以通过设备树来获取。在运行时,设备树的信息在/sys/firmware/devicetree/base/下,我们可以尝试查找与dwc_otg相关的节点。 例如: ``` find /sys/firmware/devicetree/base -name "*dwc*" ``` 但是,请注意,/sys/firmware/devicetree/base下的文件是二进制的,需要用专门的工具(如dtc)来解析。不过,我们可以直接读取一些属性(属性文件是二进制的,但有些文本属性可以直接用cat查看,但非文本属性会显示乱码)。 因此,我们建议在具有dtc工具的系统上,将设备树导出并解析。 如果用户只是需要查看配置参数,也可以查看内核启动日志(dmesg)中关于dwc_otg初始化的信息。 综上所述,我们给出以下建议的步骤: 步骤1:在/sys/module/中查找dwc2(或dwc_otg)模块的参数 步骤2:在/sys/devices/platform/中查找usb控制器 步骤3:检查/sys/class/udc/目录 步骤4:查看设备树信息(如果存在/sys/firmware/devicetree/base) 具体命令如下: 1. 查找模块参数: ```bash $ find /sys/module/dwc2/ -type f ``` 2. 查找USB设备: ```bash $ find /sys/devices/platform -name "*usb*" ``` 3. 查看UDC: ```bash $ ls -l /sys/class/udc/ ``` 4. 查看设备树中dwc_otg的配置(如果存在): ```bash $ find /sys/firmware/devicetree/base -name "*dwc*" ``` 然后,可以针对找到的路径进一步查看具体的文件。 例如,如果我们在/sys/module/dwc2/parameters/目录下,会有一些参数文件,如`otg_cap`,我们可以通过`cat`查看这些文件来获取当前配置。 注意:由于系统不同,路径和参数可能有所差异,以上仅为常见情况。 下面,我们将根据引用内容补充一些细节: - 引用[1]中提到,可以通过`find /sys -name otg_ed_test`来查找眼图测试节点,这说明在/sys目录下搜索特定名称是可行的方法。 - 引用[3]中展示了设备树中USB控制器的配置,其中`rockchip,usb-mode`属性用于设置模式(0-正常,1-Host,2-Device)。在/sys/firmware/devicetree/base中,我们可以找到对应的属性文件。 因此,我们可以尝试搜索属性文件: ```bash $ find /sys/firmware/devicetree/base -name "*usb*" ``` 然后进入相关目录,查看是否有`rockchip,usb-mode`文件(注意,在设备树中属性名中的逗号在/sys中会转换为下划线,即`rockchip_usb_mode`),但实际在/sys中,属性文件是直接以属性名作为文件名,且没有后缀。但是,由于设备树中的属性可能是二进制格式,直接cat可能无法查看。 所以,我们也可以使用以下命令查看设备树中usb控制器的属性: ```bash $ dtc -I fs /sys/firmware/devicetree/base ``` 但注意,dtc命令可能不在嵌入式系统中,所以可能需要交叉编译后使用,或者将设备树文件复制出来解析。 综上所述,我们给出以下典型路径和配置信息: ### 1. dwc_otg驱动模块参数 路径:`/sys/module/dwc2/parameters/` 重要参数文件: - `otg_cap`:OTG能力(0表示HNP和SRP,1表示HNP,2表示SRP,3表示无) - `dr_mode`:驱动模式(host, peripheral, otg) ### 2. UDC控制器信息 路径:`/sys/class/udc/`(例如:`dwc2.0.auto`) 在该目录下,每个UDC控制器都有一个子目录,里面包含: - `uevent`:事件信息 - `current_speed`:当前速度(如高速、全速) - `state`:当前状态(如not attached, configured, suspended等) ### 3. 设备树信息 路径:`/sys/firmware/devicetree/base/soc/usb@...`(具体路径根据平台不同) 重要属性: - `compatible`:兼容性字符串,如"rockchip,rk3288_usb20_otg" - `dr_mode`:模式(host, peripheral, otg) - 其他配置(如中断、时钟等) ### 4. 调试信息 调试信息通常在`/sys/kernel/debug/`下,需要先挂载debugfs: ```bash $ mount -t debugfs none /sys/kernel/debug ``` 然后,在`/sys/kernel/debug/dwc2/`(如果存在)或`/sys/kernel/debug/usb/dwc2/`下可以找到寄存器、状态等调试信息。 由于不同平台和内核版本路径可能不同,建议使用find命令查找。 ### 示例命令 ```bash # 查找dwc2模块参数 $ find /sys/module/dwc2/parameters/ -type f -exec echo {} \; -exec cat {} \; # 查找UDC控制器 $ ls /sys/class/udc/ # 查看设备树中USB控制器的属性(如果设备树已挂载) $ find /sys/firmware/devicetree/base -name "*usb*" -exec echo {} \; -exec dtc -I fs {} 2>/dev/null \; # 注意:需要dtc命令 # 或者直接查看属性文件(如果属性是字符串) $ find /sys/firmware/devicetree/base -name "*usb*" -exec sh -c 'echo "{}: "; cat {}' \; 2>/dev/null ``` 注意:直接cat设备树属性文件可能得到二进制数据或乱码,所以最好使用hexdump或者dtc工具。 ### 相关问题 1. 如何修改dwc_otg的工作模式(Host/Device)? 2. dwc_otg驱动在设备树中的配置参数有哪些? 3. 如何调试dwc_otg驱动的问题?</think>### 与 dwc_otg 相关的系统路径及配置信息 #### 1. **驱动模块参数路径** dwc_otg 驱动加载后的参数配置位于: ```bash /sys/module/dwc2/parameters/ ``` 关键参数文件: - `dr_mode`:USB 工作模式(host/device/otg) - `otg_cap`:OTG 能力配置(0=HNP+SRP, 1=HNP, 2=SRP, 3=None) - `gadget_driver`:当前绑定的设备端驱动名称(如 g_ether) 示例查看命令: ```bash cat /sys/module/dwc2/parameters/dr_mode ``` #### 2. **设备树配置映射路径** 设备树中 dwc_otg 的配置会映射到: ```bash /sys/firmware/devicetree/base/soc/usb@*dwc* ``` 关键配置节点(参考引用[3]): - `compatible = "rockchip,rk3288_usb20_otg"`:驱动兼容性标识 - `rockchip,usb-mode = <1>`:工作模式(0=正常, 1=Host, 2=Device) - `reg`:寄存器物理地址范围 - `interrupts`:中断号配置 #### 3. **UDC(USB Device Controller)接口** 设备模式下的控制接口: ```bash /sys/class/udc/dwc2.0.auto/ ``` 关键文件: - `uevent`:设备事件通知 - `current_speed`:当前连接速度(high/full/low) - `state`:OTG 状态机状态(如 attached, configured) - `gadget/subsystem`:关联的 gadget 驱动路径 #### 4. **调试信息路径** 内核调试接口(需先挂载 debugfs): ```bash mount -t debugfs none /sys/kernel/debug ls /sys/kernel/debug/dwc2/ ``` 包含: - `regdump`:寄存器实时状态 - `testmode`:眼图测试控制(参考引用[1]) - `ep0/`:端点0传输状态 #### 5. **Gadget 驱动配置** 设备端功能配置路径: ```bash /sys/class/udc/dwc2.0.auto/device/gadget/ ``` 例如启用 RNDIS 功能: ```bash echo rndis > /sys/class/udc/dwc2.0.auto/device/gadget/function ``` --- ### 配置修改示例 #### 强制切换到 Host 模式 ```bash # 修改设备树参数(需重启) echo 1 > /sys/firmware/devicetree/base/soc/usb@ff580000/rockchip,usb-mode # 运行时切换(需驱动支持) echo host > /sys/module/dwc2/parameters/dr_mode ``` #### 执行 USB 眼图测试 ```bash # 查找测试节点 find /sys -name otg_ed_test # 输出示例:/sys/devices/platform/soc/5100000.udc-controller/otg_ed_test # 触发测试 echo test_pack > /sys/devices/platform/soc/5100000.udc-controller/otg_ed_test ``` --- ### 关键注意事项 1. **权限问题**: 访问 `/sys/kernel/debug` 需 root 权限,可临时修改权限: ```bash chmod 755 /sys/kernel/debug # 参考引用[2] ``` 2. **路径差异**: dwc_otg 路径随芯片平台变化: - Rockchip:`/sys/devices/platform/soc/usb@ff580000` - Allwinner:`/sys/devices/platform/soc/usbc0` 3. **模式切换限制**: 部分硬件需在设备树中固定模式(`rockchip,usb-mode`),运行时切换可能无效[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值