Linux设备驱触动模块己加以载示例与原了松析

分享到:
[db:作者] • 2018-11-30 10:13 来源:[db:来源] EG0

  本文伸见Linux设备驱触动模块在设备报户口时何以完成己触动加以载和创确立备节点。

  在Linux体系中,基于sysfs文件体系、设备驱触动模具和udev器却以实当今设备模块“冷、暖和”加以载时己触动加以载设备对应的驱触动以次,同时却以按需在/dev目次下创确立备节点。

  本文中我架设建好环境并写了两个骈杂的示例以次demo_device.c和device_driver.c到来仿造“设备”与“驱触动”的己触动加以载和设备节点己触动创立的经过。最末经度过内核源代码到来了松就中的规律知。

  试验环境:

  内核版本:Linux-3.12.35

  器:(1)udev:udev-137

  ? ? ? ? ? ? (2)提交叉编译器:arm-bcm2708-linux-gnueabi-

  示例环境:(1)宿主机:x86(CentOS6.6)

  ? ? ? ? (2)单板:树莓派b

  壹、示例演示

  1、预备工干(环境架设建)

  (1)比值先配备内核,确认其顶持NETLINK和inotify:

  [*] Networking support?--->

  Networking options? --->

   <*> Unixdomain sockets

  File systems? --->

  [*] Inotify support for userspace ?

  udev运用inotify机制监测udev的规则文件能否突发变募化,udev和内核驱触动模块之间的uevent提交互运用socket,需寻求内核顶持NETLINK。

  (2)文件体系顶持proc和sysfs文件体系

  udev需寻求sysfs文件体系的顶持,同时后续用到的lsmod命令是经度过proc和sysfs文件体系获取内核模块信息的,因此需寻求顶持proc和sysfs,最骈杂的做法却以在init脚丫儿子本中添加以:

  mount -n -t proc proc/proc

  mount -n -t sysfssysfs /sys

  (3)文件体系中服置拥有udevd、udevadm和驱触动加以载规则文件

  [apple@appleraspberry]$ ls initramfs/lib/udev/rules.d/

  80-drivers.rules

  [apple@apple raspberry]$ lsinitramfs/bin/udev*

  initramfs/bin/udevadm?initramfs/bin/udevd

  80-drivers.rules是加以载驱触动的规则,udevadm用于对冷扦拔设备仿造暖和扦拔,udevd是udev守养护以次,实时监测内核向用户发递送的uevent以及rules的变卦。

  2、示例以次demo_device.c和device_driver.c的源码如次:

  demo_device.c:

  鉴于嵌入式设备驱触动较多运用Platform尽线,因此此雕刻边的demo_device运用Platform尽线(其他实体尽线如PCI、USB等规律相像)。此雕刻边第14行的init函数担负在加以载模块时报户口demo_device设备,第21行函数担负在模块卸载时吊销demo_device设备。第10行的name用于platform设备与驱触动的婚配。

  demo_driver.c:

  第89行的init函数用于在加以载驱触动模块时报户口demo_driver驱触动,同时创立demo_class(用于己触动生成设备节点),第104行的exit函数用于在卸载驱触动模块时吊销demo_driver驱触动;第82行的name和demo_device中的壹样,用于和platform设备终止婚配;第44行的probe函数在设备和驱触动婚配后会实行,它的首要工干是像内核添加以字符设备cdev,同时调用device_create()函数创确立备节点;第18、24和30行是规范的文件操干接口,此雕刻边就茫然细伸见了。第118行指定了驱触动模块的驱触动佩号,前面详细伸见它的干用。

本文来源前瞻网,转载请注明来源!(图片来源互联网,版权归原作者所有)

p23q0

分享:
标签: [db:TAG标签]
J

意见
反馈

×