驱动代码与文件系统中的设备信息

关于mkmod

不使用mknod,在驱动代码里自动生成设备号:

  1. 1.在内核驱动中用class_create,device_create两个函数,内核启动后就会在sysfs文件系统中建立相应的设备信息,记得把sysfs文件系统挂载到/sys,为下一步做准备
  2. 2.去官网下载udev,编译生成udevd,udevstart......等9个工具,只要把udevd,udevstart拷到自己的文件系统,配置好udev,并在系统启动时运行(可以在rcS脚本中加入),这样内核启动后,udev就会根据/sys里信息在/dev下建立设备文件
  3. 具体可以去这里看看http://blog.csdn.net/farsight2009/archive/2009/05/31/4228136.aspx

?

  1. 以作者所写的一个字符设备驱动为例,在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用device_create创建对应的设备。大致用法如下:
  2. ?
  3. struct
    class *myclass ;
  4. ????????class_create(THIS_MODULE, "my_device_driver");
  5. ????????device_create(myclass, NULL, MKDEV(major_num, minor_num), NULL, "my_device");
  6. ?
  7. 这样的module被加载时,udev daemon就会自动在/dev下创建my_device设备文件。
  8. ?
  9. 我们在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在 /dev目录下创建相应设备节点,并在卸载模块时删除该节点,当然前提条件是用户空间移植了udev。

?

参考:

  1. 加载驱动时怎么使系统自动创建设备文件

    http://bbs.chinaunix.net/thread-1960639-1-1.html

  2. linux-2.6.35内核版本中class_create()和device_create的使用

    http://blog.csdn.net/farsight2009/article/details/8814121

查看设备

,对比文件系统中的设备和驱动代码的关系

