嵌入式系统原理及应用教程第10章.ppt
《嵌入式系统原理及应用教程第10章.ppt》由会员分享,可在线阅读,更多相关《嵌入式系统原理及应用教程第10章.ppt(28页珍藏版)》请在三一办公上搜索。
1、主讲内容,第8章 嵌入式系统Boot Loader技术第9章 嵌入式Linux操作系统移植第10章 嵌入式Linux设备驱动程序开发第11章 嵌入式Linux应用程序设计,10.1 嵌入式Linux驱动程序开发基础,10.1.1 嵌入式Linux设备驱动程序分类静态加载的驱动程序动态加载的驱动程序 Linux将设备按照功能特性划分为三种类型:字符设备,块设备和网络设备。10.1.2 最简单的内核模块1helloworld模块源代码2模块的编译3模块的加载和卸载,10.1 嵌入式Linux驱动程序开发基础,10.2 嵌入式Linux设备驱动重要技术10.2.1 内存与I/O端口(1)内核空间和用
2、户空间(2)内核中内存分配内核中获取内存的几种方式如下。通过伙伴算法分配大片物理内存通过slab缓冲区分配小片物理内存非连续内存区分配高端内存映射固定线性地址映射,(3)I/O端口 根据CPU体系结构的不同,CPU对IO端口的编址方式有两种:I/O映射方式(I/O-mapped)和内存映射方式(Memory-mapped)。下面主要讨论一下内存映射方式访问I/O端口的方法,我们称之为I/O内存操作。I/O 内存区必须在使用前分配 I/O内存映射 访问I/O内存 映射到用户空间,10.1 嵌入式Linux驱动程序开发基础,10.2.2 同步机制 Linux内核中包含的同步机制包括:原子操作、信号
3、量(semaphore)、读写信号量(rw_semaphore)、自旋锁(spinlock)、大内核锁(Big Kernel Lock,BKL)、读写锁(rwlock)、读拷贝更新(Read-Copy Update,RCU)和seqlock(顺序锁)等。,1.原子操作 原子操作主要用于实现资源计数,很多引用计数(refcnt)就是通过原子操作实现的。原子类型定义如下:typedef struct volatile int counter;atomic_t;原子操作通常用于实现资源的引用计数 2.信号量 信号量在创建时需要设置一个初始值.3.读写信号量 读写信号量有两种实现:一种是通用的,不依赖
4、于硬件架构 一种是架构相关的,读写信号量的相关API有:DECLARE_RWSEM(name)该宏声明一个读写信号量name并对其进行初始化。void init_rwsem(struct rw_semaphore*sem);该函数对读写信号量sem进行初始化。void down_read(struct rw_semaphore*sem);在Linux中,每一个进程都用一个类型为task_t或struct task_struct的结构来描述,4.自旋锁 一个执行单元要想访问被自旋锁保护的共享资源,必须先得到锁,在访问完共享资源后,必须释放锁。自旋锁的API有:spin_lock_init(x);
5、,10.2.3 阻塞与非阻塞1.阻塞操作2.非阻塞操作10.2.4 时间问题1.延时操作:(1)长延时。(2)短延时2.内核定时器内核提供给驱动许多函数来声明、注册、以及去除内核定时器。3.工作队列采用缺省工作者线程来实现工作队列 的API:INIT_WORK(_work,_func,_data),int schedule_work(struct work_struct*work)int schedule_delayed_work(struct work_struct*work,unsigned long delay)void flush_scheduled_work(void)int can
6、cel_delayed_work(struct work_struct*work)创建自己的工作者线程和工作队列,API:struct workqueue_struct*create_workqueue(const char*name)int queue_work(struct workqueue_struct*wq,struct work_struct*work)int queue_delayed_work(struct workqueue_struct*wq,struct work_struct*work,unsigned long delay)void flush_workqueue(s
7、truct workqueue_struct*wq)void destroy_workqueue(struct workqueue_struct*wq),10.2.5 中断处理在Linux系统里,对中断的处理是属于系统核心部分,因而如果设别与系统之间以中断方式进行数据交换,就必须把该设备的驱动程序作为系统核心的一部分。设备驱动程序通过调用request_irq函数来申请中断,通过free_irq来释放中断。它们被定义为:#include int request_irq(unsigned int irq,void(*handler)(int irq,void dev_id,struct pt_r
8、egs*regs),unsigned long flags,const char*device,void*dev_id);void free_irq(unsigned int irq,void*dev_id);,函数的参数如下。unsigned int irq:请求的中断号。irqreturn_t(*handler):安装的中断处理函数指针。unsigned long flags:中断处理的属性。const char*dev_name:这个传递给request_irq的字串用在/proc/interrupts来显示中断的拥有者。void*dev_id:用作共享中断的指针。,10.3 字符设备驱
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 原理 应用 教程 10

链接地址:https://www.31ppt.com/p-5014640.html