字符设备驱动高级篇4——自动创建设备文件的函数代码分析

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

一、概述

设备文件的创建,主要涉及class_create()函数device_create()函数。

class_create()函数用于自动创建 /sys/class/目录下的xxx目录。

device_create()函数用于自动创建 /dev/目录下的xxx文件。

二、sys文件系统简介

(1)sys文件系统的设计思想

将内核的一些信息,以文件的形式列在sys目录下,如下所示。

root@ubuntu:/sys# ls
block  bus  class  dev  devices  firmware  fs  hypervisor  kernel  module  power
root@ubuntu:/sys# cd block/
root@ubuntu:/sys/block# ls
loop0  loop2  loop4  loop6  ram0  ram10  ram12  ram14  ram2  ram4  ram6  ram8  sda  sr1
loop1  loop3  loop5  loop7  ram1  ram11  ram13  ram15  ram3  ram5  ram7  ram9  sr0
root@ubuntu:/sys/block# cd ../bus/
root@ubuntu:/sys/bus# ls
ac97         cpu           hid           mdio_bus     platform  sdio   virtio
acpi         eisa          i2c           mmc          pnp       serio  workqueue
clockevents  event_source  isa           pci          rapidio   spi    xen
clocksource  gameport      machinecheck  pci_express  scsi      usb    xen-backend
root@ubuntu:/sys/bus# cd ../class/
root@ubuntu:/sys/class# ls
ata_device  bsg        firmware     leds      powercap      rfkill        spi_host       vtconsole
ata_link    devfreq    gpio         mdio_bus  power_supply  rtc           spi_master     watchdog
ata_port    dma        graphics     mem       ppdev         scsi_device   spi_transport
backlight   dmi        hidraw       misc      ppp           scsi_disk     thermal
bdi         drm        hwmon        mmc_host  printer       scsi_generic  tty
block       enclosure  i2c-adapter  net       pwm           scsi_host     vc
bluetooth   extcon     input        pci_bus   regulator     sound         virtio-ports
root@ubuntu:/sys/class#

应用层通过读写该目录下的文件,可以和内核进行一些信息交互。


(2)设备类的概念

内核将设备或者说驱动进行分类,比如和声音有关的、和时钟有关的等等,不同的类别的内容放在不同的/sys/class/xxx目录下,如上所示。xxx是由class_creat()函数创建的。


(3)/sys/class/xxx/ 目录中的文件的作用

目录下有dev,event,power,subsystem等文件。

通过这些文件,可以在应用层得知内核的一些数据结构与状态,这也是sys文件系统的意义。

例如cat dev,得知dev中内容是设备号;例如event是内核给udev传递的信息的地方。


(4)题外话

1)proc文件系统的功能类似于sys文件系统的功能,比如通过cat /proc/devices可以查看已经注册的块设备和字符设备的主设备号和设备名称。早期一般是通过/proc文件系统来获知系统信息的,后来因为没有统一规划,导致/proc文件系统杂乱,于是内核维护者开发了sys文件系统,进行了统一规划。

(2)/dev/xxx是设备文件,和/proc/devices,或者/sys/class/xxx/dev,有什么关系吗?

见字符设备驱动基础3——使用register_chrdev()函数注册字符设备中的描述。“proc目录是一个虚拟文件系统,可以为linux用户空间和内核空间提供交互;它只存在于内存中,而不占实际的flash或硬盘空间。/proc/devices/里的设备是加载驱动程序时生成的,而/dev/下的设备是通过创建设备节点生成的,用户通过此设备节点来访问内核里的驱动。”

 

二、函数追踪

(1)class_create()函数

class_create

        __class_create

               __class_register

                      kset_register

                            kobject_uevent:内核发送uevent给应用层


(2)device_create()函数

device_create

      device_create_vargs

            kobject_set_name_vargs:设置设备的名字

            device_register:注册设备

                  device_add

                        kobject_add

                       device_create_file:这些函数都是用来创建/sys/class/xxx/中的内容的

                       device_create_sys_dev_entry

                       devtmpfs_create_node

                       device_add_class_symlinks

                       device_add_attrs

                       device_pm_add

                       kobject_uevent

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unicode字符、python乱码问题

http://www.cnblogs.com/BeginMan/archive/2013/08/08/3246619.html#a1 Python常见常用知识点http://blog.csdn.net/tingsking18/article/details/4033645 Unicode和Python的中文处理如何让Python的Unicode字符串支持中文?要想利用Python的Unicode机制处理字符串&…

win10下如何安装vb6.0sp6_Mac如何安装win10系统?Parallels Desktop 15 Mac安装win10系统教程...

Parallels Desktop 15 mac版是mac上非常强大也非常好用的虚拟机软件,最新版本的parallels desktop mac 15针对最新的Windows 10更新和macOS Catalina(10.15)进行了优化。今天分享的内容就是Parallels Desktop 15 mac版如何安装win10系统。PD虚…

android面试题精选

1.android dvm 的进程和Linux的进程,应用程序的进程是否为同一个概念: 答:dvm是dalivk虚拟机。每一个android应用程序都在自己的进程中运行,都拥有一个dalivk虚拟机实例。而每一个dvm都是在linux的一个进程。所以说可以认为是同一…

