代碼如下: ~~~~ include include include include include include include include include include include include include / 確定主設備號 / static int major; static ...
代碼如下:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/irq.h>
#include <asm/uaccess.h>
#include <asm/irq.h>
#include <asm/io.h>
#include <asm/arch/regs-gpio.h>
#include <asm/hardware.h>
#include <linux/poll.h>
#include <linux/cdev.h>
/* 確定主設備號 */
static int major;
static struct class *cls;
static struct cdev my_cdev;
static int open(struct inode *inode, struct file *file)
{
printk(" In 'open' \n");
return 0;
}
/* 構造file_operations */
static struct file_operations fops = {
.owner = THIS_MODULE,
.open = open,
};
static int cdev_init(void)
{
dev_t devid;
if (major) {
devid = MKDEV(major, 0);
register_chrdev_region(devid, 1, "cdev");
} else {
/* 動態申請設備編號 */
alloc_chrdev_region(&devid, 0, 1, "cdev");
major = MAJOR(devid);
}
cdev_init(&my_cdev, &fops);
cdev_add(&my_cdev, devid, 1);
/* 創建類 */
cls = class_create(THIS_MODULE, "cdev");
/* 創建節點 /dev/cdev0 */
class_device_create(cls, NULL, MKDEV(major, 0), NULL, "cdev0");
return 0;
}
static void cdev_exit(void)
{
class_device_destroy(cls, MKDEV(major, 0));
class_destroy(cls);
cdev_del(&my_cdev);
unregister_chrdev_region(MKDEV(major, 0), 1);
}
module_init(cdev_init);
module_exit(cdev_exit);
MODULE_LICENSE("GPL");