- 博客(19)
- 资源 (10)
- 收藏
- 关注
原创 linux驱动开发--字符设备:添加文件指针偏移的功能
设备移位操作llseek对应lseek系统调用的设备移位操作为llseek默认情况为允许设备移位操作大部分字符设备提供的都是数据流而不是一个数据区,比如串口,对于这些设备而言移位操作毫无意义设备可选择是否支持移位操作支持设备移位操作loff_t (*llseek)(struct file *filp, loff_t off, int whence);filp:待操作
2013-12-31 14:35:35 2963
原创 我的2013:从北京到石家庄的软件开发历程
记得是正月初八那天早上离开了老家,坐上了开往北京的大巴车去北京准备新的一年的奋斗,车票120元了。涨价了20,而且还没有地方报销去了。~~~~(>_工作岗位,招聘可能还没有开始, 就自己在租住的临时房里,准备了2个星期的面试准备。房间里的暖气也不是很暖和,早上7点就起床了。然后在附近转转,散散步锻炼锻炼身体。7点半回去,自己做点早点,把从家里带的咸菜当早餐就对付了一顿。北京生活成本太高了。还是
2013-12-30 15:28:14 6970 8
原创 linux驱动开发--copy_to_user 、copy_from_user函数实现内核空间数据与用户空间数据的相互访问
设备读操作如果该操作为空,将使得read系统调用返回负EINVAL失败,正常返回实际读取的字节数ssize_t (*read)(struct file *filp, char __user *buf, size_t count, lofft *f_pos);filp:待操作的设备文件file结构体指针buf:待写入所读取数据的用户空间缓冲区指针count:待读取数据字节数
2013-12-30 10:33:09 17290 1
原创 linux驱动开发--字符设备:通过cdd_cdev结构中的led变量区分是哪个节点,private_data使用
private_data改进为设备驱动支持多个设备个体做准备,针对private_data进行改进在设备打开操作中通过inode中保存的i_cdev获取代表当前设备的cdev对象通过代表当前设备的cdev对象得到包含该对象的设备私有数据结构体将设备私有数据结构体指针保存到struct file的private_data成员中在其它设备操作中直接使用保存在struct file的
2013-12-28 10:50:19 2798
原创 linux驱动开发--字符设备:创建一组设备节点
cdev改进为设备驱动支持多个设备个体做准备,针对cdev进行改进将代表字符设备的cdev对象包含在设备驱动定义的私有数据结构体中对设备驱动私有数据结构体采用内核内存分配方式为其分配内存将为每个设备添加cdev对象和创建设备节点封装为一个独立函数支持多个设备个体为设备驱动支持多个设备个体对驱动进行改进循环调用为每个设备添加cdev对象和创建设备节点而封装的独立函数实现在
2013-12-28 10:06:20 2708
原创 linux驱动开发--字符设备:自动创建设备节点
自动创建设备文件定义在中class结构:该结构体类型变量对应一个设备类,被创建的类存放在/sys目录下面device结构:该结构体类型变量对应设备,被创建的设备存放于/sys目录下面在加载驱动模块时,用户空间中的udev会自动响应device_create()函数,在/sys下寻找对应的类,从而为这个设备在/dev目录下创建设备文件内核版本问题:在内核2.4版本中使用dev
2013-12-28 09:54:25 5541
原创 linux驱动开发--字符设备:简单的file_operations示例
字符设备结构struct cdev内核使用该结构来表示一个字符设备,在中定义。重要成员:struct kobject kobj;//设备对象struct module *owner;//该设备的拥有者驱动模块struct file_operations *ops;//设备操作集合struct list_head list;//内核维护的字符设备链表成员dev_t dev;//字
2013-12-27 18:12:19 2707
原创 linux驱动开发--字符设备:动态分配设备号
设备号的动态分配int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name);dev:保存分配到的设备号baseminor:希望分配的起始次设备号count:需要分配的设备号数目name:设备名称(出现在/proc/devices) 返回:成功
2013-12-27 16:43:05 2426
原创 linux驱动开发--字符设备:静态分配设备号
字符设备(char device) 采用字节流方式访问的设备称为字符设备,通常智能采用顺序访问方式,也有极少数可以前后移动访问指针的设备(如:帧捕捉卡等设备)。系统标准字符设备,例如:字符中断、串口等设备。常见待开发设备驱动的字符设备,例如:触摸屏、键盘、视频捕捉设备、音频设备等。设备号主设备号 用于标识设备类型,内核代码根据该号码对应设备文件和对应的设
2013-12-27 14:53:46 2966
原创 linux驱动开发--内核定时器
1、内核定时器时钟中断:由系统的定时硬件以周期性的时间间隔发生,这个间隔(也就是频率)由内核根据常数HZ来确定。HZ常数:她是一个与体系结构无关的常数,可以配置50-1200之间,可以在内核中配置tick:她是HZ的倒数,也就是每发生一次硬件定时器中断的事件间隔。如HZ为200,tick为5毫秒。jiffies核心变数:它是linux核心变数(32位变数,unsigned long
2013-12-26 16:23:18 2833
原创 linux驱动开发--内核链表
1、内核链表定义在中定义struct list_head{ struct list_head *next, *prev;};在list_head结构中包含两个指向list_head结构的指针next和prev,在实际使用中,它通常被组织成双向循环链表。内核链表结构体不包含数据域,只包含维护链表的指针域。内核链表被包含在其他数据结构体中使用。初始化链表头INIT_LI
2013-12-26 15:58:10 1907
原创 linux驱动开发--内核空间中内存的申请与释放
1、Linux内存管理linux内存最小管理单位为页(page),通常一页为4kb。linux系统中,在初始化时,内核为每个物理内存页建立一个page的管理结构,操作物理内存时实际上就是操作page页。物理地址:出现在cpu地址总线上的寻址物理内存的地址信号,是地址变换的最终结果。线性地址(虚拟地址):在32位cpu架构上,可以表示4G的地址空间,也就是0x00000000-0
2013-12-26 15:34:01 2424
原创 linux驱动开发--内核模块参数
内核模块参数,验证小例子:/***Copyright (c) 2013.TianYuan*All rights reserved.**文件名称: Modparma.c*文件标识: 模块参数的验证**当前版本:1.0*作者:wuyq **取代版本:xxx*原作者:xxx*完成日期:2013-11-18*/#include #include /*内核提供的机制:在
2013-12-26 08:55:55 1474
原创 linux驱动开发--导出内核符号
/***Copyright (c) 2013.TianYuan*All rights reserved.**文件名称: Esdexp.c*文件标识: 导出内核符号,此文件中的函数模块被Esdimp.c调用**当前版本:1.0*作者:wuyq **取代版本:xxx*原作者:xxx*完成日期:2013-11-18*/#include #include MODULE_L
2013-12-26 08:44:56 1946
原创 Java反射机制--Class类
在正常情况下,必须知道一个类的完整路径之后才可以实例化对象,但是在java中也允许通过一个对象来找到其所在类的信息,那么这实际上就是Class类的功能。package org.lxh.demo15.getclassdemo ;class X{};public class GetClassDemo01{ public static void main(String args[]){
2013-12-23 10:27:09 1671 2
原创 Java 枚举--枚举的作用
枚举就是规定好了指定的取值范围,所有的内容只能从指定的范围中取得。使用简单类完成颜色的固定取值问题。也就是说此时,一个类只能产生固定的几个对象。class Color{ public static final Color RED = new Color("红色") ; // 定义第一个对象 public static final Color GREEN = new Color("绿色"
2013-12-10 08:42:14 1839
原创 C语言编写的娱乐小工具【小时钟、猜数字】
1、实现动态显示当前计算机时间#include #include int main(){ int h = 0; int m = 0; int s = 0; int t = 0;//存储time函数的返回值 while(1){ t = time(0);//取得当前的时间(秒的总和) //将t拆分为时分秒 s = t%60; m = t%3600/60;
2013-12-09 16:01:07 1798
原创 Java类集--属性类Properties
属性是在程序中经常出现的一种形式。在类集中提供了一个专门的Properties类,以完成属性的操作。public class Properties extends HashtableProperties是Hashtable的子类,则也是Map的子类,可以使用Map的全部操作,但是一般情况下属性类是单独使用的。import java.util.Properties;pu
2013-12-04 08:42:53 1588
原创 Java类集--Stack类
栈是采用先进后出的数据存储方式,每一个栈都包含一个栈顶,每次出栈是将栈顶的数据取出。Stack类常用方法:import java.util.Stack ;public class StackDemo{ public static void main(String args[]){ Stack s = new Stack() ; s.push(
2013-12-03 08:36:40 1772 2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人