linux设备驱动开发详解讲座

linux设备驱动开发详解讲座

ID:9221994

大小:1.11 MB

页数:34页

时间:2018-04-23

linux设备驱动开发详解讲座_第1页
linux设备驱动开发详解讲座_第2页
linux设备驱动开发详解讲座_第3页
linux设备驱动开发详解讲座_第4页
linux设备驱动开发详解讲座_第5页
资源描述:

《linux设备驱动开发详解讲座》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、嵌入式培训专家LinuxLinux设备驱动开发设备驱动开发www.farsight.com.cn华清远见今天的内容Linux设备驱动的现状从nonos驱动到Linux驱动内核设施自旋锁、信号量、互斥量、完成量异步通知、信号阻塞与非阻塞内存与I/O操作,DMA中断,top half/bottom half字符设备驱动复杂设备驱动的框架LCD设备FRAMEBUFFERFLASH设备MTDTTY设备块设备用户空间的设备驱动设备驱动开发流程开发环境建设调试手段用户空间测试设备驱动的学习

2、方法华清远见Linux设备驱动的现状高需求Linux内核的绝大多数代码为设备驱动新设备、新芯片、新驱动的需求高门槛涉及到大量硬件操作涉及到内核基础知识涉及到并发控制与同步复杂的软件结构框架高回报华清远见从nonos驱动到Linux驱动nonos驱动单刀直入简单直接提供APILinux驱动兵团战役复杂间接提供API应用软件用户应用程序操作系统API设备驱动SerialSendLightOnFlashWr操作系统SerialRecvLightOffFlashRd驱动中独立于设备的接口硬件驱动中的

3、硬件操作串口LEDFLASH硬件nonos驱动与应用onos驱动与应用华清远见并发和竞态并发和竞态:对称多处理器(SMP)的多个CPU单CPU内进程与抢占它的进程中断(硬中断、软中断、Tasklet、底半部)与进程之间处理思路:lock() //锁定,拿虎符. . .critical section //临界区,调动军队. . .unlock()  //解锁定,归还虎符常用方法:中断屏蔽原子操作自旋锁信号量互斥体华清远见原子变量接口·整型原子操作·设置原子变量的值·void atomic_

4、set(atomic_t *v, int i); //设置原子变量的值为i·atomic_t v = ATOMIC_INIT(0); //定义原子变量v并初始化为0·`获取原子变量的值·atomic_read(atomic_t *v);  //返回原子变量的值·原子变量加/减·void atomic_add(int i, atomic_t *v); //原子变量增加i·void atomic_sub(int i, atomic_t *v); //原子变量减少i·x原子变量自增/自减·void atomic_i

5、nc(atomic_t *v);    //原子变量增加1·void atomic_dec(atomic_t *v);    //原子变量减少1·h操作并测试·int atomic_inc_and_test(atomic_t *v);·int atomic_dec_and_test(atomic_t *v);·int atomic_sub_and_test(int i, atomic_t *v);·è操作并返回·int atomic_add_return(int i, atomic_t *v);·int atom

6、ic_sub_return(int i, atomic_t *v);·int atomic_inc_return(atomic_t *v);·int atomic_dec_return(atomic_t *v);·位原子操作·è设置/清除/反转位·void set_bit(nr, void *addr);·void clear_bit(nr, void *addr);·void change_bit(nr, void *addr);·测试位·test_bit(nr, void *addr);·h测试并操作位·

7、int test_and_set_bit(nr, void *addr);·int test_and_clear_bit(nr, void *addr);·int test_and_change_bit(nr, void *addr);华清远见自旋锁VS 信号量自旋锁:忙等待,无调度开销进程抢占被禁止锁定期间不能睡觉·spinlock_t lock;·spin_lock_init(&lock);·spin_lock (&lock) ; //获取自旋锁,保护临界区·. . ./ /临界区·spin_unlock

8、 (&lock) ; //解锁信号量拿不到就切换进程,有调度开销锁定期间可以睡觉,不用于中断上下文·//定义信号量·DECLARE_MUTEX(mount_sem);·down(&mount_sem);//获取信号量,保护临界区·. . .·critical section //临界区·. . .·up(&mount_sem);//释放信

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。