欢迎来到天天文库
浏览记录
ID:40568014
大小:69.50 KB
页数:12页
时间:2019-08-04
《Linux创建字符设备自动生成设备节点》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Linux创建字符设备自动生成设备节点1.创建字符设备生成设备节点2.busybox LinuxSystemUtilities---> [*]mdev [*]Support/etc/mdev.conf [*]Supportcommandexecutionatdeviceaddition/removal3.kernel Filesystems---> Pseudofilesystems---> [*]sysfsfilesystemsupport [*]Virtualmemoryfilesystemsupport(formershmfs) [*]TmpfsPOSIXAccessC
2、ontrolLists4.rootfs vi./etc/init.d/rcS mount-ttmpfsmdev/dev mkdir/dev/pts mount-tdevptsdevpts/dev/pts mount-tsysfssysfs/sys mount-a echo/sbin/mdev>/proc/sys/kernel/hotplug mdev-s -----------------------------------------------------------------------设备节点是由谁负责创建呢?我自个写着玩的时候一直都是自个用mknod来手动创建设备文
3、件的。实际中设备文件应由谁创建呢?由驱动程序吗?还是系统自带的一些服务(udev等)会在设备接入时来动态的创建设备文件节点啊?如果是那个的话,一个不识别的设备它们(udev等)又怎么知道要如何创建节点呢?比如说U盘系统怎么会知道是创建成sda,sdb等。 设备节点是由你写的驱动程序里面实现的。structclass*myclass=class_create(THIS_MODULE,“char_dev”);class_device_create(myclass,NULL,MKDEV(major_num,0),NULL,“char_dev”);这二个函数就是创建一个设备,和他的节点号。在你加入设备
4、时udev就会判断,然后建立节点。至于你说的不识别的设备,你得加载驱动啊,加载驱动的时候里面只要有上述的二个函数,通过UDEV就会创建了。--------------------------------------------------------------------------------------------两种方法建立设备节点,一种是自己手动用mknod,另一种是存在udev,它会自动创建相应的设备节点。另外,楼主你写的驱动首先是要进行注册的,要创建一个class和device,class在/dev目录下,device在sysfs目录下,这样,你加载模块是就会根据已创建的devi
5、ce去找sysfs目录下的class。---------------------------------------------------------------------------------------------使用linux-2.6.30.4。文件的管理使用的是sysfs.(由udev制作的文件系统) 涉及两个函数:virtual_disk_class=class_create(THIS_MODULE,"VirtualDisk");device_create(virtual_disk_class,NULL,devno,0,"VirtualDisk"); 使用需添加头文件#incl
6、ude 说明:当使用利用udev制作的文件系统时,Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点。内核中定义了structclass结构体,一个structclass结构体类型变量对应一个类(有待商榷),内核同时提供了class_create(…)函数,可以用它来创建一个类,这个类存放于sysfs下面,一旦创建好了这个类,再调用device_create(…)函数来在/dev目录下创建相应的设备节点。这样,加载模块的时候,用户空间中的udev会自动响应device_create(…)函数
7、,去/sysfs下寻找对应的类从而创建设备节点。 在linux-2.6.30.4,structclass定义在头文件include/linux/device.h中,structclass{ constchar *name; structmodule *owner; structclass_attribute *class_attrs; structde
此文档下载收益归作者所有