摘要: 1 /* 2 *参考arch/arm/mach-s3c24xx/dma-s3c2410.c 3 */ 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 1... 阅读全文
posted @ 2018-07-15 21:02 一条水煮鱼 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 1. 分配源地址、目的地址 函数里面是源和目的的物理地址,函数返回的是源和目的的虚拟地址。 2. 源和目的的内存释放 3. 和硬件打交道用到的是物理地址,比如把源和目的地址告诉DMA寄存器 4. 调用内核函数使用的一般是虚拟地址 完整程序见https://www.cnblogs.com/zhu-g5 阅读全文
posted @ 2018-07-15 21:01 一条水煮鱼 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 1 /*参考drivers/block/xd.c 2 *以及drivers/block/z2ram.c 3 */ 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #inclu... 阅读全文
posted @ 2018-07-15 18:16 一条水煮鱼 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 1. 基本概念: 扇区(Sectors):任何块设备硬件对数据处理的基本单位。通常,1个扇区的大小为512byte。(对设备而言) 块 (Blocks):由Linux制定对内核或文件系统等数据处理的基本单位。通常,1个块由1个或多个扇区组成。(对Linux操作系统而言) 段(Segments):由若 阅读全文
posted @ 2018-07-15 18:15 一条水煮鱼 阅读(308) 评论(0) 推荐(0) 编辑
摘要: 1. 首先搞清楚,鼠标点左键、右键等能得到什么数据,然后分析这些数据上报事件即可。 第一个基本点:usb_alloc_urb函数,创建一个struct urb结构体,只能使用这个函数来创建,它是urb在usb世界里的独家代理。 第二个基本点:usb_fill_control_urb函数,初始化一个控 阅读全文
posted @ 2018-07-14 21:25 一条水煮鱼 阅读(428) 评论(0) 推荐(0) 编辑
摘要: 1 /*参考/drivers/hid/usbhid/usbmouse.c*/ 2 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 10 static struct urb *mouse_urb; 11 static int len; 12 static... 阅读全文
posted @ 2018-07-14 21:21 一条水煮鱼 阅读(636) 评论(0) 推荐(0) 编辑
摘要: 以下是打印鼠标左右键及其他输入的源代码,详细说明见https://www.cnblogs.com/zhu-g5may/p/9309381.html 阅读全文
posted @ 2018-07-14 15:06 一条水煮鱼 阅读(642) 评论(0) 推荐(0) 编辑
摘要: 1. 定义usb支持的设备类型: 当插入的USB设备为该类型的USB时,内核就会调用probe函数。注意要把这个数组写进设备表里面: 2. probe函数 2.1 从接口获得设备,然后打印设备信息: 2.2 在此之前定义结构体: 3. 将结构体注册进内核: 3.1使用一句话: 3.2 当然也可以使用 阅读全文
posted @ 2018-07-14 13:36 一条水煮鱼 阅读(355) 评论(0) 推荐(0) 编辑
摘要: 源码附带注释: key_dev.c key_drv.c 阅读全文
posted @ 2018-07-14 10:49 一条水煮鱼 阅读(354) 评论(0) 推荐(0) 编辑
摘要: 字符设备驱动含有open、read、write、ioctl等函数,用于用户层和内核之间的通信,所以当用户要获得内核驱动的一些数据或者发送一些控制命令,就需要使用设备驱动了。对于一些中断类型的驱动,比如输入子系统,用户层不需要对其进行操作,可以不使用设备驱动。 阅读全文
posted @ 2018-07-13 18:33 一条水煮鱼 阅读(567) 评论(1) 推荐(0) 编辑