念愿的专栏

新的起点,启程,那向往的地方。

排序:
默认
按更新时间
按访问量

sysfs接口函数到建立_DEVICE_ATTR

sysfs接口:函数宏DEVICE_ATTR 原型:#define DEVICE_ATTR(_name, _mode, _show, _store)      struct  device_attribute  dev_attr_##_name = __ATTR(_name, _mode, _s...

2012-11-06 08:46:08

阅读数:1126

评论数:0

内核树的建立及其Hello World 模块的加载

内核树的建立及其Hello World 模块的加载        每每到了一定程度过后,对自己所做过的事,看过的书等做一些总结是很有必要的。初学驱动编程,面对的第一个难题就是这个驱动编程该怎么学,入门是关键。在前辈们推荐下和在网上搜索中,得出结论:不知道怎么学和该学些什么,那就看这两本书:O'R...

2012-09-20 09:06:53

阅读数:1596

评论数:0

关于EXPORT_SYMBOL的作用浅析

在查看内核驱动代码的时候会经常看到在一些函数后面总会跟EXPORT_SYMBOL()这样的宏定义,通过网上查阅,它的作用大致总结如下: 1、定义说明      把内核函数的符号导出,也可以理解成将函数名作为符号导出;符号的意思就是函数的入口地址,或者说是把这些符号和对应的地址保存起来的,在内核...

2012-09-20 09:06:11

阅读数:14700

评论数:0

Linux设备中的并发控制

