cdev_init函数】的更多相关文章

linux-2.6.22/include/linux/cdev.hstruct cdev {   struct kobject kobj;          // 每个 cdev 都是一个 kobject   struct module *owner;       // 指向实现驱动的模块   const struct file_operations *ops;   // 操纵这个字符设备文件的方法   struct list_head list;       // 与 cdev 对应的字符设备…
(1) 内核中每个字符设备都对应一个 cdev结构的变量,下面是它的定义: linux-2.6.22/include/linux/cdev.h struct cdev { struct kobject kobj;          // 每个 cdev都是一个 kobject struct module *owner;       //指向实现驱动的模块 const struct file_operations *ops;   // 操纵这个字符设备文件的方法 struct list_head…
对 “从globalmem学习linux字符设备驱动” 的 cdev_init 和 cdev_alloc中一些不清楚的地方进行说明:   cdev_init 和 cdev_alloc函数定义如下:    1.1 cdev_init 函数用于初始化cdev的成员,并建立生cdev和file_operations之间连接 /fs/char_dev.c 2.6.35 550 void cdev_init(struct cdev *cdev, const struct file_operations *…
struct cdev *cdev_alloc(void) { struct cdev *p = kzalloc(sizeof(struct cdev), GFP_KERNEL); if (p) { INIT_LIST_HEAD(&p->list); kobject_init(&p->kobj, &ktype_cdev_dynamic); } return p; } 通过cdev_alloc的代码可以看出,它主要完成了空间的申请和简单的初始化操作: void cdev_…
  一个完整的linux驱动主要由内部处理和与硬件交互两部分组成.其中内部处理主要是指linux驱动的装载.卸载.与设备文件相关的动作处理以及业务逻辑等:与硬件交互主要是指通过iowrite32.ioread32等函数与硬件中的寄存器进行数据交互.   我们想要实现控制led,就应该先了解它的实验原理.Linux驱动并不是直接向硬件中的内存写数据,而是与本机的I/O内存进行交互.Linux内核提供了多个与I/O内存交互的函数,每一个连接Linux的硬件在I/O内存中都会有映射首地址,开发板上的L…
所谓I/O内存是通过各种接口连接到主机的硬件在主机内存的映射.LED驱动还提供了两种交互方式:命令和读写设备文件. 创建设备文件的步骤: 第1步:使用cdev_init函数初始化cdev 第2步:指定设备号 Linux设备文件的设备号分为主设备号和次设备号,其中前12位表示主设备号 ,后20位表示次设备号.设备号有如下两种指定方法: (1)直接在代码中指定(硬编码). (2)动态分配. 第3步:使用cdev_add函数将字符设备添加到内核中的字符设备数组中 第4步:使用class_create宏…
在上一章中了解到驱动程序的开发步骤,并一个实列来演示如何开发一个完整的驱动.但这个驱动只是简单的演示了实现步骤.真正的驱动需要与硬件直接进行相互交互.这节完整的演示驱动程序,控制开发板上的4个led灯闪烁.在开发前我们了解下工作原理.linux驱动直接与硬件打交道,但并不是驱动直接向硬件中的内存协数据,而是本机的输入输出进行交互.系统中提供了多种交互的函数,每个系统的硬件在IO中都会有映射首地址.在使用等函数写内存是要指定这些首地址,编写驱动前了解下LED驱动功能,并在开发板上测试LED.驱动会…
    在之前章节了解到Linux驱动程序可以控制软硬件,可以实现软硬件之间的交互.在这章我们学习LED驱动的实现原理.Linux内核提供了多个与I/O内存交互的函数可以实现控制硬件.    编写LED驱动,LED驱动会建立一个/dev/s3c6410_leds设备文件,该Linux驱动可以控制4个LED,靠近电池的LED编号为1,以此类推,另外1表示开,0表示关.接下来创建LED驱动的设备文件:第一步:使用cdev_init函数初始化cdev:第二步:指定设备号:第三步:使用cdev_add函…
 第七章 LED将为我们闪烁:控制发光二极管 本章我们将会看到一个完整的linux驱动程序,通过linux驱动程序控制LED的四个小灯,通俗的说就是通过向linux驱动程序来控制LED小灯的开关.用到了几个LED代码文件路径:随书光盘.虚拟环境两个. 一.LED驱动的实现原理:linux驱动与硬件打交道的方式是与本届的I/O内存进行交互,而这里所说的I/O内存就是通过各种接口(PCI.USB.蓝牙.以太网接口等)连接到(PC.手机)的硬件(网卡.摄像头等)在主机上的映射,然后进行硬件交互. 二.…
断断续续学驱动,好不容易有空,做了段字符驱动的例子.主要还是跟书上学习在此记录下来,以后说不定能回过头来温故知新. 首先上驱动源码 gmem.c: /************************************************************************* > File Name: gmem.c > Author: hailin.ma > Mail: mhl2018@126.com > Created Time: Fri 18 Dec 201…