?

  1. 1. ls /dev/
  2. ????class_dev_name_led1 ptyv4 ttyd3
  3. ????class_dev_name_led2 ptyv5 ttyd4
  4. ????class_dev_name_led3 ptyv6 ttyd5
  5. ????class_name_leds
  6. ????…..
  7. ?
  8. ??1.2 .[cd /dev/ ; ?ls -l |grep 设备名 //显示主设备号和次设备号]
  9. # ls -l|grep led*
  10. crw-rw---- 1 0 0 252, 1 Oct 20 2014 class_dev_name_led1
  11. crw-rw---- 1 0 0 252, 2 Oct 20 2014 class_dev_name_led2
  12. crw-rw---- 1 0 0 252, 3 Oct 20 2014 class_dev_name_led3
  13. crw-rw---- 1 0 0 252, 0 Oct 20 2014 class_name_leds
  14. 2. cat /proc/devices //只显示主设备号
  15. ?252 leds_dev_name
  16. …..
  17. 补充:
  18. 3. ls /sys/class
  19. ????leds_class …
  20. Drv_Code:
  21. #define LEDS_DEV_NAME "leds_dev_name"
  22. register_chrdev_region(devno , LEDS_DEV_COUNT , LEDS_DEV_NAME);
  23. class_device_create(leds_class, NULL, MKDEV(leds_major, 0), NULL, "class_name_leds");
  24. class_device_create(leds_class, NULL, MKDEV(leds_major, minor), NULL, "class_dev_name_led%d", minor);
时间: 2024-10-30 11:15:29

驱动代码与文件系统中的设备信息的相关文章

Flutter 中获取设备信息 以及 获取地 理位置

一.Flutter 中获取设备信息 https://pub.dev/packages/device_info 设备信息代码 import 'package:flutter/material.dart';import 'package:device_info/device_info.dart'; class DevicPage extends StatefulWidget{ DevicPage({Key key}); _DevicPage createState() => _DevicPage()

隐匿在iOS文件系统中的隐私信息

说明: 1. 本文仅供安全学习及教学用途,提及的部分技术带有攻击性,请确保合法使用. 2. “这些都不是我干的,我就负责说出来.” 3. 图片仅供参考. 4. 本文所讨论的内容适用于iOS 8.4环境,其应用程序数据文件夹在/var/mobile/Containers/Data/.不同系统版本的文件位置以及内容形式有差异 0×00 前言 女神是神奇的,那天她找我,问我怎么把她越狱iPhone的iapfree卸载.我拿来看,发现她很不机智,把对应的软件源删除了.憋住笑,我边给她科普软件源,apt,

在根文件系统中查看设备树(有助于调试)

a. /sys/firmware/fdt  进入/sys/firmware目录后便可看到二个文件,一个是devicetree文件夹,另一个是fdt(原始dtb文件,可以用hexdump -C fdt 将其打印出来查看就会发现里面的数据和dtb文件是一致的). b. /sys/firmware/devicetree 以目录结构呈现的dtb文件. 根节点对应base目录, 每一个节点对应一个目录, 每一个属性对应一个文件 c. /sys/devices/platform 系统中所有的platform

Linux下SPI和IIC驱动免在设备树上添加设备信息的编写方法

编写驱动时,一般需要往设备树上添加节点信息,这里提供一种直接在驱动中添加设备信息的方法. i2c的驱动模板如下 #include <linux/module.h> #include <linux/i2c.h> #define SENSOR_BUS_NUM 0 #define SENSOR_SLAVE_ADDRESS 0x3e #define SENSOR_NAME "sensor" struct i2c_client *sensor_client=NULL; s

linux设备驱动第四篇:以oops信息定位代码行为例谈驱动调试方法

上一篇我们大概聊了如何写一个简单的字符设备驱动,我们不是神,写代码肯定会出现问题,我们需要在编写代码的过程中不断调试.在普通的c应用程序中,我们经常使用printf来输出信息,或者使用gdb来调试程序,那么驱动程序如何调试呢?我们知道在调试程序时经常遇到的问题就是野指针或者数组越界带来的问题,在应用程序中运行这种程序就会报segmentation fault的错误,而由于驱动程序的特殊性,出现此类情况后往往会直接造成系统宕机,并会抛出oops信息.那么我们如何来分析oops信息呢,甚至根据oop

android 安卓APP获取手机设备信息和手机号码的代码示例

下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机.手机SIM卡确保插入手机里.eclipse ADT和android-sdk开发环境 第一步:新建一个android工程(JinshanTest), 并需要在工程的AndroidManifest.xml文件中,添加权限 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 图例: 第二步:新建一个工具类

SylixOS中RTC设备驱动

1.概述 本文档基于SylixOS-EVB-i.MX6Q验证平台,介绍SylixOS中RTC设备驱动实现过程,可作为在SylixOS集成开发环境下进行字符设备驱动开发的参考. 2.RTC设备驱动 2.1硬件原理 实时时钟(RTC)的主要功能是在系统掉电的情况下,利用备用电源使时钟继续运行,保证不会丢失时间信息. i.MX6Q验证平台上使用的是外置实时时钟集成电路ISL1208.硬件接线如图 2.1所示. 图 2.1 RTC硬件接线 图中,X1和X2为内部反向放大器的输入和输出引脚,要求外置一个3

SylixOS中EEPROM设备驱动实现

1.开发环境操作系统:SylixOS 编程环境:RealEvo-IDE3.1.5硬件平台:SAMA5D2 Xplained开发板 2.EEPROM简介       EEPROM,或写作E2PROM,全称电子抹除式可复写只读存储器 (英语:Electrically-Erasable Programmable Read-Only Memory),是一种可以通过电子方式多次复写的半导体存储设备.相比EPROM,EEPROM不需要用紫外线照射,也不需取下,就可以用特定的电压,来抹除芯片上的信息,以便写入

显示Hadoop文件系统中一组路径的文件信息

//显示Hadoop文件系统中一组路径的文件信息 //我们可以用这个程序来显示一组路径集目录列表的并集 package com; import java.io.IOException; import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.