![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
驱动
各种单片机/ARM驱动程序
_-ARCHER-_
24届毕业于西安电子大学的渣渣工程师一枚
展开
-
S3C2440 开发板实战(11):同步互斥
同步互斥原子操作实现定义原子变量获得锁释放锁总驱动函数实验信号量实现定义信号量获得锁释放锁总驱动函数实验本文没有讲同步互斥的基础知识,基础知识可以移步至:嵌入式操作系统(3):同步和互斥原子操作实现目的:防止两个进程同时打开同一个文件。在后一个进程打开文件时自行退出。定义原子变量定义原子变量v并且初始化为1atomic_t canopen = ATOMIC_INIT(1);获得锁对原子变量进行自减操作来判断是否有进程正在打开目标文件,若有恢复原子变量并返回-1(-EBUSY)。if(!at原创 2020-07-08 19:02:46 · 175 阅读 · 0 评论 -
S3C2440 开发板实战(10):signal & async 异步通信
通信进程之间发送信号asyn由上两篇博客中可以看到按键输入的信号可以通过查询、中断、poll方式进行。本篇学习的是通过异步通信对进程之间发送信号这里我们使用 kill 命令,在进程与进程之间进行传输信号。比如杀死一个进程也是通过进程之间发送信号:#kill -9 pid相对应的如果要发送信号,则要注册信号处理函数(和注册中断服务函数类似),并且编写一个信号服务函数,然后写一个一直休眠的函数就ok了。应用程序 signal.c 代码如下:#include<stdio.h>#incl原创 2020-07-08 09:14:19 · 215 阅读 · 0 评论 -
S3C2440 开发板实战(9):poll机制
poll内核执行poll过程总代码内核:linux -2.6.22.6内核执行poll过程从代码的角度来看,poll机制是通过应用程序调用**poll()函数,配合驱动函数中相对应的drv_poll()函数配套使用的。函数执行的入口当然是应用程序中的poll()函数,接着进入内核中的sys_poll()**函数,poll机制的函数在路经:linux/fs/select.c下,原代码如下:739 asmlinkage long sys_poll(struct pollfd __user *ufds,原创 2020-07-06 20:25:54 · 736 阅读 · 0 评论 -
S3C2440 开发板实战(8):中断驱动
中断驱动按键按键驱动按键在之前LED驱动基础上进行修改,通过裸机的学习可以知道只是将IO口属性修改为输入。则以文件类的read()函数对输入的按键值进行读取。进入文件类的定义源代码可以查找到以下关于read()的原函数定义代码:ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);所以根据要求将read()函数编写为以下形式#include <linux/module.h>#include <linux原创 2020-06-26 14:35:52 · 187 阅读 · 0 评论 -
S3C2440 开发板实战(7):字符设备驱动框架+LED驱动
在学习驱动的时候我遇到了很多问题,所以我的学习路线是这样的:编写驱动发现.ko文件需要放入开发板的目录中,然后就学习通过nfs创建共享文件,在配置nfs时发现网络没有连接上,所以就学习怎样配置IP地址,在传输完.ko文件后,发现自动生成不了dev nod,在经过一番寻找问题后发现是文件系统没配置好,所以我又配置了一遍mdev。最终成功!(耗时2天呀。)目录一、“简化版”驱动文件框架1.1. 编写驱动文件1.2. 测试二、“改进版”驱动文件框架2.1. 改进驱动文件2.2.配.原创 2020-06-17 16:09:44 · 450 阅读 · 0 评论 -
S3C2440 开发板实战(6):网络配置 + 设置NFS
这篇的主要目的是将PC端(server)和开发板端(client)之间共享文件。事先声明:本人的PC端是直接安装Ubuntu系统的,所以在操作的时候没有虚拟机这个概念。本文所操作的系统,均基于上一篇所讲的最小根文件系统开发。一、硬件连接唯一要求:client的网线应该连接上server或者是给server提供服务的router。比如说我的硬件配置:开发板连接网线至PC端,PC端连接无线网络。(建议配置)二、IP地址设置唯一要求:client的网段应该和server的网络号一样.原创 2020-06-15 20:21:36 · 280 阅读 · 0 评论