字符设备驱动高级篇5——静态映射表的建立过程,动态映射结构体方式操作寄存器

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 补充内容:字符设备驱动基础5——驱动如何操控硬件_天糊土的博客-CSDN博客 一、静态映射表的建立过程 关于“静态映射表的建立”这部分内容,有以下三个关键: &…

python 分布图_python数据分布型图表柱形分布图系列带误差线的柱形图

柱形分布图系列柱形分布图系列使用柱形图的方式展示数据的分布规律;可以借助误差线或散点图;带误差线的柱形图就是使用每个类别的均值作为柱形的高度;再根据每个类别的标准差绘制误差线;缺点:无法显示数据的分布情况&a…

[汇编] 002基础知识-CPU和寄存器

CPU是什么 当然这里的内存不仅仅指电脑上的内存,例如:我的金士顿8G内存,七彩虹1G独显,在这里来说,显卡也是有内存的(寄存器) CPU如何控制其它部件的? 问题:CPU是如何和电脑主机中其它芯片有条不…

Asp.net中页面传值几种方式

页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值、存储对象传值、ajax、类、model、表单等。但是一般来说,常用的较简单有QueryString,Session,Cookies,Application,Server.Transfer。  …

字符设备驱动高级篇6——内核提供的读写寄存器接口

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 1、访问寄存器的方式 之前对寄存器的操作,都是先定义指向寄存器的指针,然后再解引用来对寄存器进行操作。这是因为ARM体系中,内存和IO是统一编址的。但是其他体系…

java台球游戏设计原理_Java实现简单台球游戏

Java实现简单台球桌问题,供大家参考,具体内容如下需求:使小球可以在桌面上移动,移动到桌面边缘将被弹回,显示小区的移动素材:小球照片桌球照片程序源代码:package 桌球游戏;import java.awt.*;i…

wordpress教程:默认http头信息X-Pingback的隐藏与修改

利用站长工具的http状态查询工具查询可以看到类似如下的一段http HEAD信息 X-Pingback: http://www.kristain.com/wordpress真实路径/xmlrpc.php 其实这样就已经暴露了wordpress网站的真实路径了,那么如何来隐藏wordpress默认http HEAD信息中的X-Pingback信息呢&…

关于java assertion

大部分转载自参考资料:http://www.ibm.com/developerworks/cn/java/l-javaassertion/index.html assertion(断言)在软件开发中是一种常用的调试方式,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序…

mupdf不支持x64_Delphi xe2使用x64编译器编译ASM代码时出错 . 不支持的语言功能:'ASM'...

代码无法直接正确移植到x64,因为它将执行64位指针截断 - 有关详细信息,请参见下文 .64位应用程序不支持将汇编语句与Pascal代码混合使用 . 使用Pascal代码或完全用汇编编写的函数替换汇编语句 .这里使用装配是不必要的 . 我不确定为什么原作者会选择去解…

IOC是什么?

2019独角兽企业重金招聘Python工程师标准>>> Inversion of Control,即反转控制,或许说为依赖注入更为合适。IoC就是一种设计模式。 Interface Driven Design接口驱动,接口驱动有很多好处,可以提供不同灵活的子类实现&a…

poj2516Minimum Cost

http://poj.org/problem?id2516 建图的时候 有个地方写错了 卡了半年。。 题意看了N久啊 有N个店主需要K种物品 有M个供应点 每个供应点有K种物品 其实是算K次最小费用 然后叠加 分解开来这题就是求把某种物品从供应点送到店主那里 多个源点-》多个汇点 所以加一个超级源点 和…

设备驱动框架1——LED驱动框架的分析(核心层)

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、驱动框架的含义 1、理解层面1:驱动的分层设计 设备驱动程序,是由内核驱动部分的维护者,以及驱动开发工程师协作完成的。 内核驱动部分的维护者,往…

myeclipse连接mysql怎么调用_myeclipse连接mysql数据库详细步骤

第一步 打开Database windows-prefenrence-showview-DBbrowser ,此时会在工具底部有个DBbrowser ,选中它,再它所控制的页面的任意位置 右击new---跳转到一个配置driver的页面 (选择连接方式)图一打开myeclipse然后点击window窗口 点击Open Perspective…

struts2中文件上传

注意点 private File image;//对应的就是表单中文件上传的那个输入域的名称,Struts2框架会封装成File类型的private String imageFileName;// 上传输入域FileName 文件名private String imageContentType;// 上传文件的MIME类型 单个文件 1 package cn.itcast.ac…

虚拟内存管理

MMU 现代操作系统普遍采用虚拟内存管理(Virtual Memory Management)机制,这需要处理器中的MMU(Memory Management Unit,内存管理单元)提供支持,本节简要介绍MMU的作用。 首先引入两个概念&…

设备驱动框架2——基于驱动框架写LED驱动(具体操作层)

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 前言 之前写到,九鼎没有使用内核推荐的LED驱动框架。因此,我们打算基于LED驱动框架来编写x210开发板的LED驱动。编写前先要去除九鼎移植的LED驱动,然后配置内核支…

mysql重新用户设置密码_mysql用户密码如何重新设置?

mysql用户密码重新设置停掉MySQL服务:sudo service mysql stop以上命令适用于Ubuntu和Debian。CentOS、Fedora和RHEL下使用mysqld替换mysql。以安全模式启动mysql:sudo mysqld_safe --skip-grant-tables --skip-networking &这样我们就可以直接用roo…