Linux 文件夹与设备

May 22, 2023 作者: yijianhao 分类: Linux 浏览: 117 评论: 0

Linux 文件夹与设备

Linux根目录下的文件与文件夹


/
├── bin -> usr/bin             包含必要的命令二进制文件(命令);引导、修复和恢复系统
├── boot                       包含启动系统所需的文件,包括 Linux 内核和引导程序配置文件
├── dev                        包含表示硬件组件和外围设备的设备文件
├── etc                        系统范围的配置文件
├── home                       普通用户的主目录
├── lib -> usr/lib             目录包含/bin和/sbin中程序所需的共享库
├── lib64 -> usr/lib           与/lib类似,但它包含64位库。
├── mnt                        可移动存储设备的临时挂载点
├── opt                        安装不属于默认操作系统发行版的可选软件包
├── pkglist.x86_64.txt
├── proc                       虚拟文件系统,提供有关进程和系统状态的信息
├── root                       这是 root 用户的主目录
├── run                        系统守护程序和服务的运行时数据
├── sbin -> usr/bin            包含用于系统维护和恢复的必要系统二进制文件
├── srv                        包含由系统提供的服务的数据
├── sys                        虚拟文件系统,提供有关系统硬件设备及其驱动程序的信息
├── tmp                        存储应用程序和脚本创建的临时文件,操作系统可能会定期清除
├── usr                        用户相关的程序、库和文件
├── var                        变量数据,如日志文件、缓存文件和汇编文件
└── version

Linux常见的设备

/dev
├── autofs                    内核控制的自动挂载点
├── block                     目录, 系统中所有块设备的符号链接
├── bsg                       目录,包含了块层 SCSI 通用设备。
├── btrfs-control             字符设备,用于与 Btrfs 文件系统进行交互
├── bus                       目录,包含了系统中所有总线设备的符号链接
├── char                      目录,包含了系统中所有字符设备的符号链接
├── console                   系统控制台设备
├── core -> /proc/kcore       符号链接,指向 /proc/kcore,它提供了对系统内存的访问
├── cpu_dma_latency           字符设备,用于设置 CPU DMA 延迟
├── cuse                      这是 CUSE(Character Devices in Userspace)的控制设备
├── disk                      目录,包含了系统中所有磁盘设备的符号链接
├── dri                       目录,包含了直接渲染基础架构(DRI)设备                          
├── dxg                       微软 Hyper-V 的 Direct3D GPU 设备
├── fd -> /proc/self/fd       符号链接,指向当前进程的文件描述符目录
├── full                      字符设备,总是返回写入错误(ENOSPC)
├── fuse                      这是 FUSE(Filesystem in Userspace)的控制设备
├── hugepages                 目录,用于管理大页面(huge pages)
├── hvc0~7                    这些都是虚拟控制台设备,用于与虚拟机进行交互
├── kmsg                      内核日志缓冲区设备,用于读取内核日志消息
├── log -> /run/systemd/journal/dev-log         这是一个符号链接,指向 systemd 日志套接字。它用于将日志消息发送到 systemd-journald 服务。
├── loop0~7                   这些都是循环设备(loop devices),用于将文件挂载为块设备
├── loop-control              循环设备控制器,用于管理循环设备
├── mapper                    目录,包含了逻辑卷管理器(LVM)创建的逻辑卷设备
├── mem                       物理内存访问设备。它允许直接访问物理内存地址空间
├── mqueue                    POSIX 消息队列文件系统的挂载点。它用于管理 POSIX 消息队列
├── net                       目录,包含了网络相关的设备文件。例如,tun/tap 设备和 PPP 设备等。
├── null                      空设备。对它的写入操作会被忽略;从它读取数据会立即返回 EOF(End of File)标记。
├── nvram                     非易失性随机存储器(NVRAM)设备。它允许读写计算机上的 NVRAM 数据
├── ppp                       点对点协议(PPP)网络接口设备。它用于建立 PPP 网络连接
├── ptmx                      伪终端主设备。它用于创建伪终端从设备(pts)
├── ptp0
├── pts
├── ram0~N           RAM 磁盘设备。它们用于在内存中创建虚拟磁盘,通常用于提高磁盘访问速度。可以像普通磁盘一样使用fdisk分区工具进行分区和格式化,RAM 磁盘中的数据是暂时性的。当系统关闭或重启时,RAM 磁盘中的所有数据都会丢失。因此,RAM 磁盘通常用于存储临时文件或缓存数据
├── random                 随机数生成器设备,设备生成的随机数来自于系统的熵池(entropy pool)。当熵池中的熵不足时,读取 /dev/random 设备会被阻塞,直到收集到足够的熵。
├── urandom                随机数生成器设备,设备也使用系统的熵池来生成随机数,但它不会在熵不足时阻塞。相反,它会使用伪随机数生成器(PRNG)来生成额外的数据。
├── sd[a-z]                 sd[a-z] 是SCSI 磁盘设备。它们代表了系统上连接的 SCSI 磁盘,包括 SATA 和 USB 磁盘

