驱动程序分层分离概念
理解层次划分:识别概念的层次关系,构建知识框架。 #生活技巧# #学习技巧# #深度理解技巧#
分层概念:
驱动程序向上注册的原理:
比如:输入子程序一个input.c作为一层,下层为Dev.c和Dir.c,分别编写Dev.c和Dir.c向上Input.c注册;如图所示
分离概念:
分离概念主要是讲,设备驱动程序分成两个部分,也将引进另一个新概念bus_dri_dev模型
总线-驱动-设备模式,是讲吧一个驱动分成两个部分,分别挂载到一条总线上的链表中,总线上有.match函数还对两个链表相同名字相匹配,匹配成功跳到driver驱动程序的probe函数来实现驱动的操作。
一下例子主要编写总线驱动设备模式来实现一个控制LED灯的驱动实验:
led_drv.c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
/* 分配/设置/注册一个platform_device */
static struct resource led_resource[] = {
[0] = {
.start = 0x56000050,
.end = 0x56000050 + 8 - 1,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = 5,
.end = 5,
.flags = IORESOURCE_IRQ,
}
};
static void led_release(struct device * dev)
{
}
static struct platform_device led_dev = {
.name = "myled",
.id = -1,
.num_resources = ARRAY_SIZE(led_resource),
.resource = led_resource,
.dev = {
.release = led_release,
},
};
static int led_dev_init(void)
{
platform_device_register(&led_dev);
return 0;
}
static void led_dev_exit(void)
{
platform_device_unregister(&led_dev);
}
module_init(led_dev_init);
module_exit(led_dev_exit);
MODULE_LICENSE("GPL");
led_dev.c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
/* 分配/设置/注册一个platform_device */
static struct resource led_resource[] = {
[0] = {
.start = 0x56000050,
.end = 0x56000050 + 8 - 1,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = 5,
.end = 5,
.flags = IORESOURCE_IRQ,
}
};
static void led_release(struct device * dev)
{
}
static struct platform_device led_dev = {
.name = "myled",
.id = -1,
.num_resources = ARRAY_SIZE(led_resource),
.resource = led_resource,
.dev = {
.release = led_release,
},
};
static int led_dev_init(void)
{
platform_device_register(&led_dev);
return 0;
}
static void led_dev_exit(void)
{
platform_device_unregister(&led_dev);
}
module_init(led_dev_init);
module_exit(led_dev_exit);
MODULE_LICENSE("GPL");
Makefile:
KERN_DIR = /work/system/linux-2.6.22.6
all:
make -C $(KERN_DIR) M=`pwd` modules
clean:
make -C $(KERN_DIR) M=`pwd` modules clean
rm -rf modules.order
obj-m += led_drv.o
obj-m += led_dev.o
led_test.c
#include
#include
#include
#include
/* led_test on
* led_test off
*/
int main(int argc, char **argv)
{
int fd;
int val = 1;
fd = open("/dev/led", O_RDWR);
if (fd < 0)
{
printf("can't open!n");
}
if (argc != 2)
{
printf("Usage :n");
printf("%s n", argv[0]);
return 0;
}
if (strcmp(argv[1], "on") == 0)
{
val = 1;
}
else
{
val = 0;
}
write(fd, &val, 4);
return 0;
}
关键字:驱动程序 分层分离引用地址:驱动程序分层分离概念_总线驱动设备模型_P声明:本文内容及配图由平台用户或入驻媒体撰写。文章观点仅代表作者本人,不代表EEWorld网站立场。文章及其配图仅供工程师学习之用,如有内容侵权或违规,请联系本站处理,邮箱地址:bbs_service@eeworld.com.cn
网址:驱动程序分层分离概念 https://www.yuejiaxmz.com/news/view/742039
相关内容
事件驱动编程、消息驱动编程、数据驱动编程【概念篇】你真正了解越来越火的“数据驱动” 吗?
vb应用程序管理分为哪几层
家庭生活的数字化:一个多层次的概念分析框架
5分钟搞清楚物联网的概念
化妆的概念与分类
机器人流程自动化的概念
深度解码:Android源码与驱动编程实战揭秘
21款环保概念车抢先看
高效驱动LED离线式照明