通过介绍字符设备scull(Simple Character Utility for Loading Localities,区域装载的简单字符工具)的
 驱动程序编写,来学习Linux设备驱动的基本知识。scull可以为真正的设备驱动程序提供样板。
 1.scull设备 
 编写驱动程序的第一步,就是定义驱动程序为用户程序提供的能力(机制)。ldd3里用的设备是内存的一部分,可以做任何想做的事情。            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-11-15 16:36:52
                            
                                213阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            几个要点:1.我们应该很好地了解自己面对的具体设备(强调对硬件了解的重要性)。2.驱动程序的作用在于提供机制,而不是提供策略;进程间通信(信号,管道等)。            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-09-14 10:44:19
                            
                                178阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            将linux 移植到新的体系结构时,开发者遇到的若干问题都与不正确的数据类型有关型,            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-09-14 21:38:01
                            
                                121阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            本章介绍了下面符号和头文件. struct file_operations 和 struct file 中的成员的列表这里不重复了.#include <linux/types.h>dev_t dev_t 是用来在内核里代表设备号的类型.int MAJOR(dev_t dev);int MINOR(dev_t dev);从设备编号中抽取主次编号的宏.            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2012-03-09 11:41:00
                            
                                111阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            随着技术的不断进步,系统拓扑接口越来越复杂,对智能电源管理、热插拔支持要求也越来越高,为适应这些需求,2.6内核提供了全新的内核设备模型。设备模型三元素:总线、设备、驱动。另:采用总线模型,极大的提高程序可移植性。
1.总线总线就是处理器与设备(包括SOC设备,比如SPI控制器)之间的通道,在设备模型中,所有的设备都通过总线相连,Linux的虚拟总线platform总线。在Linux设备模型中,总            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-11-15 16:48:59
                            
                                156阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            2.6.32-38-generic-paeLDD3源码路径:examples/scull/main.c            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2022-12-19 21:55:23
                            
                                156阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            编译环境:Ubuntu 10.10
内核版本:2.6.32-38-generic-pae
LDD3源码路径:examples/scullv
 
一、scull            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2022-12-19 21:53:23
                            
                                68阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            scull设备是一个操作内存的字符设备,不是真正的设备,只是向内核注册为字符设备,并使用内存来存取数据。
当用户向其中写数据时,它就申请空闲内存来存放用户数据;当用户读取其数据时,便按顺序读取数据。
接下来两个结构贯穿整个驱动,理解它是很必要的。
struct scull_qset {
void **data;
struct scull_qset *next; 
};
struct            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                            精选
                                                        
                            2010-09-21 09:17:27
                            
                                1499阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            *kmalloc(size_t size, int flags);size 参数            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-11-15 16:50:40
                            
                                95阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            内核版本:2.6.32-38-generic-pae
LDD3源码路径:examples/scull/pipe.c examples/scull/ma            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2022-12-07 08:49:35
                            
                                82阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            ails/7407700
作者:刘昊昱 
博客:http://blog.csdn.net/liuhaoyutz
编译环境:Ubuntu 10.10
内核版本:2.6.32-38-generic-pae
LDD3源码路径:examples/scull/ access.c            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2022-12-09 13:50:08
                            
                                131阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            转载Ubuntu 10.10内核版本:2.6.32-38-generic-paeLDD3源码路径:examples/scull/main.c            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2022-12-15 20:43:55
                            
                                186阅读
                            
                                                                             
                 
                
                             
         
            
            
            
             Kernel debugging        [*]   Debug            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-11-15 16:35:34
                            
                                106阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一个“中断”仅是一个信号,当硬件需要获得处理器对它的关注时,就可以发送这个信号。 Linux 处理中断的方式非常类似在用户空间处理信号的方式。大多数情况下,一个驱动只需要为它的设备的中断注册一个处理例程,并当中断到来时进行正确的处理。本质上来讲,中断处理例程和其他的代码并行运行。因此,它们不可避免地引起并发问题,并竞争数据结构和硬件。 透彻地理解并发控制技术对中断来讲非常重要。1.安装中            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-11-15 16:50:22
                            
                                209阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            163
作者:刘昊昱 
博客:http://blog.csdn.net/liuhaoyutz
编译环境:Ubuntu 10.10
内核版本:2.6.32-38-generic-pae
LDD3源码路径:examples/misc-modules/sleep            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2022-12-07 06:43:35
                            
                                46阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            编译环境:Ubuntu 10.10 内核版本:2.6.32-38-generic-pae LDD3源码路径:examples/scull/pipe.c examples/scull/main.c 本文分析LDD3第6章的poll(轮询)操作。要理解驱动程序中poll函数的作用和实现,必须先理解用户空            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2019-10-23 19:57:00
                            
                                111阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            转核版本:2.6.32-38-generic-paeLDD3源码路径:examples/scull/main.c本文分析LDD3第四章            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2022-12-15 20:46:18
                            
                                96阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            e/details/7452289
作者:刘昊昱 
博客:http://blog.csdn.net/liuhaoyutz
编译环境:Ubuntu 10.10
内核版本:2.6.32-38-generic-pae
LDD3源码路径:examples/simple/
 
本文分析            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2022-12-19 21:52:23
                            
                                96阅读