├── sg0~N    /dev/sg0 到 /dev/sgN 是通用SCSI设备。它们提供了对SCSI设备的原始访问,允许你直接发送SCSI命令。可以使用sg_*系列命令来与这些设备进行交互,例如,使用sg_inq /dev/sg0命令来查询第一个SCSI设备的信息,使用不当可能会导致数据丢失或设备损坏

├── shm     共享内存(shared memory)文件系统的挂载点,在C语言中, shm_open()函数来创建共享内存对象,mmap()函数将其映射到进程的地址空间,需要注意的是,共享内存对象是持久性的。即使所有使用它的进程都已退出,它仍然存在于系统中。需要使用 shm_unlink()函数来删除不再需要的共享内存对象
├── stderr -> /proc/self/fd/2      /dev/stdin,/dev/stdout 和/dev/stderr 是标准输入、标准输出和标准错误设备。它们分别代表了当前进程的标准输入、标准输出和标准错误流
├── stdin -> /proc/self/fd/0
├── stdout -> /proc/self/fd/1
├── tty0 - ttyN       虚拟控制台设备。它们代表了系统上的虚拟控制台,通常用于在本地计算机上与系统进行交互。可以使用Ctrl+Alt+F1 到 Ctrl+Alt+Fn进行切换
├── ttyS0 - ttySN     串行端口设备, 在一些工业控制和数据采集计算机上可能会有                      
       
├── vcs 1...N    /dev/vcs 和 /dev/vcsa 是虚拟控制台存储(virtual console memory)设备。它们用于访问虚拟控制台的屏幕内容。
├── vcsa 1...N      /dev/vcsN设备包含了第N个虚拟控制台的文本屏幕内容 /dev/vcsaN 设备包含了第N个虚拟控制台的文本屏幕内容和属性信息, 
├── vcsu  1...N    与上面两个相似,都可以直接使用cat命令查看
├── vfio
├── vhost-net
├── virtio-ports
├── vport0p0
├── vport0p1
├── vsock           虚拟套接字(vsock)设备。它用于在虚拟机和宿主机之间建立套接字连接
└── zero            零设备。它是一个字符设备,用于生成连续的零字节流, 例如,可以使用 dd if=/dev/zero of=/path/to/file bs=1M count=100 命令来创建一个大小为 100MB 的全零文件。或者,您可以使用 cat /dev/zero > /dev/sda 命令来擦除磁盘上的所有数据

GPIO(General Purpose Input/Output)

在 ARM 架构的开发板上,GPIO(General Purpose Input/Output)通常可以通过 /sys/class/gpio 目录进行访问和控制。

/sys/class/gpio 目录提供了一组简单的接口,用于配置和控制 GPIO 引脚。可以使用这些接口来设置 GPIO 引脚的方向(输入或输出)、读取引脚状态或设置引脚电平等。

例如,可以使用以下命令来导出 GPIO 引脚 17 并将其配置为输出模式:

echo 17 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio17/direction

然后,可以使用以下命令来设置 GPIO 引脚 17 的电平:

echo 1 > /sys/class/gpio/gpio17/value # 设置为高电平
echo 0 > /sys/class/gpio/gpio17/value # 设置为低电平

不同的开发板可能会有不同的 GPIO 接口和命名方式。需要查阅开发板的文档来确定如何访问和控制 GPIO 引脚。

c语言控制GPIO

#include <stdio.h>
#include <stdlib.h>

int main() {
    // 导出 GPIO 引脚 17
    FILE *export_file = fopen("/sys/class/gpio/export", "w");
    if (export_file == NULL) {
        printf("Error: cannot open /sys/class/gpio/export\n");
        exit(1);
    }
    fprintf(export_file, "17\n");
    fclose(export_file);

    // 将 GPIO 引脚 17 配置为输出模式
    FILE *direction_file = fopen("/sys/class/gpio/gpio17/direction", "w");
    if (direction_file == NULL) {
        printf("Error: cannot open /sys/class/gpio/gpio17/direction\n");
        exit(1);
    }
    fprintf(direction_file, "out\n");
    fclose(direction_file);

    // 设置 GPIO 引脚 17 的电平
    FILE *value_file = fopen("/sys/class/gpio/gpio17/value", "w");
    if (value_file == NULL) {
        printf("Error: cannot open /sys/class/gpio/gpio17/value\n");
        exit(1);
    }
    fprintf(value_file, "1\n"); // 设置为高电平
    fclose(value_file);

    return 0;
}

#配置(2)#设备(1)#嵌入式(1)#wsl(3)

评论