自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

转载 多线程 or 多进程 (转强力推荐)

在Unix上编程采用多线程还是多进程的争执由来已久,这种争执最常见到在C/S通讯中服务端并发技术 的选型上,比如WEB服务器技术中,Apache是采用多进程的(perfork模式,每客户连接对应一个进程,每进程中只存在唯一一个执行线程), Java的Web容器Tomcat、Websphere等都是多线程的(每客户连接对应一个线程,所有线程都在一个进程中)。从Unix发展历史看,伴随着Uni

2014-11-03 12:21:09 476

转载 Linux--进程间通信(信号量,共享内存)(转)

一. 信号量  l信号量: 解决进程之间的同步与互斥的IPC机制 多个进程同时运行,之间存在关联  •同步关系  •互斥关系互斥与同步关系存在的根源在于临界资源  •临界资源是在同一个时刻只允许有限个(通常只有一个)进程可以访问(读)或修改(写)的资源    –硬件资源(处理器、内存、存储器以及其他外围设备等)    –软件资源(共享代码段,共享结构

2014-11-01 14:59:22 552

翻译 SPI

一 SPI协议概括SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实

2014-06-06 13:56:04 714

原创 i2c-tools测试EEPROM

linux版本:linux-3.0开发板:FL2440EEPROM:AT

2014-05-15 18:55:53 3334

原创 I2C测试程序及结果

测试程序:#include #include #include #include #include #include #include int main (int argc, char **argv){    int ret,fd,i,j;    char read_data[256];    char write_data[256];    c

2014-05-04 18:02:59 1861

转载 通俗易懂的USB协议详解(转载)

转自东海的博客http://6xudonghai.blog.163.com/blog/static/3364062920086253155137/USB作为一种串行接口,应用日益广泛。如同每个工程设计人员必须掌握I2C,RS232这些接口一样,我们也必须掌握usb.但是usb的接口协议实在有点费解,linux uhci驱动作者之一Alan Stern曾经就说过“The US

2014-05-01 21:01:05 592

转载 USB协议基本知识

USB 基本知识 USB的重要关键概念: 1、 端点:位于USB设备或主机上的一个数据缓冲区,用来存放和发送USB的各种数据,每一个端点都有惟一的确定地址,有不同的传输特性(如输入端点、输出端点、配置端点、批量传输端点)2、 帧:时间概念,在USB中,一帧就是1MS,它是一个独立的单元,包含了一系列总线动作,USB将1帧分为好几份,每一份中是一个USB的传输动作。3、ups

2014-05-01 20:59:43 2097

转载 基于linux-2.6.35的class_create(),device_create解析

从linux内核2.6的某个版本之后,devfs不复存在,udev成为devfs的替代。提醒一点,udev是应用层的,不要试图在内核的配置选项里找到它;加入对udev的支持很简单,以作者所写的一个字符设备驱动为例,在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用device_create创建对应的设备。大致用法如下:struct class *myc

2014-04-28 17:37:04 394

转载 linux内核wait_queue深入分析

前几天在看驱动的时候碰到了等待队列,上网去搜了一下,再结合代码看了一下,深有体会.在 kernel 里,wait_queue 的应用很广,举凡 device driver,semaphore 等方面都会使用到 wait_queue 来 implement。所以,它算是 kernel 里蛮 基本的一个数据结构。首先,我们得明白,linux中的所有的进程都由task_struct这个结构管理。在生

2014-04-26 10:13:42 604

转载 sysfs文件系统

sysfs是用于表现设备驱动模型的文件系统,它基于ramfs。要学习linux的设备驱动模型,就要先做好底层工作,总结sysfs提供给外界的API就是其中之一。sysfs文件系统中提供了四类文件的创建与管理,分别是目录、普通文件、软链接文件、二进制文件。目录层次往往代表着设备驱动模型的结构,软链接文件则代表着不同部分间的关系。比如某个设备的目录只出现在/sys/devices下,其它地方涉及到它时

2014-04-23 16:22:27 410

转载 jiffies溢出与时间先后比较time_after,time_before

1. 概述在Linux内核中,TCP/IP协议栈在很多用到时间比较的地方都使用了jiffies?本文介绍了什么是jiffies,jiffies溢出可能造成的问题,使用time_after等宏来正确地比较时间及其背后的原理。2. jiffies简介2.1 时钟中断在Linux内核中,TCP/IP协议栈在很多用到时间比较的地方都使用了jiffies。那么jiffies是什么

2014-04-22 21:18:59 731 1

转载 kobject设备模型分析

sysfs是kobject的表达,所以这里翻译了Documention下的kobjct.txt,并加上了一些自己的注释,这样基本就对kobject和sysfs有了一个比较深刻的理解,我们可以简单的将sysfs看成最bottom的操作,然后kobject的想关操作是架构在sysfs之上,再然后kobject和attribute所嵌入的结构体再构成上一层结构来操作kobject,最后就实现了kerne

2014-04-22 13:19:50 361

翻译 Linux的I2C驱动讲解

struct i2c_adapter {    struct module *owner;    unsigned int class;       /* classes to allow probing for */    const struct i2c_algorithm *algo; /* the algorithm to access the bus */    void

2014-04-21 16:00:29 1511

原创 linux-3.0中的触摸屏驱动讲解

一.ADC及触摸屏接口图

2014-04-14 19:08:56 1120

原创 wpa_supplicant移植

前面我们已经编译好了openssl-0.9.8e和libnl-1.1现在我们只需要修改wpa_supplicant的.config[zhouyou@centos6 wpa_supplicant]$ cp defconfig .config[zhouyou@centos6 wpa_supplicant]$vim .configCC=/opt/buildroot-2011.11/arm92

2014-04-14 13:30:55 415

原创 linux-3.0中的LCD驱动详解

一、开发环境  · 开发板:FL2440   · 开发板:Mini2440--64MB Nand, Kernel:2.6.30.4  · 编译器:arm-linux-gcc-4.3.2

2014-04-10 15:59:29 1171

转载 关于platform_driver 是如何匹配 platform_device的和如何调用到platform_driver中的probe函数的研究

在linux中platform平台驱动又三大部分组成,第一是bus、第二是驱动、第三是设备。      第一总线也就是platform_bus,总线也是一种特殊的device,到底层下面还是要调用device_register来注册该总线设备,然后是用来注册总线的属性结构体 bus_type(platform_bus_type),至此platform平台的总线已经准备好。具体介绍可以看我另一篇

2014-04-09 14:24:17 707

转载 关于__init、__initdata和__exit、__exitdata的学习笔记

由于4年前对于C语言和Linux的知识贫乏,所以当时对于模块中的函数定义没有细看。这次在温习《LDD3》的时候,重新看了一下关于__init、__initdata和__exit、__exitdata的知识,记录如下:对于__init、__initdata和__exit、__exitdata的定义位于,这些宏定义的作用是告诉编译器将这些函数或者数据放入相应的section中,而在模块加载

2014-04-07 18:56:56 3728 1

转载 struct vm_area_struct

Linux内核中,关于虚存管理的最基本的管理单元应该是struct vm_area_struct了,它描述的是一段连续的、具有相同访问属性的虚存空间,该虚存空间的大小为物理内存页面的整数倍。  下面是struct vm_area_struct结构体的定义:[cpp] view plaincopyprint?"FONT-FAMILY: Microsoft YaHe

2014-04-05 16:01:19 1063

转载 内核模块引用计数的实现

一、模块使用计数的背景知识    模块是一种可以在内核运行过程中动态加载、卸载的内核功能组件。2.6内核中模块的命名方式为*.ko。模块在被使用时,是不允许被卸载的。编程时需要用“使用计数”来描述模块是否在被使用。二、2.4内核使用计数的实现方法    2.4内核中,模块自身通过 MOD_INC_USE_COUNT, MOD_DEC_USE_COUNT宏来管理自己被使用的计数。通常我们

2014-04-04 17:20:05 632

原创 pppd移植

[zhouyou@centos6 ppp]$ wget ftp://ftp.samba.org/pub/ppp/ppp-2.4.4.tar.gz[zhouyou@centos6 ppp]$ tar zxf ppp-2.4.4.tar.gz[zhouyou@centos6 ppp]$ cd ppp-2.4.4[zhouyou@centos6 ppp-2.4.4]$ ./configu

2014-03-29 08:24:39 1852

原创 wifi模块工作在Station模式

linux内核:linux-2.6.39开发板平台:at91sam9x35WIFI模块:rt3070~ >: ifconfig wlan0 up~ apps>:ls /apps >: lsetc                  usb_modeswitch       zte_mf626.confiwconfig             wpa_sup

2014-03-25 22:27:52 3195 1

原创 wireless_tools移植

[zhouyou@centos6 wireless_tools]$ wget http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/wireless_tools.29.tar.gz

2014-03-25 16:43:14 680

转载 usb_modeswitch移植

[lingyun@localhost zhouyou]$ mkdir usbmode[lingyun@localhost zhouyou]$ cd usbmode/[lingyun@localhost usbmode]$ wget http://pkgs.fedoraproject.org/repo/pkgs/libusb1/libusb-1.0.0.tar.bz2/df2447c23

2014-03-21 23:46:58 756

原创 hostapd移植

内核版本:linux-2.6.39开发板平台:at91sam9x35wifi模块:rt3070 先说一下wifi的两种常见的模式。AP模式: Access Point,提供无线接入服务,允许其它无线设备接入,提供数据访问,一般的无线路由/网桥工作在该模式下。AP和AP之间允许相互连接。Station模式:类似于无线终端,station本身并不接受无线的接入,它可以连接到AP

2014-03-21 23:13:45 2599

翻译 linux驱动编译时make -C M= 解释

Makefile为PWD = $(shell pwd)KERNEL_SRC =/usr/src/linux-3.0/ obj-m :=test.omodule-objs : =test.oall:              $(MAKE)   -C  $(KERNEL_SRC)   M=$(PWD)    modulesclean:              

2013-11-25 21:42:48 1326

转载 I/O内存与硬件通信

一、与硬件进行通信的原理每个外设都是通过读写它芯片上的寄存器来控制。大部分时间一个设备有几个寄存器, 并且是在连续地址空间上存取它们,,这个空间在内存地址空间或者在 I/O 地址空间。在硬件级别上, 内存地址空间区域和 I/O地址空间区域没有概念上的区别:它们都是通过在地址总线和控制总线上发出电信号来存取(即, 读写信号)并且读自或者写到数据总线。二、使用 I/O 地址空间与硬件进行通

2013-11-20 20:51:15 1030

转载 大公司与小公司

公司都愿意找能力强、资格老的人来做研发,有点个人英雄主义在里面。一个优秀能干的员工能给公司带来很大的利益。但是,凡事都有双面性。现在这个社会,人才流动很快。能力强的、聪明的人,虽说给公司带来过不少利益,但也经常给公司带来很大的伤害,做几年就远走高飞的人太多了。他们的离开给公司造成了很大的缺口,很多地方都要好久才能补上。总之,元气大伤。这种情况见得多了,这些大公司就精了。    他们发现,不能让

2013-10-29 19:11:37 529

原创 判断大端模式还是小端模式

#include int main (int argc, char **argv){    int a = 0x12345678;    char b;    b = (((unsigned char *)&(a))[0]);    if(b == 0x78)        printf("little endian\n");    else if   

2013-10-29 19:08:35 424

原创 用进程间通信的方法获取某张网卡的IP地址

int get_ipaddr(char *intf, char *ipaddr)返回值: 0表示成功, -1表示失败输入参数:  intf这是网卡的名字,譬如第一张网卡传参为"eth0"程序设计:1, 使用pipe创建一个管道,并使用fork()创建一个子进程;2, 父进程关闭管道的写端,子进程关闭管道的读端3, 子进程重定向标准输出为管道的写端4, 子进程执行ifco

2013-10-28 19:44:47 790

原创 strchr函数

函数名称:           strchr函数原型:           char*   strchr(char*   str,char   ch);函数功能:           找出str指向的字符串中第一次出现字符ch的位置函数返回:           返回指向该位置的指针,如找不到,则返回空指针参数说明:           str-待搜索的字符串,ch-查找的字符

2013-10-28 19:32:31 479

原创 strstr函数

原型:extern char *strstr(char *haystack, char *needle); 用法:#include 功能:从字符串haystack中寻找needle第一次出现的位置(不比较结束符NULL)。 说明:返回指向第一次出现needle位置的指针,如果没找到则返回NULL

2013-10-28 19:29:56 461

原创 获取某张网卡的IP地址

#include #include #include #include #include #include #define IP_ADDR_LEN     20//   intf:指向网卡名的指针//   ipaddr:指向IP地址的指针int get_ipaddr(char *intf,char *ipaddr) {            int  s

2013-10-28 14:54:15 618

原创 struct ifreq

包含在头文件/usr/include/net/if.h中,用来配置ip地址,激活接口,配置MTU等接口信息的。DE>/* Interface request structure used for socket ioctl's. All interface   ioctl's must have parameter definitions which begin wi

2013-10-28 14:21:40 627

原创 register_chrdev_region

要使用 I/O 内存首先要申请 , 然后要映射 , 而要使用 I/O 端口首先要申请 , 或者叫请求 , 对于 I/O 端口的请求意思是让内核知道你要访问这个端口 , 这样内核知道了以后它就不会再让别人也访问这个端口了 . 毕竟这个世界僧多粥少啊 . 申请 I/O 端口的函数是 request_region, 这个函数来自 include/lin

2013-10-25 15:12:51 583

翻译 cdev_alloc

内核中每个字符设备都对应一个 cdev结构的变量,下面是它的定义:linux-2.6.22/include/linux/cdev.hstruct cdev {struct kobject kobj;          // 每个 cdev都是一个 kobjectstruct module *owner;       //指向实现驱动的模块const struct file_op

2013-10-25 15:08:07 1453

原创 获取客服端的IP地址-getpeername()

int getpeername(int socket, struct sockaddr *name, socklen_t *namelen);头文件#include 描述获取socket的对方地址 实例:          struct sockaddr_in        servaddr,sa;           int                      

2013-10-24 18:06:04 1840

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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