摘要: linux应用层的函数默认是阻塞型的,但是要想真正实现阻塞,还需要驱动的支持才行。 例:open()、scanf()、fgets()、read()、accept() 等 1、默认情形,驱动层不实现阻塞和非阻塞 这种情况下,应用层的 read 会一直不停的读按键值,使用 top 指令查看,发现 cpu 阅读全文
posted @ 2017-10-26 14:30 LeeAaron 阅读(1261) 评论(0) 推荐(1) 编辑
摘要: 为什么使用中断下半部? 中断执行的原则是要以最快的速度执行完,而且期间不能延时和休眠! 可是现实中,中断中可能没办法很快的处理完需要做的事,或者必须用到延时和休眠,因此引入了中断下半部。 中断中处理紧急事务,其余的交给中断下半部处理。 怎样将代码合理有效的分配给中断和中断下半部?(以后发现新的再添加 阅读全文
posted @ 2017-10-26 11:05 LeeAaron 阅读(972) 评论(0) 推荐(0) 编辑
摘要: 中断处理程序中不能延时、休眠之类的,一定要最快速、高效的执行完。 // 功能:申请中断 // 参数1:中断号码,通过宏 IRA_EINT(x) 获取 // 参数2:中断的处理函数,填函数名 // 参数3:中断的出发方式(下面的宏在不同内核中是不同的) #define IRQF_TRIGGER_NON 阅读全文
posted @ 2017-10-26 10:14 LeeAaron 阅读(1767) 评论(0) 推荐(0) 编辑
摘要: 内核版本:3.0.8 open、close、read、write、ioctl等等都是类似。 驱动层: // 申请设备号,创建文件操作结构体 struct file_operations fops static inline int register_chrdev(unsigned int major 阅读全文
posted @ 2017-10-25 14:58 LeeAaron 阅读(3863) 评论(0) 推荐(0) 编辑
摘要: 在裸奔代码中,如果要控制gpio,直接控制gpio寄存器地址即可; 在linux系统中,所有操作的地址都是虚拟地址,都是由linux内核去管理,所以需要将物理地址转换成内核可识别的虚拟地址。 1、ioremap 和 iounmap // 功能:将物理地址映射为虚拟地址 // 参数1:需要映射的物理地 阅读全文
posted @ 2017-10-25 11:07 LeeAaron 阅读(7027) 评论(0) 推荐(0) 编辑
摘要: // 申请IO资源 int gpio_request(unsigned gpio, const char *label); // 释放IO资源 void gpio_free(unsigned gpio); // 将IO引脚配置为输入 int gpio_direction_input(unsigned 阅读全文
posted @ 2017-10-23 15:49 LeeAaron 阅读(634) 评论(0) 推荐(0) 编辑
摘要: 1、hello_drv.c (1) 初始化和卸载函数的格式是固定的,函数名自定义 (2) printk是内核的打印函数,用法与printf一致 (3) MODULE_LICENSE:模块代码支持开源协议(必须包含此项) MODULE_AUTHOR:模块作者 MODULE_DESCRIPTION:模块 阅读全文
posted @ 2017-10-23 11:10 LeeAaron 阅读(274) 评论(0) 推荐(0) 编辑
摘要: Linux内核源码官方下载地址: https://www.kernel.org/pub/linux/kernel/ 声明:下面每一步中的“pwd”指令都是为了看清楚当前的目录,没有其他实际意义。 系统:ubuntu 1、在官方下载自己需要的内核版本 例如:linux-3.0.8.tar.bz2 2、 阅读全文
posted @ 2017-10-20 17:10 LeeAaron 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 交叉编译工具链下载地址: 链接:http://pan.baidu.com/s/1dE7P9rb 密码:300i 声明:下面每一步中的“pwd”指令都是为了看清楚当前的目录,没有其他实际意义。 系统:ubuntu 1、建议在用户根目录下创建一个tool文件夹(为了方便管理,以后可以将所有工具的压缩包存 阅读全文
posted @ 2017-10-20 14:22 LeeAaron 阅读(4505) 评论(0) 推荐(0) 编辑
摘要: 输入指令时一定要注意当前路径 1、编译之前需要安装JDK7,并配置JAVA环境变量。 xxx@build:~/RK3288$ export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 xxx@build:~/RK3288$ export PATH=$JAV 阅读全文
posted @ 2017-10-19 10:46 LeeAaron 阅读(2381) 评论(0) 推荐(0) 编辑