
linux驱动
知了112
记录自己成长每一步。加油!
展开
-
[linux内核]linux内核编程规范
1,__attrubte__关键字的作用点击打开链接__attrubte__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐。struct str_struct{ __u8 a; __u8 b; __u8 c; __u16 d;} __原创 2014-03-12 10:49:18 · 971 阅读 · 0 评论 -
[linux驱动]设备驱动模型相关(一)——示例代码
1,以下为示例代码:#include #include #include #include #include MODULE_LICENSE("Dual BSD/GPL");static char *Version = "2.0.1";static int my_match(struct device *dev, struct device_driver *driver){原创 2014-02-28 10:46:00 · 791 阅读 · 0 评论 -
[linux]linux驱动模块
1,经常在内核驱动代码看到类似fs_init()等驱动初始化函数,那么这个和module_init()函数的差别在哪里,宏定义__define_initcall(level,fn)对于内核的初始化很重要,他指示编译器在编译的时候,将一系列初始化函数的起始地址值按照一定的顺序放在一个section中。在内核初始化段,do_initcalls() 将按顺序从该section中以函数指针的形原创 2014-03-12 10:47:47 · 1008 阅读 · 0 评论 -
[linux驱动]linux块设备学习笔记(三)
1,上层如何通过itctl()去获取设备大小:块设备原创 2014-10-17 15:07:05 · 545 阅读 · 0 评论 -
[linux驱动]linux块设备学习笔记(二)
1,gendisk结构体在linux内核中,使用gendisk结构体来表示一个独立的磁盘设备(或分区),结构体定义如下所示:struct gendisk {int major; //主设备号int first_minor;//次设备号int minors; //最大次设备数,如果不能分区则为1 char disk_name[DISK_N原创 2014-05-07 17:06:53 · 1323 阅读 · 0 评论 -
[linux中断]——中断处理
一,中断处理函数中断处理函数运行在中断上下文,不可抢占、调度。中断上下文编程需要注意以下几点: 不能睡眠或调用 schedule 放弃CPU 不能调用任何可能睡眠的函数,例如:获取信号量 不能访问用户空间数据,例如:copy_from_user,因为它不是在进程上下文中执行的。 执行时间尽可能短int request_irq (unsig原创 2014-10-20 16:30:49 · 651 阅读 · 0 评论 -
[linux中断]——其它
1,如何禁止当前CPU上的所有中断原创 2014-10-26 14:23:07 · 670 阅读 · 0 评论 -
linux设备树
linux设备树1,DTS (device tree source).dts文件是一种ASCII 文本格式的Device Tree描述,此文本格式非常人性化,适合人类的阅读习惯。基本上,在ARM Linux在,一个.dts文件对应一个ARM的machine,一般放置在内核的arch/arm/boot/dts/目录。由于一个SoC可能对应多个machine(一个SoC可以对应多个产品和电路板转载 2015-05-10 09:27:04 · 574 阅读 · 0 评论 -
[linux中断]——软中断机制
一,linux软中断的概念软中断(softirq)常常表示可延迟函数的所有种类,目前linux上使用的软中断个数是有限的,linux最多注册32个,目前使用了10个,在interrupt.h中中断上下文:表示内核当前正在执行一个中断处理程序或者一个可延迟函数。软中断(即使同一类型的软中断)可以并发运行在多个CPU上,因此软中断是可重入函数必须使用自旋锁保护其数据结构。一原创 2014-10-22 11:36:56 · 1709 阅读 · 0 评论 -
cpu hotplug的流程
以下内容参考: http://loda.hala01.com/2011/08/android-筆記-linux-kernel-smp-symmetric-multi-processors-開機流程解析-part3-linux-多核心啟動流/1,cpu hotplug机制Linux Kernel支援CPU hotplug机制,并可透过全域变数cpu_hotplug_disabled决定处理器转载 2015-07-18 14:51:06 · 9282 阅读 · 0 评论 -
[linux驱动]设备驱动模型相关(二)——常用API
1,在/sys/class/目录下创建一个设备节点,比如创建一个class_test_usb的设备节点static struct calss *test_class;test_class = class_creat(THIS_MODULE,"class_test_usb");原创 2014-10-15 10:09:33 · 966 阅读 · 0 评论 -
[linux驱动]linux块设备学习笔记(四)——请求处理
一,请求处理块设备的处理函数里没有read write等函数,所有对块设备的请求如读取 写入等都是通过request函数处理的。request函数的原型是void request(request_queue_t *queue);request函数的处理是异步的。每一个设备都有一个请求队列,当请求队列生成的时候,request函数就与该请求队列绑定在一起了,request函数总是与一原创 2014-10-21 11:47:38 · 1484 阅读 · 0 评论 -
[Linux内存]DMA学习笔记一
http://www.cnblogs.com/hanyan225/archive/2010/10/28/1863854.html转载 2014-05-22 17:22:39 · 3061 阅读 · 0 评论 -
[linux驱动]proc学习笔记(一)
1,在/proc文件系统下创建节点的APIhttp://www.cnblogs.com/ziziwu/archive/2011/10/20/2218975.html struct proc_dir_entry *create_proc_entry (const char *name, mode_t mode, struct proc_dir_entry *parent); 其中参数原创 2014-05-23 17:05:06 · 981 阅读 · 0 评论 -
[linux驱动]mmc读写过程解析
一:mmc读写过程解析mmc读写过程解析转载 2014-07-18 15:21:08 · 1419 阅读 · 0 评论 -
[linux驱动]linux块设备学习笔记(一)
1,区别块设备和字符设备:块设备是系统中能随机访问固定大小的数据片的硬件。,扇区是所有块设备物理上的最小可寻址单位,通过大小为512Byte,块是文件系统的最小寻址单位,大小是扇区的整数倍,同时不能超过一个页的大小~操作块设备的时候需要在内存中有一个对应的缓冲区,用struct buffer_head结构体表示。在2.6内核版本以后不再使用该结构,而是直接对页操作。struct buf原创 2014-05-07 11:47:12 · 902 阅读 · 0 评论 -
[Linux驱动]字符设备驱动学习笔记(一)
1,主设备号和次设备号代表的含义?答:通常一个主设备号代表一个驱动,原创 2014-05-27 14:59:40 · 964 阅读 · 0 评论 -
[linux驱动]linux块设备学习笔记(三)——程序设计
1,linux中默认的块设备的最大主设备号为255,调用register_blkdev(unsigned int major,const char*name)来注册块设备,如果major参数为0的时候那么从系统1到255中选择一个最大的没有使用的号作为当前设备的块设备号原创 2014-05-27 15:25:46 · 1100 阅读 · 0 评论 -
[linux中断]中断下半部分——tasklet
2,Tasklet机制1)声明自己的Tasklet既可以使用中定义的两个宏中的一个DECLARE_TASKLET或DECLARE_TASKLET_DISABLED来静态创建tasklet,前者把创建的tasklet的引用计数器设置为0,该tasklet处于激活状态。另一个把引入计数器设为1,所以该tasklet处于禁止状态。还可以使用tasklet_init()动态创建一个ta原创 2014-05-06 11:19:30 · 941 阅读 · 0 评论 -
[Linux驱动]字符设备驱动学习笔记(三)———高级
一,ioctl使用实例原创 2014-10-13 17:49:11 · 1679 阅读 · 0 评论 -
[Linux驱动]字符设备驱动学习笔记(二)———实例
一,注册字符设备#define GLOBALMEM_MAJOR 256#define GLOBALMEM_SIZE 0X1000 //4kstatic int char_major=GLOBALMEM_MAJOR;//主设备号struct chartest_dev{ struct cdev cdev; unsigned char mem[GLOBALMEM_SIZE];}原创 2014-10-13 15:55:28 · 1377 阅读 · 0 评论 -
[Linux中断]中断数据结构以及ARM处理中断流程
1,中断相关的数据结构 在linux kernel中,对于每一个外设的IRQ都用struct irq_desc来描述,我们称之中断描述符(struct irq_desc)在linux kernel中,使用struct irq_desc来描述一个外设的中断,我们称之中断描述符,具体代码如下:http://www.wowotech.net/irq_subsystem/irq_han原创 2015-07-18 15:13:25 · 677 阅读 · 0 评论