并发执行的唯一原因是:硬件中断服务。内核代码是可抢占的。 什么是竞争?当 2 个执行的线路[有机会操作同一个数据结构(或者硬件资源), 混合的可能性就一直存在。 避免竞争方法:        在你设计驱动时在任何可能的时候记住避免共享的资源. 如果没有并发存取, 就没有竞争情况. 因此小心编...

2012-09-20 09:04:40

阅读数:1003

评论数:0

Linux设备驱动入门----USB设备驱动

/**************************************** * USB主机与设备驱动 * 主机侧:由底到高:USB主机控制器硬件--> * USB主机控制器驱动--> USB核心层 --> USB * 设备驱动层 * 设备侧:UDC驱动程序、Ga...

2012-08-20 17:40:41

阅读数:2660

评论数:2

Linux设备驱动入门----I2C设备驱动

/* * I2C驱动的一些模板: * (1)、I2C总线驱动的的模块加载和卸载函数模板 * (2)、I2C总线通信方法 * (3)、I2C设备驱动模块的加载和卸载 * (4)、I2C设备驱动的文件操作接口 * (与普通驱动的文件操作一致,只是要使用 * i2c_clie...

2012-08-13 15:53:44

阅读数:1273

评论数:0

异步:fasync_struct

这一节主要在上一节中添加了异步通知的功能,要注意观察和对比该字符设备的驱动是怎样一步步完善的。 补充一下小知识:异步通知的意思是一旦设备就绪,就主动通知应用程序,这样应用程序根本读不需要查询设备状态。 #include #include #include #include #inc...

2012-08-07 18:18:12

阅读数:3253

评论数:1

信号量和队列:semaphore and wait_queue_head_t

这一次是在globalmem的字符设备驱动的基础上,增加了并发控制(也就是多进程多共享资源的访问的控制),还增加了阻塞I/O 和poll轮询操作,因为我还是菜鸟,有很多东西还不懂,希望与大侠能指点学习Linux设备驱动的要点和关键点。还是看代码吧 #include #include #i...

2012-08-07 16:37:25

阅读数:1954

评论数:2

Linux设备驱动入门----globalmem字符设备驱动

/* globalmem字符设备驱动 * 作者:liwei.cai * 日期:2012-08-03 * globalmem.c */ #include #include #include #include #include #include #include #includ...

2012-08-06 10:42:04

阅读数:1896

评论数:2

linux驱动入门---test驱动模块加载

编写一简单的字符驱动程序,这里的设备也就是一段内存,实现简单的都写功能, 并列出常用格式的Makefile已经驱动加载和卸载脚本。 /* test_drv.c */ #include #include #include #include #include #includ...

2012-08-01 08:56:42

阅读数:1478

评论数:6

消息:ftok(), msgget(), msgsnd(),msgrcv(),msgctl()

/* * msgsnd.c * * Created on: 2012-7-20 * Author: liwei.cai */ //以下是消息队列发送端的代码,与接收端配合使用, //输入字符串quit时退出程序,其他字符串发送 #include #include #in...

2012-07-21 00:53:54

阅读数:1365

评论数:1

信号:signal(), sigaction(), sigaddset(), sigemptyset(), sigismember(), sigprocmask()

实例一:如何使用信号函数捕捉相应的信号,并做相应的处理。 /* * signal.c * * Created on: 2012-7-19 * Author: liwei.cai */ #include #include #include //自定义信号处理函数...

2012-07-21 00:53:14

阅读数:5708

评论数:0

共享内存的创建和映射shmget()和shmat()

共享内存的实现分为两步: 1、创建共享内存,用到的函数是shmget(); 2、映射共享内存,就是把这段创建的共享内存映射到具体的进程空间去,使用的函数是:shmat(); 这样就可以使用不带缓冲的I/O读写命令对其进行操作了。 实例如下: /* * shmem.c * * ...

2012-07-21 00:52:10

阅读数:9043

评论数:3

进程的管道通信pipe(int)函数的运用

/* * pipe.c * * Created on: 2012-7-13 * Author: liwei.cai */ #include #include #include #include #include #include #define MAX_DATA...

2012-07-21 00:51:14

阅读数:896

评论数:0

如何创建守护进程fork()函数的运用

编写守护进程只要遵循一个特定的流程,就很方便写出自己的守护进程。 第一步、创建子进程,父进程退出; pid = fork() if (pid > 0) { exit(0);   //父进程退出 } 第二步、在子进程中创建新会话; 第三步、改变当前目录为根目录; 第四步、重设...

2012-07-21 00:50:38

阅读数:2071

评论数:0

使用多路复用实现3个串口的通信

如题,Linux环境下操作串口设备,实现多路复用。 串口配置函数: /* * set_com_config.c * * Created on: 2012-7-18 * Author: liwei.cai */ #include int set_com_config(...

2012-07-19 19:52:07

阅读数:5944

评论数:0

简单的多路复用编程(I/O)----select()和poll函数的运用

多路复用一般用于I/O操作可能会被阻塞的情况,对可能会有阻塞的I/O的管道、网路进行编程。下面我们来看个例子来说明如何使用两个多路复用函数。         本实例中主要实现通过调用select()函数来监听3个终端的输入(分别重定向到两个管道文件的虚拟终端以及主程序所运行的虚拟终端),并分别进...

2012-07-17 21:03:01

阅读数:3297

评论数:0

文件锁fcntl()函数的使用

问:为什么要使用文件锁? 答:当多个用户共同使用、操作一个文件的情况时,Linux采用的方法就是给文件上锁,来避免共享的资源产生竞争的状态。 问:文件锁有哪些类型? 答:文件锁包括建议性锁和强制性锁。一般情况下,内核和系统都不适用建议性锁,采用强制性锁的影响很大,每次读写操作都必须检查是否有...

2012-07-17 21:01:36

阅读数:6178

评论数:0

使用autotools生成包含多文件的makefile

这里以简单的一段程序为例:/* * daemon.c * * Created on: 2012-7-13 * Author: liwei.cai */ #include #include #include #include #include #include #i...

2012-07-16 21:19:45

阅读数:1070

评论数:0

GCC创建使用静态库,动态库

如何创建和使用,简而言之看代码,从例子入手: /* * unsgn_pow.c * * Created on: 2012-7-16 * Author: liwei.cai */ //库函数 unsigned long long unsgn_pow(unsigned in...

2012-07-16 21:02:05

阅读数:2824

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