- 博客(19)
- 资源 (13)
- 收藏
- 关注
原创 关于信号量
1、信号量的定义:struct semaphore { spinlock_t lock; unsigned int count; struct list_head wait_list;};在linux中,信号量用上述结构体表示,我们可以通过该结构体定义一个信号量。2、信号量的初始化:可用void sema_init(
2014-12-26 22:29:36 407
原创 v4l2 编程接口 — ioctl
在应用程序获取视频数据的流程中,都是通过 ioctl 命令与驱动程序进行交互,常见的 ioctl 命令有:[cpp] view plaincopyVIDIOC_QUERYCAP /* 获取设备支持的操作 */ VIDIOC_G_FMT /* 获取设置支持的视频格式 */ VIDIOC_S_FMT /* 设置捕获视频的格式 */ VIDI
2014-12-25 11:11:42 4445
转载 linux设备模型深探
一:前言 Linux设备模型是一个极其复杂的结构体系,在编写驱动程序的时候,通常不会用到这方面的东西,但是。理解这部份内容,对于我们理解linux设备驱动的结构是大有裨益的。我们不但可以在编写程序程序的时候知其然,亦知其所以然。又可以学习到一种极其精致的架构设计方法。由于之前已经详细分析了sysfs文件系统。所以本节的讨论主要集中在设备模型的底层实现上。上层的接口,如pci.,usb ,网络设
2014-12-18 13:55:25 340
转载 EXPORT_SYMBOL与EXPORT_SYMBOL_GPL
linux2.6的“/prob/kallsyms”文件对应着内核符号表,记录了符号以及符号所在的内存地址。模块可以使用如下宏导出符号到内核符号表:view plaincopy to clipboardprint?01.EXPORT_SYMBOL(符号名); 02.EXPORT_SYMBOL_GPL(符号名) EXPORT_SYMBOL(符号名);EXPORT_SY
2014-12-17 16:15:57 906
转载 access()函数
access():判断是否具有存取文件的权限相关函数 stat,open,chmod,chown,setuid,setgid表头文件 #include定义函数 int access(const char * pathname, int mode);函数说明 access()会检查是否可以读/写某一已存在的文件。参数mode有几种情况组
2014-12-08 16:21:54 1590
转载 Linux进程间通信(IPC)之二——命名管道(FIFO)
1 命名管道(FIFO) 经过前文《Linux进程间通信(IPC)之一——管道》介绍管道,但是管道应用的一个重大缺陷就是没有名字,因此只能用于亲缘进程之间的通信。后来从管道为基础提出命名管道(named pipe,FIFO)的概念,该限制得到了克服。FIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中。这样,即使与FIFO的创建进程不存在亲
2014-12-08 16:15:44 641
转载 open 函数
open 函数用于打开和创建文件。以下是 open 函数的简单描述 #include fcntl.h> int open(const char *pathname, int oflag, ... ); 返回值:成功则返回文件描述符,否则返回 -1对于 open 函数来说,第三个参数(...)仅当创建新文件时才使用,用于指定文件
2014-12-08 15:40:40 470
原创 小记:编译kernel
编译Kernel步骤:工作目录:ASC88xx_webcam/Src/mozart_kernel-1.34_UVC# cp ../../Patch/Kernel/webcam_kernel.patch ../mozart_kernel-1.34_UVC/给Kernel打补丁patch -p1 -i webcam_kernel.patch cp ../../Pat
2014-12-07 16:27:32 439
原创 加了DNS后,可以ping通外网,但是用浏览器却没办法打开这个可以ping通的网页
设置为桥接模式;在加了DNS后,可以ping通外网,但是用浏览器却没办法打开这个可以ping通的网页;而且在任务栏显示也是断开的,求解cat /etc/etwork/interfaceiface eth0 inet staticaddress 192.168.0.199gateway 192.168.0.1netmask 255.255.255.0cat
2014-12-07 16:23:34 1388
转载 linux的文件结构详解
根(root)文件系统根文件系统一般应设置的小一些,因为它包含着重要的文件并且小一些的、不常修改的文件系统就有一个更好的机会不被毁坏掉。一个毁坏的根文件系统通常意味着系统将不能启动了,除非使用特殊方法(例如,从软盘启动),所以你不会去冒这个险的。根目录通常不包含任何其他文件,除了可能会有些系统的标准启动引导用的影像文件,常称为/vmlinuz。所有其它文件都在根文件系统的子目录中:
2014-12-04 15:32:04 370
原创 结构化设备驱动程序
设备结构体 Linux 设备驱动程序的编写者喜欢把与某设备相关的所有内容定义为一个设备结构体,其中包括设备驱动涉及的硬件资源、全局软件资源、控制(自旋锁、互斥锁、等待队列、定时器等),在涉及设备的操作时,仅仅操作这个结构体就可以了。 对于“globalvar”设备,这个结构体就是: struct globalvar_dev { int global_var =
2014-12-04 15:22:02 391
原创 linux timer应用
Linux 内核中定义了一个 timer_list 结构,我们在驱动程序中可以利用之: struct timer_list { struct list_head list; unsigned long expires; //定时器到期时间 unsigned long data; //作为参数被传入定时器处理函数 void (*function)(un
2014-12-04 14:09:49 489
转载 spin_lock比spin_lock_irq比较
看了这个网址,对自选锁造成的死锁有了更深刻对理解。http://blog.csdn.net/zhanglei4214/article/details/6837697spin_lock比spin_lock_irq速度快,但是它并不是任何情况下都是安全的。举个例子:进程A中调用了spin_lock(&lock)然后进入临界区,此时来了一个中断(interrupt),该中断也
2014-12-04 12:21:19 498
原创 设备驱动之异步通知机制
异步通知:意思就是,一旦设备就绪,则主动通知应用程序,这样应用程序根本不需要查询设备状态,非常类似于硬件上"中断的概念"准确一点就叫:信号驱动(SIGIO)的异步I/O实现异步通知,内核需要知道几个东西:哪个文件(filp),什么信号(SIGIIO),发给哪个进程(pid),收到信号后做什么(sig_handler)。这些都由上述前两个步骤完成了,而这前两个步骤内核帮忙实现了,所以,我们只
2014-12-03 17:45:03 774
转载 linux编程下signal()函数
转自:http://blog.sina.com.cn/s/blog_4b226b92010119l5.html当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。根据信号的默认处理规则SIGPIPE信号的默认执行动作是 te
2014-12-03 17:30:02 380
原创 信号量,虚拟文件系统,
驱动函数 :多个套接口#include #include #include #include #include //#include #include #include MODULE_LICENSE("GPL"); #define MAJOR_NUM 255 static ssize_t globalvar_read(s
2014-12-03 15:30:37 487
原创 wait_event_interruptible函数以及等待队列
wait_event_interruptible(wq, condition),该函数修改task的状态为TASK_INTERRUPTIBLE,意味着该进程将不会继续运行直到被唤醒,然后被添加到等待队列wq中。在wait_event_interruptible()中首先判断condition是不是已经满足,如果条件满足则直接返回0,否则调用__wait_event_interruptibl
2014-12-03 10:48:54 1014
原创 关于信号量
1、信号量的定义:struct semaphore { spinlock_t lock; unsigned int count; struct list_head wait_list;};在linux中,信号量用上述结构体表示,我们可以通过该结构体定义一个信号量。2、信号量的初始化:可用void sema_init(
2014-12-03 09:38:32 658
原创 虚拟字符设备的完整制作过程 模块源代码,应用,编译所有步骤均有详细介绍
字符设备:设备发送与接收数据是以字符的形式进行;块设备:是以数据缓冲区的形式进行虚拟字符设备驱动部分:注册设备函数:register_chrdev()举例: register_chrdev(MAJOR_NUM, " gobalvar ", &gobalvar_fops) MAJOR_
2014-12-01 16:05:41 528
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人