Linux????????豸??д
???????????? ???????[ 2013/1/28 10:22:02 ] ????????
????????????????Щ??????д?????????????????漰???豸???д?????????????????????????????????????????????????Linux?????豸????α?д????????????????Linux?????????????????Щ??????????????????У?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????п??????????????????????????????
??????1?????????豸??????????????????????????0???????д????????????????????
??????2???????????豸???????????????е???????
??????3????????豸???????????????????п???????????
??????4???????????????漰??api??????????????????????????????????????????????
??????5???????????????豸???????????????????У?????п???????????£??????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Щ??????????????????????????????????????????????????????????????????????????pc Linux?????????????????????????????豸?????????????????????????????????顣??????????????????????????????豸???????????????????????????????ν???豸?????豸????????????????????????????????????????????????????????????Linux?????豸???????????
???????棬??????????????????д??μ???char?豸??????????????char.c??
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/cdev.h>
static struct cdev chr_dev;
static dev_t ndev;
static int chr_open(struct inode* nd?? struct file* filp)
{
int major ;
int minor;
major = MAJOR(nd->i_rdev);
minor = MINOR(nd->i_rdev);
printk("chr_open?? major = %d?? minor = %d
"?? major?? minor);
return 0;
}
static ssize_t chr_read(struct file* filp?? char __user* u?? size_t sz?? loff_t* off)
{
printk("chr_read process!
");
return 0;
}
struct file_operations chr_ops = {
.owner = THIS_MODULE??
.open = chr_open??
.read = chr_read
};
static int demo_init(void)
{
int ret;
cdev_init(&chr_dev?? &chr_ops);
ret = alloc_chrdev_region(&ndev?? 0?? 1?? "chr_dev");
if(ret < 0 )
{
return ret;
}
printk("demo_init(): major = %d?? minor = %d
"?? MAJOR(ndev)?? MINOR(ndev));
ret = cdev_add(&chr_dev?? ndev?? 1);
if(ret < 0)
{
return ret;
}
return 0;
}
static void demo_exit(void)
{
printk("demo_exit process!
");
cdev_del(&chr_dev);
unregister_chrdev_region(ndev?? 1);
}
module_init(demo_init);
module_exit(demo_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR(feixiaoxing@163.com);
MODULE_DESCRIPTION("A simple device example!");
??????
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11