国嵌驱动专题一二

原创 2015年07月08日 22:32:16

一、使用字符设备驱动

1、编译驱动、安装;创建设备文件;访问设备

2、设备描述结构cdev:结构定义;设备号dev_t;设备操作集

3、驱动初始化:分配设备描述结构;初始化设备描述结构;注册设备描述结构

4、设备号为unsigned int;MKDEV;MAJOR;MINOR

5、动态分配主设备号:alloc_chrdev_region;驱动退出时:unregister_chrdev_region

6、描述结构的分配:静态struct cdev mdev;动态cdev_alloc()

7、描述结构的初始化:cdev_init

8、描述结构的注册:cdev_add()

9、驱动注销:cdev_del

二、混杂设备驱动模型

1、拥有相同的主设备号10称为混杂设备

2、设备描述:struct miscdevice

3、注册混杂设备驱动:misc_register()

4、内核中断处理流程:irq_svc入口-->获取中断号-->根据中断号找到相应的irq_desc结构-->取出事先注册好的处理函数运行

5、中断注册:request_irq(unsigned int irq, void (*handler)( ), unsigned long flags, const char *devn ame, void *dev_id)

6、flags:IRQF_DISABLED(SA_INTERRUPT)表示快速中断;IRQF_SHARED(SA_SHIRQ)表明该中断号是多个设备共享的

7、中断注销:free_irq()

8、中断嵌套:当中断发生时,又产生了其他中断

9、中断嵌套的处理方法-->中断分层技术:软中断;tasklet;工作队列

10、工作队列:将下半部分交给内核线程处理

11、描述工作队列:struct workqueue_struct

12、描述一个工作项:struct work_struct

13、创建工作队列:create_workqueue

14、创建工作:INIT_WORK

15、提交工作:queue_work

16、提交工作到默认队列:schedule_work

17、内核定时器:struct timer_list

18、初始化定时器:init_timer()、 设置超时函数、

19、注册定时器:add_timer()

20、启动定时器:mod_timer(要启动的定时器,超时时间)

21、当一个进程试图向设备读写数据时,设备暂时没有准备好数据。。驱动程序就应当阻塞进程,进入睡眠状态,直到请求得到满足

22、定义等待队列:wart_queue_head_t        my_queue

23、初始化等待队列:init_waitqueue_head(&my_queue)

24、定义+初始化等待队列:DECLARE_WAIT_QUEUE_HEAD(my_queue)

25、进入等待队列,睡眠:wait_event(queue,  condition),当condition为真时,立即返回,否则进入TASK_UNINTERRUPTIBLE

26、wait_event_interruptible(queue,  condition),当condition为真时,立即返回,否则进入TASK_INTERRUPTIBLE

27、从等待队列中唤醒进程:wake_up()   --->可唤醒UNINT*、INT*、KILL*的所有进程

28、wake_up_interruptible(),只能唤醒TASK_INTERRUPTIBLE的进程


三、总线设备驱动

1、总线描述:bus_type

2、总线描述结构中的match函数:当一个新设备或新驱动被添加到这个总线时,调用该函数。判断是否匹配

3、总线的注册:bus_register()

4、总线的注销:bus_unregister()

5、驱动描述结构:device_driver

6、驱动的注册:driver_register()

7、驱动的注销:driver_unregister()

8、设备描述结构:struct device

9、设备的注册:device_register()\

10、设备的注销:device_unregister()

11、平台总线:Platform bus 

12、平台设备描述结构:struct platform_device

13、注册平台设备:platform_device_register()

14、平台驱动描述结构:struct platform_driver

15、注册平台驱动:platform_driver_register()

注:16、当device_register注册设备时,dev->name会赋值给dev->kobj.name,自己变为NULL

注:17、先加载总线,后加载驱动或设备

T 笔试题精选(二)

T笔试题二
  • qq_36016407
  • qq_36016407
  • 2017年04月10日 10:26
  • 158

国嵌专题三串口驱动

一、1、tty_fops:tty_open 2、uart_ops:uart_open---------->uart_start 3、s3c24xx_serial_ops:s3c24xx_serial...
  • Jiang_XB
  • Jiang_XB
  • 2015年07月11日 23:31
  • 290

国嵌驱动专题四网卡

一、网卡子系统:系统调用接口层、协议无关层、协议栈的实现、设备无关层、设备驱动层序。 二、DM9000的驱动设计 1、注册平台设备驱动 2、匹配设备后,注册网卡net_device,设置...
  • Jiang_XB
  • Jiang_XB
  • 2015年07月12日 00:16
  • 319

国嵌深入班-块设备简介

mapping主要是磁盘文件系统,把对文件的访问映射成磁盘的硬件访问
  • li4850729
  • li4850729
  • 2014年05月29日 15:26
  • 531

国嵌视频光盘网盘分流下载地址

《国嵌2010年9月版最新共享视频》(中秋版)光盘目录说明 本视频教程由嵌入式Linux专业培训机构成都国嵌公司免费提供的4个培训班完整最新视频。总共包含4张DVD光盘,76个视频文件,总时长接近3...
  • mengyafei43
  • mengyafei43
  • 2014年07月29日 20:27
  • 3448

国嵌--linux字符设备驱动学习之memdev设备

memdev设备驱动源码 memdev.h 自定义头文件 *********************************************************************...
  • wangrunmin
  • wangrunmin
  • 2012年05月16日 10:31
  • 3958

国嵌驱动-专题5-触摸屏驱动程序设计

一、我的学习理解: 1、输入子系统就是外部触发一次事件,最后由用户空间读取到事件的信息。 2、先注册一个输入型设备,设备会匹配到handler(处理者),handler会创建设备文件,还需要注册字...
  • Jiang_XB
  • Jiang_XB
  • 2015年07月11日 19:21
  • 490

ARM - Linux嵌入式C/C++各种资料分享【更新日期:2012/04/24】

由于115网盘取消大众分享功能,因此不能继续分享下载链接。更新资料将在本人分享空间转存后下载,本人分享空间地址:http://115.com/u/4801950 更新日期:2012/04/24 ...
  • shuxiao9058
  • shuxiao9058
  • 2011年09月18日 11:30
  • 11801

国嵌语言的艺术之C++项目讲解精讲班(27课全)

下载地址进群:377215114 专题一蜕变成蝶  1.C到C++的升级数据类型的加强  面向对象的支持  C与C++的关系  2.函数的升级函数默认参数  函数重载  内联函数  ...
  • jianyue178826
  • jianyue178826
  • 2014年07月11日 14:49
  • 1794

国嵌嵌入式学习笔记之刷机

当拿到一个裸机之后,就需要为该嵌入式开发版安装系统,由于我学习的是tiny6410开发板,所有就以tiny6410开发板为例。在此之前,开发板的USB驱动已安装完成。 (1)在电脑上,格式化SD卡,...
  • yangkaiqiang001
  • yangkaiqiang001
  • 2015年11月07日 14:21
  • 277
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:国嵌驱动专题一二
举报原因:
原因补充:

(最多只允许输入30个字)