linux
hudaliquan
这个作者很懒,什么都没留下…
展开
-
linux中stat,istat,fstat介绍
stat函数讲解表头文件#include #include 定义函数: int stat(const char *file_name, struct stat*buf);函数说明: 通过文件名filename获取文件信息,并保存在buf所指的结构体stat中返回值: 执行成功则返回0,失败返回-1,错误代码存于errno错误代码:转载 2015-02-04 18:16:36 · 1660 阅读 · 0 评论 -
为什么linux驱动要专门有杂项设备呢
在我看来有两个主要原因。第一,节省主设备号:使用普通字符设备,不管该驱动的主设备号是静态还是动态分配,都会消耗一个主设备号,这太浪费了。而且如果你的这个驱动最终会提交到内核主线版本上的话,需要申请一个专门的主设备号,这也麻烦。如果使用misc驱动的话就好多了。因为内核中已经为misc驱动分配了一个主设备号。当系统中拥有多个misc设备驱动时,那么它们的主设备号相同,而用子设备号来区转载 2016-03-14 14:31:02 · 523 阅读 · 0 评论 -
深入理解linux互斥锁(mutex)
深入理解linux互斥锁(mutex)转自http://blog.csdn.net/feiyinzilgd/article/details/5816653锁机制,可以说是linux整个系统的精髓所在,linux内核都是围绕着同步在运转。在多进程和多线程编程中,锁起着极其重要的作用。我这里说的是互斥锁,其实是泛指linux中所有的锁机制。我在这里不讲如果创建锁,关于锁的创建,网上转载 2015-11-26 14:34:45 · 3680 阅读 · 3 评论 -
Linux动态库原理(二)重定位
Linux动态库原理(二)重定位前面一章《Linux动态库工作原理详解》比较简单浅显的对 Linux 的工作原理进行了阐述,今天打算从 Linux 动态库在加载过程中符号的重定位(Relocation)的角度,更加深入的讲解 Linux 动态库的工作原理。在1980s SunOS 将动态库引入到 UNIX,后来又将 ELF(Executable and Linkable) 格式引入到了转载 2015-11-26 14:29:09 · 3243 阅读 · 0 评论 -
Linux设备驱动程序学习———时间、延迟及延缓操作
度量时间差时钟中断由系统定时硬件以周期性的间隔产生,这个间隔由内核根据 HZ 值来设定,HZ 是一个体系依赖的值,在中定义或该文件包含的某个子平台相关文件中。作为通用的规则,即便如果知道 HZ 的值,在编程时应当不依赖这个特定值,而始终使用HZ。对于当前版本,我们应完全信任内核开发者,他们已经选择了最适合的HZ值,最好保持 HZ 的默认值。 对用户空间,内核HZ几乎完全隐藏,转载 2015-05-11 18:54:53 · 738 阅读 · 0 评论 -
udelay(); mdelay(); ndelay(); msleep();
这几个函数都是内核的延时函数:1.udelay(); mdelay(); ndelay();实现的原理本质上都是忙等待,ndelay和mdelay都是通过udelay衍生出来的,我们使用这些函数的实现往往会碰到编译器的警告implicit declaration of function 'udelay',这往往是由于头文件的使用不当造成的。在include/asm-???/delay.h中转载 2015-05-11 18:56:08 · 431 阅读 · 0 评论 -
Linux 中 dlopen、dlsym、dlclose、dlerror函数
编译时候要加入 -ldl (指定dl库)dlopen基本定义功能:打开一个动态链接库 [喝小酒的网摘]http://blog.const.net.cn/a/17154.htm包含头文件: #include 函数定义: void * dlopen( const char * pathname, int mode ); 函数描述: 在dlopen的()函数转载 2015-03-06 13:51:07 · 13290 阅读 · 0 评论 -
物理地址,虚拟地址,线性地址,逻辑地址的联系
本贴涉及的硬件平台是X86,如果是其它平台,嘻嘻,不保证能一一对号入座,但是举一反三,我想是完全可行的。一、概念物理地址(physical address)用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字转载 2015-03-02 15:53:27 · 578 阅读 · 0 评论 -
V4L2的视频采集方式
V4L2的视频采集方式操作系统一般把系统使用的内存划分成用户空间和内核空间,分别由应用程序管理和操作系统管理。应用程序可以直接访问内存的地址,而内核空间存放的是供内核访问的代码和数据,用户不能直接访问。v4l2捕获的数据,最初是存放在内核空间的,这意味着用户不能直接访问该段内存,必须通过某些手段来转换地址。V4L2有三种视频采集方式:1)使用read、write方式:直接使用 re转载 2015-03-02 16:14:35 · 1188 阅读 · 0 评论 -
V4L2驱动流程
v4l2操作实际上就是 open()设备, close()设备,以及中间过程的 ioctl()操作。对于 ioctl的调用,要注意对 errno的判断,如果调用被其他信号中断,即 errno等于EINTR的时候,要重新调用。Video capture device的实际功能就是采集视频信号,并将数字化的图像保存在 memory中,现在几乎上所有的相关转载 2015-02-15 16:51:21 · 952 阅读 · 0 评论 -
linux fb设备(pandaboard)
fb设备主要作用是获取帧buffer, 并设置,用于显示。fbmem是主要的框架层和抽象层。 每个具体的平台的帧设备是在调用platform_driver_register注册之后,由其probe函数调用create framebuffer将fbinfo设置给registered_fb(数组, 不同的fb设备有不同 的index)的, 在pandaboard中, 这个注册函数 是omapf转载 2015-02-13 14:57:53 · 1378 阅读 · 0 评论 -
linux内核与c标准库
基本C库函数当编写驱动程序时,一般情况下不能使用C标准库的函数。Linux内核也提供了与标准库函数功能相同的一些函数,但二者还是稍有差别。只需要包含linux/string.h即可 类别函数名功能函数形成参数描述字符串转换simple_strtol把一个字符串转换转载 2015-02-27 14:16:07 · 2895 阅读 · 0 评论 -
应用程序与库函数、内核、驱动之间的关系
应用程序与库函数、内核、驱动之间的关系 应用程序、库、内核、驱动程序的关系:应用程序调用应用程序函数库完成功能、应用程序以文件形式访问各种资源、应用程序函数库、部分函数直接完成功能、部分函数通过系统调用。 由内核完成内核处理系统调用。 调用设备驱动程序,设备驱动直接与硬件通信。 它们之间的关系如下图所示转载 2015-02-27 14:03:28 · 3951 阅读 · 0 评论 -
linux系统调用,内核函数的关系
早上听人说到某个程序的一部分是内核态,另一部分是用户态,需要怎么怎么。当时突然想知道,用户的程序可以直接调用内核函数吗?(现在突然发觉这问题有点可笑,若是可以随便调,那系统岂不是乱套了)从网上找到下面这篇文章,讲的还算透彻。现在自己的理解是,用户程序不可用直接调用内核函数,除非通过系统调用接口。如果想调用哪个内核函数(或自己写的内核函数),怎么办?增加一个系统调用就行了。原文如下:转载 2015-02-27 14:00:35 · 1975 阅读 · 0 评论 -
linux设备驱动程序注册过程详解
Linux的驱动程序注册过程,大致分为两个步骤:模块初始化驱动程序注册下面以内核提供的示例代码pci-skeleton.c,详细说明一个pci设备驱动程序的注册过程。其他设备的驱动代码注册过程基本相同,大家可自行查看。使用的内核代码版本是2.6.38。1. 模块初始化1.1 驱动程序入口所有的设备驱动程序都会有如下两行代码:1922 module_i转载 2016-03-14 20:40:20 · 751 阅读 · 0 评论