2014年1月22日

(转载)ubuntu12.04的NFS配置

摘要: 安装nfs:#sudo apt-get install nfs-kernel-serverubuntu12.04中的已经是最新版本了,无需安装打开/etc/exports文件,在末尾加入:/home/kevin *(rw,sync,no_root_squash)注:nfs允许挂载的目录及权限,在文件/etc/exports中进行定义,各字段含义如下:/home/kevin:要共享的目录* :允许所有的网段访问rw :读写权限sync:资料同步写入内在和硬盘no_root_squash:nfs客户端共享目录使用者权限重启服务:#sudo /etc/init.d/portmap restart&l 阅读全文

posted @ 2014-01-22 14:25 熊猫酒仙是也 阅读(130) 评论(0) 推荐(0) 编辑

2014年1月14日

SPI协议及其工作原理详解

摘要: 一、概述. SPI, Serial Perripheral Interface, 串行外围设备接口, 是 Motorola 公司推出的一种同步串行接口技术. SPI 总线在物理上是通过接在外围设备微控制器(PICmicro) 上面的微处理控制单元 (MCU) 上叫作同步串行端口(Synchronous Serial Port) 的模块(Module)来实现的, 它允许 MCU 以全双工的同步串行方式, 与各种外围设备进行高速数据通信.SPI最大的特点是由主设备时钟信号的出现与否来确定主/从设备间的通信。一旦检测到主设备的时钟信号,数据开始传输。 SPI 主要应用在 EEPROM, Flash, 阅读全文

posted @ 2014-01-14 18:30 熊猫酒仙是也 阅读(8420) 评论(0) 推荐(1) 编辑

2013年11月4日

《C和指针》 读书笔记 -- 第14章 预处理器

摘要: 1.相邻字符串常量被自动链接为一个字符串:"my""name"="myname"2.##把位于两边的符号连接成一个符号: #define ADD_TO_SUM(sum_number,value) \ sum ## sum_number +=value ADD_TO_SUM(5,25);即sum5 +=25;3.#undef name //用于移除一个宏定义4.条件编译#if defined(OS_UNIX) #ifdef OPTION1 unix_version_of_option1(); #endif #ifdef OPTION2 阅读全文

posted @ 2013-11-04 10:01 熊猫酒仙是也 阅读(224) 评论(0) 推荐(0) 编辑

2013年11月2日

《C和指针》 读书笔记 -- 第13章 高级指针话题

摘要: 1.函数指针 int (*f)(); int *(*f[])();用途:【1】回调函数e.g./*在一个单链表中查找指定值*/Node *search_list(Node *node,void const *value,int (*compare)(void const *,void const *) ){ while(node != NULL) { if(compare(&node->value,value)==0) break; node=node->link; } return node;}int compare_ints(void const *a,v... 阅读全文

posted @ 2013-11-02 10:45 熊猫酒仙是也 阅读(360) 评论(0) 推荐(0) 编辑

2013年10月27日

《C和指针》 读书笔记 -- 第11章 动态内存分配

摘要: 1.C函数库提供了两个函数,malloc和free,分别用于执行动态内存分配和释放,这些函数维护一个可用内存池。 void *malloc(size_t size);//返回指向分配的内存块起始位置的指针。分配的是一块连续内存。分配单位:字节 void free(void *point); 另外 void *calloc(size_t num_elements,size_t element_size);//分配内存并初始化为0 void realloc(void *ptr, size_t new_size);//可以是一块内存区域扩大或者缩小。2.内存泄露(memory leak) ... 阅读全文

posted @ 2013-10-27 20:57 熊猫酒仙是也 阅读(196) 评论(0) 推荐(0) 编辑

2013年10月25日

《C和指针》 读书笔记 -- 第10章 结构和联合

摘要: 1.聚合数据类型能够同时存储超过一个的单独数据,c提供了两种类型的聚合数据类型,数组和结构。2.【1】 struct SIMPLE { int a; }; struct SIMPLE x; 【2】 typedef struct { int a; }Simple; Simple x;3.结构的自应用 --->用指针 struct SELF_REF { int a; struct SELF_REF *b; };4.struct SIMPLE x; struct SIMPLE *p;=====>>> x.a p->a5.位段 位段成员... 阅读全文

posted @ 2013-10-25 14:56 熊猫酒仙是也 阅读(171) 评论(0) 推荐(0) 编辑

2013年10月24日

电子信息专业学生,出来之后要干什么呢?(转)

摘要: 如果从工程师和研究生的专业方向来看,电子信息专业的方向大概有:1)数字电子线路方向。从事单片机(8位的8051系列、32位的ARM系列等等)、FPGA(CPLD)、数字逻辑电路、微机接口(串口、并口、USB、PCI)的开发,更高的要求会写驱动程序、会写底层应用程序。单片机主要用C语言和汇编语言开发,复杂的要涉及到实时嵌入式操作系统(Linux,VxWorks,uC-OS,WindowsCE等等)的开发、移植。大部分搞电子技术的人都是从事这一方向,主要用于工业控制、监控等方面。2)通信方向。一个分支是工程设计、施工、调试(基站、机房等)。另一分支是开发,路由器、交换机、软件等,要懂7号信令,各种 阅读全文

