linux驱动基础及注意事项
来源:互联网 发布:淘宝拍卖佣金 编辑:程序博客网 时间:2024/04/30 08:11
1. 内存分配
a. 函数dma_alloc_coherent()分配实地址和虚地址
b. 函数kmalloc()只返回虚地址。一般kmalloc最大只能分配128K-16,16个字节是被页描述符结构占用了。
c. 函数ioremap_nocache把IO实地址映射成虚地址,一般寄存器空间映射为虚地址都采用此函数
d. kmalloc/dma_alloc_coherent 函数都有参数GFP_*
其中, GFP_KERNEL内核内存的通常分配方法,可能引起睡眠。
GFP_ATOMIC用于在中断处理例程或者其他运行于进程上下文之外的代码中分配内存,不会睡眠。
GFP_*见LDD3第八章kmalloc函数的内幕。
2. kmalloc/kfree的使用
a. kmalloc函数返回的是虚拟地址,它分配的内存在物理上是连续的。
b. kmalloc()函数本身是基于slab实现的,slab是为分配小内存提供的一种高效机制。
驱动中,建议不要频繁采用kmalloc/kfree机制,如果频繁使用,导致后果就是memfree内存大量减少,引起各种内存分配异常。
3. spinlock和mutex
a. spinlock 为自旋锁,上下文中不能睡眠,一般在中断服务程序中使用。
b. mutex为互斥锁,保护的内容可以引起睡眠。
4. 中断下半部机制
a. 一般有两种模式:
1) tasklet:内部不允许采用睡眠函数。
2) 工作队列work queue:允许睡眠函数
5. 同步机制
a. wait_for_completion/complete函数,参数比较简单,无需任何唤醒条件。
b. wait_for_interruptible/wakeup函数,参数灵活,要保证参数条件符合时,才能唤醒。
6. 原子操作/原子位操作
a. atomic_read/atomic_set/atomic_add/atomic_sub 等函数。
b. set_bit/clear_bit/test_and_set_bit 等函数
- linux驱动基础及注意事项
- linux驱动编程注意事项
- Linux内核驱动开发注意事项
- Linux驱动开发①--Linux基础及hello模块
- SQL基础及安装注意事项
- SQL语法基础及注意事项
- IndexWriter基础使用及注意事项
- 继电器驱动电路原理及注意事项
- 继电器驱动电路原理及注意事项
- L298N电机驱动测试及注意事项
- 继电器驱动电路原理及注意事项
- linux基础——linux下线程池的编程实现及注意事项
- Linux驱动模块基础
- android linux 驱动基础
- linux驱动开发基础
- Linux驱动基础开发
- Linux驱动基础总结
- linux基础驱动
- Elo系统---英雄联盟、WOW采用的匹配算法
- jQuery Ajax 全解析
- ORA-01103: database name 'LCRO' in control file is not 'DUMMY'
- 杭电OJ题 1390 Binary Numbers解题报告
- laplacian Sparse Coding
- linux驱动基础及注意事项
- 消息模式Toast.makeText用法
- nvcc gcc g++混合编译器编程
- GDI+环境配置及运用
- jQuery中each的break和continue
- 杭电OJ题 1393 Weird Clock解题报告
- linux IP地址网关设置和双网卡设置
- 堆和栈的区别
- MFC中UpdateData()函数的使用