解释linux下应用层调用驱动(hello)
创始人
2024-05-29 22:13:22

创建一个hello的设备来举例应用层如何调用kernel驱动,kernel驱动部分为转载,仅对部分语句做解释。

init函数

Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点,当然前提条件是用户空间移植了udev。

内核中定义了struct class结构体,顾名思义,一个struct class结构体类型变量对应一个类,内核同时提供了class_create(…)函数,可以用它来创建一个类,这个类存放于sysfs下面,一旦创建好了这个类,再调用device_create(…)函数来在/dev目录下创建相应的设备节点。这样,加载模块的时候,用户空间中的udev会自动响应device_create(…)函数,去/sysfs下寻找对应的类从而创建设备节点。

创建"hello_class"以及"hello"设备,这两个设备分别挂载在如下路径:

/sys/class/hello_class

/dev/hello

/* 5. kernel启动时initcall(module_init)会调用这个入口函数         */
static int __init hello_init(void)
{int err;printk("%s %s line %d\n", __FILE__, __FUNCTION__, __LINE__);major = register_chrdev(0, "hello", &hello_drv);  /* /dev/hello *//* 7. 其他完善:提供设备信息,自动创建设备节点                                 */hello_class = class_create(THIS_MODULE, "hello_class");err = PTR_ERR(hello_class);if (IS_ERR(hello_class)) {printk("%s %s line %d\n", __FILE__, __FUNCTION__, __LINE__);unregister_chrdev(major, "hello");return -1;}    device_create(hello_class, NULL, MKDEV(major, 0), NULL, "hello"); /* /dev/hello */return 0;
}
/* 指定驱动的入口和出口,以及声明自己的驱动遵循GPL协议(不声明的话无法把驱动加载进内核) */
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");

将驱动编译进kernel内核后,我们来写一个app打开该设备,调用设备驱动的接口。

注意一下open函数的设备名称为:"/dev/hello"

#include 
#include 
#include 
#include 
#include 
#include static char databuf[1024];
static char writebuf[1024];int main(int argc,char *argv[])
{int fd;int ret;fd = open("/dev/hello", O_RDWR);if(fd < 0){printf("open fail! \n");printf("error  number: %d \n",fd);return -1;}memset(databuf,0x0,1024);ret = read(fd, databuf, sizeof(databuf));memset(writebuf,0x0,1024);ret = write(fd, writebuf, sizeof(writebuf));printf("write over \n");
}

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...