本次使用的是迅为IMX6ULL开发板。
代码如下:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/kdev_t.h>
#define DEVICE_NUMBER 1
#define DEVICE_SNAME "schrdev"
#define DEVICE_ANAME "achrdev"
#define DEVICE_MINOR_NUMBER 0
static int major_num,minor_num;
module_param(major_num,int,S_IRUSR);
module_param(minor_num,int,S_IRUSR);
static int hello_init(void)
{
dev_t dev_num;
int ret;
if(major_num){
printk("major_num=%d\n",major_num);
printk("minor_num=%d\n",minor_num);
dev_num = MKDEV(major_num,minor_num);
ret = register_chrdev_region(dev_num,DEVICE_NUMBER,DEVICE_SNAME);
if(ret < 0){
printk("register_chrdev_region error\n");
}
printk("register_chrdev_region ok\n");
}else{
ret=alloc_chrdev_region(&dev_num,DEVICE_MINOR_NUMBER,DEVICE_NUMBER,DEVICE_ANAME);
if(ret < 0){
printk("alloc_chrdev_region error\n");
}
printk("alloc_chrdev_region ok\n");
major_num = MAJOR(dev_num);
minor_num = MINOR(dev_num);
printk("major_num=%d\n",major_num);
printk("minor_num=%d\n",minor_num);
}
printk("hello init\n");
return 0;
}
static void hello_exit(void)
{
unregister_chrdev_region(MKDEV(major_num,minor_num),DEVICE_NUMBER);
printk("hello exit\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
2.Makefile如下:
obj-m +=chrdev.o
KDIR:=/home/topeet/linux-imx-rel_imx_4.1.15_2.1.0_ga
PWD?=$(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules