cls = class_create(THIS_MODULE, "myclass"); if(IS_ERR(cls)) { unregister_chrdev(major,"hello"); return -EBUSY; } test_device = device_create(cls,NULL,devno,NULL,"hello");//mknod /dev/hello if(IS_ERR(test_device)
{ proc_create("my_proc_node", 0666, NULL, &my_proc_fops); printk(KERN_INFO "my_proc_node created\n"); return 0; } static void __exit my_proc_exit(void) { remove_proc_entry("my_proc_node", NULL); printk(KERN_INFO "my_proc_node removed\n"); } module_init(my_proc_init);...
entry = create_proc_entry ("scullseq", 0 ,NULL); /* 步骤二:1、将proc文件和对应的文件操作关联起来*/ if(entry) entry -> proc_fops = & scull_proc_ops ; #endif } ... ... static void __exit scull_exit(void) { #ifdef SCULL_SEQ_FILE /* 我们在模块中创建的proc文件,都应该模块clea...
major = register_chrdev(0, GPIO_KEY_NAME, &kobox_key_operations); if (major < 0) { printk(" can't register major number\n"); return major; } /* create class */ kobox_key_class = class_create(THIS_MODULE, GPIO_KEY_NAME); if(IS_ERR(kobox_key_class)) { printk("class_create...
* scull_trim - 遍历链表,并释放所有找到的量子和量子集 * @dev: scull设备 */ int scull_trim(struct scull_dev *dev) { int i, qset; struct scull_qset *next, *dptr; qset = dev->qset; for (dptr = dev->data; dptr; dptr = next) { ...
printk("%d", tail->data); } printk("\n");return0; } ... 二. proc文件系统相关操作://这里的资料不足,需要另外参考网络资料1. 头文件: #include<linux/proc_fs.h>#include<linux/seq_file.h>2. 创建文件: proc_create();3. 创建目录: proc_mkdir();4. 删除文件,目录: remove_proc_entry(...