posted @ 2013-10-24 18:31 熊猫酒仙是也 阅读(359) 评论(0) 推荐(0) 编辑

2013年10月23日

(转载)堆、栈及静态数据区详解

摘要: 内存分为代码区、全局数据区、堆区和栈区。堆一般存放动态数据,栈里一般存放局部成员。关于堆栈和堆的概念[问题]C++中创建本地(或者说局域)变量是在堆栈(stack)中分配内存地址,而创建全局变量则是在堆(heap)中分配内存地址。我想知道什么是堆(heap)?为什么全局变量和本地变量在分配内存地址时要分别对待,堆和堆栈哪一个更有效率?[回答]在Window中执行的每一个应用程序都有其自己的内存地址。一部分内存空间用于存放程序代码,一部分内存空间用于存放程序执行期间创建的变量。创将变量的方法有两种,一种是在堆中,另外一种则在堆栈里。理解堆的最好的方法是将它看成一个程序随时可以使用的内存块。为了创 阅读全文

posted @ 2013-10-23 17:44 熊猫酒仙是也 阅读(204) 评论(0) 推荐(0) 编辑

linux设备驱动模型(kobject与kset)

摘要: Linux设备模型的目的:为内核建立一个统一的设备模型,从而又一个对系统结构的一般性抽象描述。换句话说,Linux设备模型提取了设备操作的共同属性,进行抽象,并将这部分共同的属性在内核中实现,而为需要新添加设备或驱动提供一般性的统一接口,这使得驱动程序的开发变得更简单了,而程序员只需要去学习接口就行了。 kobject 1.sysfs文件系统 1.1 sysfs文件系统与内核结构的关系linux内核中的结构sysfs中的结构 ... 阅读全文

posted @ 2013-10-23 14:46 熊猫酒仙是也 阅读(2752) 评论(0) 推荐(0) 编辑

2013年10月13日

linux 输入子系统(4)---- input子系统的初始化

