随笔分类 -  Linux驱动

摘要:目的:同一个时刻,只能有一个应用程序打开我们的驱动程序。 ①原子操作: v = ATOMIC_INIT( i ) 定义原子变量v并初始化为i atomic_read(v) 返回原子变量的值atomic_set(v,i) 设置原子变量的值 atomic_inc_and_test(v) 自加后和测试是否 阅读全文
posted @ 2016-10-26 15:41 叶念西风 阅读(524) 评论(0) 推荐(0)
摘要:之前的按键方式: 查询: 极度占用CPU资源 中断: 在读的时候产生休眠,在没有信号的时候永远不会返回。 poll机制: 在中断的基础上加上超时时间。 异步通知就是通过信号来传送。 首先在应用程序中有一个信号处理函数,在应用程序接收到信号时会自动调用信号处理函数。 驱动程序为应用程序提供设置信号量的 阅读全文
posted @ 2016-10-26 13:10 叶念西风 阅读(529) 评论(0) 推荐(0)
摘要:实现的功能是在读取按键信息的时候,如果没有产生按键,则程序休眠在read函数中,利用poll机制,可以在没有退出的情况下让程序自动退出。 下面的程序就是在读取按键信息的时候,如果5000ms内没有按键信息,则自己退出。 首先应用程序执行poll函数 kernel中的sys_poll do_sys_p 阅读全文
posted @ 2016-10-26 12:44 叶念西风 阅读(905) 评论(0) 推荐(0)
摘要:轮询方式: 和led驱动不同的是在配置IO引脚的时候,把LED的输出引脚换成输入,在read函数中向外发送io的状态。必须由应用程序不断的来查询当前IO口的状态来判断。 中断方式: Makefile同led中的类似。 应用程序: sd 阅读全文
posted @ 2016-10-25 17:48 叶念西风 阅读(1957) 评论(0) 推荐(1)
摘要:首先贴上代码: 字符设备驱动代码: 模块的Makefile: 测试文件: 完 阅读全文
posted @ 2016-10-25 09:19 叶念西风 阅读(562) 评论(0) 推荐(0)
摘要:应用程序通过open read write close 等函数来操作计算机硬件。类似是一个接口。 当应用程序调用这些接口程序时,计算机是如何进入内核的呢?这是经过了系统调用。 实际上当调用接口函数时,会引发一个swi异常(附带参数,软中断),通过这个异常就进入了内核空间。在内核空间的异常处理函数中就 阅读全文
posted @ 2016-10-24 13:21 叶念西风 阅读(607) 评论(0) 推荐(0)
摘要:开发板 jz2440 下载uboot.bin 下载内核 下载文件系统 阅读全文
posted @ 2016-10-24 09:42 叶念西风 阅读(1548) 评论(0) 推荐(0)
摘要:busybox 在配置busybox,在是否选择要静态链接库时,在静态下,busybox中的工具不需要动态链接库,能够直接运行。而用户自己编写的程序如果需要动态链接库,还是依然需要有。 (从http://www.busybox.net/downloads/可以下载busybox工具) 如果是动态链接 阅读全文
posted @ 2016-10-22 16:53 叶念西风 阅读(2180) 评论(0) 推荐(0)
摘要:编译的内核可能会很大,故这里可以压缩一下。而在内核文件中需要解压,所以就会有一段自解压代码。 在uboot启动内核的时候,调用了函数: thekernel(0,MACH_ID,params_addr ) 0 存放在r0寄存器 MACH_ID 存放在r1 params_addr存放在r2 1. 首先处 阅读全文
posted @ 2016-10-20 13:12 叶念西风 阅读(500) 评论(0) 推荐(0)
摘要:假如: __main的链接地址是0x20000000。而因为它在前面,在启动的时候被拷贝到前面了,所以实际的地址是0x00000000. __main2的链接地址是0x20000010。实际地址是0x00000010. B指令是相对跳转。 也就是把pc加上两个链接地址之间的差值。 如果使用 在 __ 阅读全文
posted @ 2016-10-18 21:43 叶念西风 阅读(727) 评论(0) 推荐(0)
摘要:硬件资料: 操作系统:(非虚拟机) 内核版本: 编译器版本: gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) //gcc gcc version 4.5.1 (ctng-1.8.1-FA) //arm-linux-gcc 开发板:TINY4412/ 阅读全文
posted @ 2016-10-12 11:06 叶念西风 阅读(974) 评论(0) 推荐(0)
摘要:快速中断:在开启快速中断时,其他中断不会打断快速中断。 多个中断共享一个中断号。 中断行为受到限制: 1.不能使用可能引起阻塞的函数 2.不能使用可能引起调度的函数 中断注册:request_irq() 注销中断:free_irq() 在中断处理函数中, 1.判断是否发生了所对应的中断 2.清楚发生 阅读全文
posted @ 2016-08-17 10:45 叶念西风 阅读(288) 评论(0) 推荐(0)
摘要:Linux混杂设备是字符设备的一类,主要是混杂设备拥有相同的主设备号(10),但是次设备号是不同的。所有的混杂设备行程一个链表,对设备访问时内核更据次设备号查找到相应的混杂设备。 混杂设备用struct miscdevice来描述一个混杂设备。 首先初始化结构体struct miscdevice 初 阅读全文
posted @ 2016-08-17 10:10 叶念西风 阅读(359) 评论(0) 推荐(0)
摘要:1.驱动即是一个内核模块,需要模块初始化函数 module_init() module_exit() 2.分配cdev struct cdev dev; 3.初始化cdev并定义file_operation; cdev_init(cdev *,const struct file_operation 阅读全文
posted @ 2016-08-10 10:08 叶念西风 阅读(276) 评论(0) 推荐(0)
摘要:Linux 内核启动及文件系统加载过程 当u-boot 开始执行 bootcmd 命令,就进入 Linux 内核启动阶段。普通 Linux 内核的启动过程也可以分为两个阶段。本文以项目中使用的 linux-2.6.37 版源码为例分三个阶段来描述内核启动全过程。第一阶段为内核自解压过程,第二阶段主要 阅读全文
posted @ 2016-03-26 14:52 叶念西风 阅读(6161) 评论(0) 推荐(1)

叶念西风 - 个人博客 & 电脑Run - 维修帮助软件教程安装