版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Linux驱动学习杂项:fschar_dev.c字符驱动为一个字符设备注册主设备号,Major:主设备号,0-255/* * register_chrdev() - Register a major number for character devices. * major: major device number or 0 for dynamic allocation * name: name of this range of devices * fops: associated with this devices * * If major = 0 this functions will d
2、ynamically allocate a major and return * its number. * * If major > 0 this function will attempt to reserve a device with the given * major number and will return zero on success. * * Returns a -ve errno on failure. * * The name of this device has nothing to do with the name of the device in * /d
3、ev. It only helps to keep track of the different owners of devices. If * your module name has only one type of devices it's ok to use e.g. the name * of the module here. * * This function registers a range of 256 minor numbers. The first minor number * is 0. */int register_chrdev(unsigned int ma
4、jor, const char *name, const struct *fops)struct char_device_struct *cd;struct cdev *cdev;char *s;int err = -ENOMEM;cd = _register_chrdev_region(major, 0, 256, name);if (IS_ERR(cd)return PTR_ERR(cd);cdev = cdev_alloc();if (!cdev)goto out2;cdev->owner = fops->owner;cdev->ops = fops;kobject_s
5、et_name(&cdev->kobj, "%s", name);for (s = strchr(kobject_name(&cdev->kobj),'/'); s; s = strchr(s, '/')*s = '!'err = cdev_add(cdev, MKDEV(cd->major, 0), 256);if (err)goto out;cd->cdev = cdev;return major ? 0 : cd->major;out:kobject_put(&cde
6、v->kobj);out2:kfree(_unregister_chrdev_region(cd->major, 0, 256);return err;MKDEV构造设备号:includelinuxkdev_t.h#define MINORBITS20#define MKDEV(ma,mi)(ma) << MINORBITS) | (mi)MKDEV构造设备号,高12位为主设备号major,低20位为次设备号minor在这里设置了一些主设备号:includelinuxmajor.h#define UNNAMED_MAJOR0#define MEM_MAJOR1#defi
7、ne RAMDISK_MAJOR1#define FLOPPY_MAJOR2#define PTY_MASTER_MAJOR2#define IDE0_MAJOR3#define HD_MAJORIDE0_MAJOR#define PTY_SLAVE_MAJOR3#define TTY_MAJOR4#define TTYAUX_MAJOR5#define LP_MAJOR6#define VCS_MAJOR7#define LOOP_MAJOR7#define SCSI_DISK0_MAJOR8#define SCSI_TAPE_MAJOR9#define MD_MAJOR9#define M
8、ISC_MAJOR10#define SCSI_CDROM_MAJOR11#define MUX_MAJOR11/* PA-RISC only */#define XT_DISK_MAJOR13#define INPUT_MAJOR13#define SOUND_MAJOR14Misc.c是杂项设备,是char设备的一种,只不过是主设备号major是10的char设备。includelinuxmiscdevice.h这是头文件,要使用MISC设备,包含这个头文件,函数有注册与否。#define PSMOUSE_MINOR1#define MS_BUSMOUSE_MINOR2#define PC
9、110PAD_MINOR9#define WATCHDOG_MINOR130/* Watchdog timer */#define TEMP_MINOR131/* Temperature Sensor */#define RTC_MINOR135#define I2O_MINOR166#define MICROCODE_MINOR184#define FUSE_MINOR229#define KVM_MINOR232#define MISC_DYNAMIC_MINOR255struct device;struct miscdevice int minor;const char *name;co
10、nst struct *fops;struct list_head list;struct device *parent;struct device *this_device;extern int misc_register(struct miscdevice * misc);extern int misc_deregister(struct miscdevice *misc);可以看出许多设备都是MISC设备,主要是次设备号不同,像TEMP,I2C,RTC等。driverscharMisc.c/* *misc_register-register a miscellaneous device
11、*misc: device structure * *Register a miscellaneous device with the kernel. If the minor *number is set to %MISC_DYNAMIC_MINOR a minor number is assigned *and placed in the minor field of the structure. For other cases *the minor number requested is used. * *The structure passed is linked into the k
12、ernel and may not be *destroyed until it has been unregistered. * *A zero is returned on success and a negative errno code for *failure. */ int misc_register(struct miscdevice * misc)struct miscdevice *c;dev_t dev;int err = 0;INIT_LIST_HEAD(&misc->list);mutex_lock(&misc_mtx);list_for_each
13、_entry(c, &misc_list, list) if (c->minor = misc->minor) mutex_unlock(&misc_mtx);return -EBUSY;if (misc->minor = MISC_DYNAMIC_MINOR) int i = DYNAMIC_MINORS;while (-i >= 0)if ( (misc_minorsi>>3 & (1 << (i&7) = 0)break;if (i<0) mutex_unlock(&misc_mtx);retu
14、rn -EBUSY;misc->minor = i;if (misc->minor < DYNAMIC_MINORS)misc_minorsmisc->minor >> 3 |= 1 << (misc->minor & 7);dev = MKDEV(MISC_MAJOR, misc->minor);misc->this_device = device_create(misc_class, misc->parent, dev, NULL, "%s", misc->name);if (IS_ERR(misc->this_device) err = PTR_ERR(misc-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年信阳涉外职业技术学院单招综合素质考试题库带答案详解(精练)
- 2026年共青科技职业学院单招综合素质考试题库附答案详解(精练)
- 2026年南京铁道职业技术学院单招职业技能考试题库附参考答案详解(满分必刷)
- 2026年兰州石化职业技术学院单招职业适应性考试题库及参考答案详解(新)
- 2026年内蒙古赤峰市单招职业倾向性测试题库含答案详解(精练)
- 2026年电子商务物流管理实践试题
- 2026年社会工作者专业考试题库社会政策与实践
- 2026年管理类专业题库企业管理与组织行为学测试题集
- 2026年环保工程垃圾处理设施安全检测专项测试题
- 2025年一年级少先队面试题库及答案
- 2025年采制样工岗位培训与考试题库采及答案
- 中国微生物肥项目创业投资方案
- 部队班组搜索战术课件
- 山东省潍坊市2025年中考数学真题附真题答案
- GB/T 45860.2-2025光纤激光束焊机的验收试验第2部分:光纤输送机的移动机构
- 137案例黑色三分钟生死一瞬间事故案例文字版
- 超声引导下外周静脉输液技术临床应用与进展
- 不全流产保守治疗共识
- 《骆驼祥子》知识点24章分章内容详述(按原著)
- 辽宁省名校联盟2024-2025学年高二下学期3月份联合考试数学试题(原卷版)
- DB53T806-2016基于视频图像的道路交通事故分析方法
评论
0/150
提交评论