摘要: Input子系统的初始化函数为input_init(),如下:static int __init input_init(void){ int err; input_init_abs_bypass(); err = class_register(&input_class); if (err) { printk(KERN_ERR "input: unable to register input_dev class\n"); return err; } err = input_proc_init(); if (err) ... 阅读全文

posted @ 2013-10-13 18:48 熊猫酒仙是也 阅读(889) 评论(0) 推荐(0) 编辑

linux 输入子系统(3)----事件处理(input_handler层)

摘要: 输入子系统主要设计input_dev、input_handler、input_handle。如下:【1】每个struct input_dev代表一个输入设备struct input_dev { const char *name;//设备名 const char *phys; const char *uniq; struct input_id id;//用于匹配事件处理层handler unsigned long evbit[BITS_TO_LONGS(EV_CNT)];//用于记录支持的事件类型的位图 unsigned long keybit[BITS_TO_LONGS(KEY_CNT)];. 阅读全文

posted @ 2013-10-13 15:47 熊猫酒仙是也 阅读(1788) 评论(0) 推荐(0) 编辑

linux 输入子系统(2)----简单实例分析系统结构(input_dev层)

摘要: 实例代码如下:#include #include #include #include #include #define BUTTON_IRQ 123static struct input_dev *button_dev ;/*输入设备结构体*/static irqreturn_t button_interrupt(int irq, void *dummy) /*中断处理函数*/{ input_report_key(button_dev, BTN_0, inb(BUTTON_PORT) & 1);/*向输入子系统报告产生按键事件*/ ===========》》》》》【3】 i... 阅读全文

posted @ 2013-10-13 14:17 熊猫酒仙是也 阅读(1308) 评论(0) 推荐(0) 编辑

linux 输入子系统(1)----系统概述

摘要: 输入设备的工作中,只是中断、读键值/坐标值是设备相关的,而输入事件的缓冲区管理以及字符设备驱动的file_operations接口则对输入设备是通用的,基于此,内核设计了input输入子系统,由核心层处理公共事务。 Linux内核输入子系统的框架如下图: 由上图可以看出,input子系统由设备驱动层、输入子系统核心层(input core)和事件处理层(event handler)3部分组成。如下图所示: 一个输入事件,如鼠标移动,通过 驱动层=》核心层=》事件层=》用户空间 的顺序到达用户空间并传递给应用程序。 阅读全文

posted @ 2013-10-13 12:29 熊猫酒仙是也 阅读(357) 评论(0) 推荐(0) 编辑

(转载)Linux usbtouchscreen驱动分析

摘要: 在Linux内核中自带USB触摸屏驱动,以linux-2.6.33.3\drivers\input\touchscreen.c为例,进行解析:1.驱动加载:static int __init usbtouch_init(void){return usb_register(&usbtouch_driver); //驱动注册}其中usbtouch_driver定义为: static struct usb_driver usbtouch_driver = {.name = "usbtouchscreen", //驱动名称.probe = usbtouch_probe, / 阅读全文

posted @ 2013-10-13 09:52 熊猫酒仙是也 阅读(980) 评论(0) 推荐(0) 编辑

2013年10月12日

字符设备驱动中cdev与inode、file_operations的关系

摘要: 一、cdev与inode 二、cdev与file_operations 阅读全文

posted @ 2013-10-12 10:42 熊猫酒仙是也 阅读(1509) 评论(0) 推荐(0) 编辑

2013年10月11日

模块参数和模块之间的通讯

摘要: 一.模块参数 模块参数需要在加载模块时指定,e.g. insmod xxxx.ko param=1 定义:module_param(参数名,参数数据类型,参数读写权限); e.g. static long a =1; static int b =1; module_param(a,long,S_IRUGO); module_param(b,int,S_IRUGO);二.模块的文件格式ELF .test 代码段.data 数据段Section Table 所有段的信息.symtab 符号表三.模块之间的通讯 符号导出用 EXPORT_S... 阅读全文

posted @ 2013-10-11 21:20 熊猫酒仙是也 阅读(344) 评论(0) 推荐(0) 编辑

Hello World 的makefile模板及其分析

摘要: makefile模板:ifeq ($(KERNELRELEASE),) //判断KERNELRELEASE是否为空,只有执行make的当前目录为内核源代码目录时,该变量才不为空。KERNELDIR ?=/linux-2.6.29.4/linux-2.6.29.4PWD := $(shell pwd)modules: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules //make -C 内核路径 M=模块路径 modulesmodules_install: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_in... 阅读全文

posted @ 2013-10-11 20:00 熊猫酒仙是也 阅读(271) 评论(0) 推荐(0) 编辑

《C和指针》 读书笔记 -- 第9章 字符串、字符和字节

摘要: 1.字符串以NUL结尾,但字符串长度不包括NUl字节。2.复制字符串 char *strcpy(char *dst,char const *src);3.连接字符串 char *strcat(char *dst,char const *src);4.字符串比较 int strcmp(char const *s1,char const *s2);5. 长度受限的字符串函数 char *strncpy(char *dst,char const *src,size_t len);//strlen(src)>=len 它的结果将不会以NUl字节结尾,可以buffer[BSIZE-1]=' 阅读全文

posted @ 2013-10-11 16:57 熊猫酒仙是也 阅读(324) 评论(0) 推荐(0) 编辑

2013年10月10日

《C和指针》 读书笔记 -- 第8章 数组

摘要: 1.在C中,数组名的值是一个指针常量而不是指针变量,也就是数组第一个元素的地址。2.数组和指针的区别: 声明一个数组时,编译器将根据声明所指定的元素数量为数组保留内存空间,然后再创建数组名,它的值是一个指针常量,指向这段空间的起始地址; 声明一个指针时,编译器只为指针本身保留内存空间,并不为任何值分配内存空间。3.存储于静态内存的数组只初始化一次,也就是在程序开始执行之前,通过把数组声明为static来实现。4.int matrix[3][10]; 说明如下: 【1】 matrix 指向包含10个整型元素的数组的指针 ------>指向数组的指针: int (*p)[10]=mat... 阅读全文

posted @ 2013-10-10 19:58 熊猫酒仙是也 阅读(290) 评论(0) 推荐(1) 编辑

ARM-Linux S5PV210 UART驱动(6)----platform device的添加

摘要: 开发板是飞凌OK210arch/arm/mach-s5pv210/mach-smdkc110.c首先是UART的寄存器默认配置信息:/* Following are default values for UCON, ULCON and UFCON UART registers */#define S5PV210_UCON_DEFAULT (S3C2410_UCON_TXILEVEL | \ S3C2410_UCON_RXILEVEL | \ S3C2410_UCON_TXIRQMODE | \ ... 阅读全文

posted @ 2013-10-10 11:41 熊猫酒仙是也 阅读(967) 评论(0) 推荐(0) 编辑

ARM-Linux S5PV210 UART驱动(5)----串口的open操作(tty_open、uart_open)

摘要: 串口驱动初始化后,串口作为字符驱动也已经注册到系统了,/dev目录下也有设备文件节点了。那接下来uart的操作是如何进行的呢?操作硬件之前都是要先open设备,先来分析下这里的open函数具体做了那些工作。s3c24xx_serial_modinit -->uart_register_driver -->tty_register_driver 中有如下语句: cdev_init(&driver->cdev, &tty_fops);此处将driver->cdev->ops=&tty_fops而tty_fops如下:static const s 阅读全文

posted @ 2013-10-10 11:38 熊猫酒仙是也 阅读(1801) 评论(0) 推荐(0) 编辑

2013年10月9日

ARM-Linux S5PV210 UART驱动(4)----串口驱动初始化过程

摘要: 对于S5PV210 UART驱动来说,主要关心的就是drivers/serial下的samsung.c和s5pv210.c连个文件。由drivers/serial/Kconfig: config SERIAL_SAMSUNG depends on ARM && PLAT_SAMSUNG config SERIAL_S5PV210 depends on SERIAL_SAMSUNG && (CPU_S5PV210 || CPU_S5P6442) && SERIAL_SAMSUNG_CONSOLE可以看出模块的依赖关系,先加载samsung.ko,然 阅读全文

posted @ 2013-10-09 15:59 熊猫酒仙是也 阅读(2385) 评论(0) 推荐(0) 编辑

ARM-Linux S5PV210 UART驱动(3)----串口核心层、关键结构体、接口关系

摘要: 尽管一个特定的UART设备驱动完全可以按照tty驱动的设计方法来设计,即定义tty_driver并实现tty_operations其中的成员函数,但是Linux已经在文件serial_core.c中实现了UART设备的通用tty驱动层,称为串口核心层,这样,UART驱动的主要任务变成了实现serial_core.c中定义的一组uart_xxx接口而非tty_xxx接口。 uart设备是继tty_driver的又一层封装.实际上uart_driver就是对应tty_driver.在它的操作函数中,将操作转入uart_port.在写操作的时候,先将数据放入一个叫做circ_buf的环形缓... 阅读全文

posted @ 2013-10-09 15:57 熊猫酒仙是也 阅读(3741) 评论(0) 推荐(0) 编辑

ARM-Linux S5PV210 UART驱动(2)---- 终端设备驱动

摘要: 在Linux中,UART串口驱动完全遵循tty驱动的框架结构,但是进行了底层操作的再次封装,所以先介绍tty终端设备驱动。一、终端设备 1.串行端口终端(/dev/ttySACn) 2.伪终端(/dev/pty/) 3.控制台终端(/dev/ttyn,/dev/console)二、驱动结构 1.tty分层结构如下图所示: 包含tty核心、tty线路规程、tty驱动,其中tty规程的工作是以特殊的方式格式化从一个用户或者硬件接收到的数据,常采用一个协议转换的形式,如PPP、Bluetooth。 2.tty主要源文件关系及数据流向如下图:特定的tty设备驱动的主体工作是填充... 阅读全文

posted @ 2013-10-09 15:56 熊猫酒仙是也 阅读(1738) 评论(0) 推荐(1) 编辑

(转载)dump_stack的简单使用

摘要: 刚刚接触内核,在调试过程中用printk打印信息当然是直接有效的办法,但当我们不知到一个函数或者一个模块到底在哪里出了问题时我们可以利用dump_stack有效的找到问题的根源,下面只是简单的给出了使用方法。 我在自己的主机上试了一下dump_stack()Makefile文件点击(此处)折叠或打开obj-m:=hello.oKERNELBUILD:=/lib/modules/$(shell uname-r)/builddefault:make-C $(KERNELBUILD)M=$(shell pwd)modulesclean:rm-rf*.o*.ko*.mod.c.*.cmd*.marke 阅读全文

posted @ 2013-10-09 15:49 熊猫酒仙是也 阅读(280) 评论(0) 推荐(0) 编辑

(转载)Linux串口—struct termios结构体

摘要: 一、数据成员 termios 函数族提供了一个常规的终端接口,用于控制非同步通信端口。 这个结 构包含了至少下列成员: tcflag_t c_iflag; /* 输入模式 */ tcflag_t c_oflag; /* 输出模式 */ tcflag_t c_cflag; /* 控制模式 */ tcflag_t c_lflag; /* 本地模式 */ cc_t c_cc[NCCS]; /* 控制字符 */ struct termios {unsigned short c_iflag; /* 输入模式标志*/ unsigned short c_oflag; /* 输出模式标志*/ unsigned 阅读全文

posted @ 2013-10-09 14:31 熊猫酒仙是也 阅读(480) 评论(0) 推荐(0) 编辑

(转载)深入理解Linux中内存管理---分段与分页简介

摘要: 首先,必须要阐述一下这篇文章的主题是Linux内存管理中的分段和分页技术。来回顾一下历史,在早期的计算机中,程序是直接运行在物理内存上的。换句话说,就是程序在运行的过程中访问的都是物理地址。如果这个系统只运行一个程序,那么只要这个程序所需的内存不要超过该机器的物理内存就不会出现问题,也就不需要考虑内存管理这个麻烦事了,反正就你一个程序,就这么点内存,吃不吃得饱那是你的事情了。然而现在的系统都是支持多任务,多进程的,这样CPU以及其他硬件的利用率会更高,这个时候就要考虑到将系统内有限的物理内存如何及时有效的分配给多个程序了,这个事情本身就称之为内存管理。下面举一个早期的计算机系统中,内存分配管理 阅读全文

posted @ 2013-10-09 13:27 熊猫酒仙是也 阅读(431) 评论(0) 推荐(1) 编辑

(转载)程序、进程、线程区别与联系

摘要: 定义: 一 程序只是一组指令的有序集合。 二 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位; 三 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),一个线程可以创建和撤销另一个线程; 一 进程与线程区别与联系 (1) 划分尺度:线程更小,所以多线程程序并发性更高; (2) 资源分配&处理器调度:进程是资源分配的基本单位,线程是处理器调度的基本单位。 (3) 地址空间:进程拥有独立的地址空间;... 阅读全文

posted @ 2013-10-09 11:42 熊猫酒仙是也 阅读(147) 评论(0) 推荐(0) 编辑

2013年9月26日

ARM-Linux S5PV210 UART驱动(1)----用户手册中的硬件知识

摘要: 一、概述The Universal Asynchronous Receiver and Transmitter (UART) in S5PV210 provide four independent asynchronous, and serial input/output (I/O) ports. All the ports operate in an interrupt-based or a DMA-based mode. The UART generates an interrupt or a DMA request to transfer data to and from the CPU 阅读全文

posted @ 2013-09-26 13:07 熊猫酒仙是也 阅读(1049) 评论(0) 推荐(0) 编辑

2013年9月24日

(转载)MACHINE_START MACHINE_END 宏

摘要: 一、定义[cpp] #define MACHINE_START(_type,_name) \ //板类型,板名字 static const struct machine_desc __mach_desc_##_type \ __used \ __attribute__((__section__(".arch.info.init"))) = { \ .nr = MACH_TYPE_##_type, \ .name = _name, #define MACHINE_END \ }; MACHINE_START和MACHINE_END... 阅读全文

posted @ 2013-09-24 19:29 熊猫酒仙是也 阅读(242) 评论(0) 推荐(0) 编辑

可变参数列表---以dbg()为例

摘要: 在UART驱动的drivers/serial/samsung.h中遇到如下定义:#ifdef CONFIG_SERIAL_SAMSUNG_DEBUGextern void printascii(const char *);static void dbg(const char *fmt, ...){ va_list va; char buff[256]; va_start(va, fmt); vsprintf(buff, fmt, va); va_end(va); printascii(buff);}#else#define dbg(x...) do { } ... 阅读全文

posted @ 2013-09-24 16:33 熊猫酒仙是也 阅读(432) 评论(0) 推荐(0) 编辑

(转载)do{...}while(0)的意义和用法

摘要: linux内核和其他一些开源的代码中,经常会遇到这样的代码:do{ ...}while(0)这样的代码一看就不是一个循环,do..while表面上在这里一点意义都没有,那么为什么要这么用呢?实际上,do{...}while(0)的作用远大于美化你的代码。查了些资料,总结起来这样写主要有以下几点好处:1、辅助定义复杂的宏,避免引用的时候出错:举例来说,假设你需要定义这样一个宏:#define DOSOMETHING()\ foo1();\ foo2();这个宏的本意是,当调用DOSOMETHING()时,函数foo1()和foo2()都会被... 阅读全文

posted @ 2013-09-24 12:56 熊猫酒仙是也 阅读(187) 评论(0) 推荐(0) 编辑

2013年9月22日

《C和指针》 读书笔记 -- 第7章 函数

摘要: 1.当程序调用一个无法见到原型的函数时,编译器便认为该函数返回一个整型值。如果这个值实际上是非整型值时,还得执行类型转换,所以函数原型声明有时很重要。2.值的类型并不是值的内在本质,而是取决于它被使用的方式。3.C函数的所有参数都是“传值调用”,即函数获得参数值的一份拷贝; 传递给函数的数组参数在行为上是传址调用,因为数组名的值是一个指针,传递给函数的就是这个指针的一份拷贝。4.C通过运行时的堆栈支持递归函数的实现。(递归函数就是直接或者间接调用自身的函数。) 当函数被调用时,它的变量的空间是创建于运行时的堆栈上的,以前调用的函数的变量仍旧保留在堆栈上,但它们被新的函数的变量所“掩盖”,因此是 阅读全文

posted @ 2013-09-22 22:22 熊猫酒仙是也 阅读(209) 评论(0) 推荐(1) 编辑

2013年9月17日

《Visual C++ 程序设计》读书笔记 ----第8章 指针和引用

摘要: 1.&取地址;*取内容。2.指针变量“++”“--”,并不是指针变量的值加1或减1,而是使指针变量指向下一个或者上一个元素。3.指针运算符*与&的优先级相同,左结合;++,--,*,&优先级相同。4.二维数组a a+i表示第i行第0列元素的起始地址,而a[i]也表示第i行第0列元素的起始地址; 由于a[i]表示一个一维数组的首地址,所以a[i]+j表示第i行第j列元素的指针; *(a[i]+j)=a[i][j];5.字符型指针变量与字符数组的区别: char str1[]="I am a student!"; char *str2 ="I 阅读全文

posted @ 2013-09-17 22:22 熊猫酒仙是也 阅读(154) 评论(0) 推荐(0) 编辑

支持异步通知的globalfifo平台设备驱动程序及其测试代码

摘要: 驱动:#include #include #include #include #include //内存管理头文件,含有页面大小定义和一些页面释放函数原型#include #include #include #include //I/O头文件,以宏的嵌入汇编程序形式定义对I/O端口操作的函数。#include //系统头文件,定义了设置或修改描述符/中断门等的嵌入式汇编宏。#include //包含了copy_to_user、copy_from_user等内核访问用户进程内存地址的函数定义#include //包含了kcalloc、kzalloc内存分配函数的定义。#include //--- 阅读全文

posted @ 2013-09-17 16:52 熊猫酒仙是也 阅读(560) 评论(0) 推荐(0) 编辑

2013年9月16日

linux内核中sys_poll()的简化分析

摘要: app:poll or select;kernel:sys_poll(); do_sys_poll(struct pollfd __user *ufds, unsigned int nfds,struct timespec *end_time); poll_initwait(&table); init_poll_funcptr(&pwq->pt, __pollwait);>table->qproc =__pollwait; do_poll(nfds, head, &table, end_time); for (;;)... 阅读全文

posted @ 2013-09-16 22:09 熊猫酒仙是也 阅读(617) 评论(0) 推荐(0) 编辑

(转载)Linux设备模型之input子系统详解

摘要: ------------------------------------------ 本文系本站原创,欢迎转载!转载请注明出处:http://ericxiao.cublog.cn/------------------------------------------一:前言在键盘驱动代码分析的笔记中,接触到了input子系统.键盘驱动,键盘驱动将检测到的所有按键都上报给了input子系统。Input子系统 是所有I/O设备驱动的中间层,为上层提供了一个统一的界面。例如,在终端系统中,我们不需要去管有多少个键盘,多少个鼠标。它只要从input子系统中 去取对应的事件(按键,鼠标移位等)就可以了。今 阅读全文

posted @ 2013-09-16 12:33 熊猫酒仙是也 阅读(202) 评论(0) 推荐(0) 编辑

(转载)linux 输入子系统

摘要: Linux输入子系统将输入驱动抽象为三层:事件处理层、核心层、设备驱动层。应用程序只需要跟事件处理层打交道,不需要察觉设备的变化。核心层是负责管理输入设备,并将消息在事件处理层和设备驱动层之间传递。由于事件处理和设备驱动的分离,使得应用程序读取输入信息的接口固定不变就可以适应新的同类输入设备。表示事件处理层的数据结构是struct input_handler,每个handler代表一种处理事件的方式,允许多个handler共存。代表设备驱动层的数据结构是struct input_dev。input_dev和handler可以建立连接,连接它们的就是struct input_handle。核心层 阅读全文

posted @ 2013-09-16 12:30 熊猫酒仙是也 阅读(226) 评论(0) 推荐(0) 编辑

2013年9月15日

《C和指针》读书笔记——第五章 操作符和表达式

摘要: 1.当/操作符的两个操作数都是整数时,它执行整除运算;其他都是执行浮点数除法。2.逻辑移位:左边移入的位用0填充; 算数移位:左边移入的位用符号位填充;3.位置1 :value |= 1st_size; (*pinstance).st_size; pinstance[1].st_size;8.C不具备显示的布尔类型,使用整数来代替。 阅读全文

posted @ 2013-09-15 14:38 熊猫酒仙是也 阅读(162) 评论(0) 推荐(0) 编辑

2013年9月14日

platform平台设备驱动简化示例代码

摘要: driver.c:#include #include #include #include #include #include #define DRIVER_NAME "my_dev"static int my_probe(struct device *dev){ printk("driver found device !!\n"); return 0;}static int my_remove(struct device *dev){ printk("driver found device unpluged !!\n"); retur 阅读全文

posted @ 2013-09-14 14:37 熊猫酒仙是也 阅读(438) 评论(0) 推荐(0) 编辑

导航