首页 > 其他分享 >内核文件系统devfs、sysfs

内核文件系统devfs、sysfs

时间:2024-04-25 10:34:15浏览次数:25  
标签:内核 sysfs platform devfs device 驱动 设备

一、设备驱动

1、字符设备驱动(基于文件,以字节单位接受输⼊、返回输出 file_operations)

  字符设备驱动最多,例如led、gpio、i2c 、spi等常用的都是字符设备,杂项设备也一种特殊的字符设备

2、块设备驱动(基于文件,块单位接受输⼊、返回输出 block_device_operations)

  以存储块为基础的存储设备,如NAND、EMMC 、 SD、U盘等块设备

3、网络设备驱动(基于⽹络套接字 net_device)

  有线、无线网络设备均属于网络设备,USB WIFI网卡就属于多种设备驱动(字符+网络设备)

二、devfs 文件系统(2.6内核以前使用)

  1、devfs挂载于/dev目录下,提供了⼀种类似于⽂件的⽅法来管理位于/dev⽬录下的所有设备,在/dev目录下每个文件对应一个设备,我们通过对文件的读写、控制以实现设备访问。

  缺点:①不确定的设备映射;②没有足够的主、辅设备号;③机制和策略都放到内核空间。

  基于上述的缺点,使用用户空间的工具udev实现设备访问(兼容2.6之后引入的工具),其实udev实际使用sysfs提供的信息来实现所有的devfs的功能。

 

三、sysfs文件系统(2.6内核之后使用)

  1、sysfs文件挂载/sys目录下,它把实际连接到系统上的设备和总线组织成⼀个分级的⽂件,它们可以由⽤⼾空间 存取,向⽤⼾空间导出内核数据结构以及它们的属性。

  2、sysfs 分离出device_driver 、device,两者通过bus_type进⾏匹配,⼀旦匹配成功,xxx_driver的 probe函数则被执⾏(xxx为总线名,如platform pci i2c spi usb等)。它是通过kobject⼦系统来建⽴这个信息的,当⼀个kobject被创建的时候,对应的⽂件和⽬录也就被 创建了,既然每个设备在sysfs中都有唯⼀对应的⽬录。

  3、sysfs通过cdev_init和cdev_add添加字符设备,通过class_create和 device_create函数往sys⽂件系统中添加设备,udev检测到/sys⽬录的变动会根据变化在/dev⽬录 下创建对应的设备节点

 

四、platform 设备驱动框架(platform 驱动并不是独⽴于字符设备驱动、块设备驱动和⽹络设备驱动之外的其他种类的驱 动。platform 只是为了驱动的分离与分层⽽提出来的⼀种框架,其驱动的具体实现还是需要字符设 备驱动、块设备驱动或⽹络设备驱动)

  1、从Linux2.6内核之后,引⼊了⼀套新的驱动管理和注册机制:platform_bus、platform_device和platform_driver。设备使用platform_device(后续开发可用DTS替代), 驱动使用platform_driver表示。

 

六、用户空间访问驱动程序

  1、通过dev设备文件访问,“read/write/ioctl”访问

  2、通过procfs接口访问

  3、通过sysfs访问

  

  

 

标签:内核,sysfs,platform,devfs,device,驱动,设备
From: https://www.cnblogs.com/zblblog/p/18156856

相关文章

  • 一个可以取代caxa cad软件的cad内核
    一个可以替代caxacad软件的cad内核。(1))支持常用的直线,圆弧,圆等绘制(2)支持裁剪,延伸等编辑操作(3)支持任意格式的dxf文件;(4)操作简单 ......
  • 在Linux中,发行版和内核有什么区别?
    在Linux世界中,内核版本和发行版之间的区别是理解Linux操作系统生态体系的关键点。以下是两者之间详尽的区别:1.Linux内核:内核是Linux操作系统的核心组件,它是操作系统中最基础的部分,负责管理和调度计算机硬件资源,如处理器、内存、硬盘驱动器和其他外设。它的主要职责包括:硬件抽......
  • NanoPi-NEO 全志H3移植Ubuntu 22.04 LTS、u-boot、Linux内核/内核树、mt7601u USB-Wi-
    前言想在NanoPi-NEO上开发屏幕驱动,但是看了下文件目录发现没有内核树,导致最基础的file_operations结构体都无法使用,于是寻找内核树安装方法。但官方提供的内核为4.14太旧了apt找不到对应的linux-source版本(其实后面发现不需要用apt,可以在kernel.org上下载,但反正都装了那就当学习......
  • 内核config文件打开CONFIG_DEVMEM后出现For kernel requirements at matrix level 5,
    内核config文件打开CONFIG_DEVMEM后出现编译错误:checkvintfI04-1823:30:02409602409602check_vintf.cpp:84]List'out/target/product/sc126/system/product/etc/vintf/':NosuchfileordirectorycheckvintfI04-1823:30:02409602409602check_vintf.cpp:84]L......
  • 超低功耗Sub-1G收发芯片DP32RF002 M0内核(G)FSK/OOK 无线收发机的32位SoC芯
    产品概述DP32RF002是深圳市动能世纪科技有限公司研制的基于ARMCortex-MO+内核的超低功耗高性能的、单片集成(G)FSK/OOK无线收发机的32位SoC芯片。工作于200~960MHz范围内,支持灵活可设的数据包格式,支持自动应答和自动重发功能,支持跳频操作,支持FEC功能,同时内部集成了完整的射频......
  • 202404 ubuntu 操作内核失败导致开机无限进入Memtest86
    问题描述和错误操作众所周知(作者不知道)Memtest86是一个内存测试工具,详细可搜索百度百科,该工具可以从BIOS层面对内存进行相关的测试。但是我们的内核损坏和内存测试又有什么关系呢?实际情况是我们指定使用的内核出现问题的时候(在系统配置文件/etc/default/g*中修改),开机无法进......
  • Linux 64位内核(arm64)驱动兼容32位应用程序(armhf)的ioctl接口
    最近,公司来了一次硬件升级,开发平台从全志T3(armhf)升级到全志T527(arm64),平台迁移后,想直接使用原来动态库和应用程序从而减少开发量,用户态大部分接口都运行正常,唯独ioctl接口无法调用成功。如果要成功移植要做到以下几点:1.驱动要同时实现unlocked_ioctl和compat_ioctl。str......
  • Linux内核协议栈skb成员
    struct__sk_buff{ __u32len; __u32pkt_type; __u32mark; __u32queue_mapping; __u32protocol; __u32vlan_present; __u32vlan_tci; __u32vlan_proto; __u32priority; __u32ingress_ifindex; __u32ifindex; __u32tc_index; __u32cb[5]; __u32has......
  • Linux0.12内核源码解读(2)-Bootsect.S
    大家好,我是呼噜噜,在上一篇文章聊聊x86计算机启动发生的事?我们了解了x86计算机启动过程,MBR、0x7c00是什么?其中当bios引导结束后,操作系统接过计算机的控制权后,发生了哪些事?本文将揭开迷雾的序章-Bootsect.S回顾计算机启动过程我们先来回顾一下,上古时期计算机按下电源键的启动过程,......
  • 如何让WSL2使用自己编译的内核
    目录wsl基本介绍以及安装编译内核下载linux源码使用wsl内核配置添加uvc内核驱动编译内核切换wsl内核重启内核最近有一个摄像头的项目,想着为什么不直接使用wsl呢。查阅了网络上大量的资料,修改了WSL2内核来支持UVCwsl基本介绍以及安装wsl(windowssubsystemforlinux)是wind......