自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

tangkai177的专栏

学习之路--转载只为学习

  • 博客(138)
  • 收藏
  • 关注

转载 ubuntu11.10 samba服务器配置

特殊时操作下面两部1、关闭LINUX防火墙    sudo ufw disable    注:ufw是linux下的防火墙操作命令,相关的操作可以查看命令帮助    2、先卸载samba-common    sudo apt-get remove samba-common一. samba的安装:sudo apt-get install sambasudo apt

2013-04-04 22:55:57 677

转载 USB驱动程序

usb驱动程序设计实现步骤:首先我们贴出代码:/* * drivers\hid\usbhid\usbmouse.c */#include #include #include #include #include #include static struct input_dev *uk_dev;static char *u

2013-03-10 13:37:36 643

转载 NFS、ramdisk起根文件系统

NFS起根文件系统1、make distclean2、vi config-mini2440  大约309行添加  CMDLINE="root=/dev/nfs nfsroot=172.18.20.24:/nfsroot/rootfs ip=172.18.20.55 rw console=ttySAC0 men=64M"  1.root=/dev/nfs 内核采用nfs方式起

2013-02-03 01:24:17 750

转载 终端控制台体系

异步通信--以一个字符为单位,通信中两个字符间的时间间隔不固定的,然而同一个字符中的两个相邻位之间的时间间隔是固定 的。通信协议----是指通信双方约定的一些规则。在使用异步串口传送一个字符的信息时,对数据格式有如下约定:规定有空闲位,起始位,资料位,奇偶校验位,停止位。波特率---表示每秒传送的二进制位数。注:异步通信是按字符传输的,接收设备在收到起始信号之后

2013-01-23 20:40:59 553

转载 PCI驱动程序设计

一、PCI总线系统体系结构PCI是外围设备互连(Peripheral Component Interconnect)的简称,作为一种通用的总线接口标准,它在目前的计算机系统中得到了非常广泛的应用。PCI提供了一组完整的总线接口规范,其目的是描述如何将计算机系统中的外围设备以一种结构化和可控化的方式连接在一起,同时它还刻画了外围设备在连接时的电气特性和行为规约,并且详细定义了计算机系统中的各

2013-01-23 18:56:15 648

转载 块设备驱动设计

基本概念  块设备(blockdevice)--- 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。字符设备(Character device)---是一个顺序的数据流设备,对这种设备的读写是按字符进行的,而且这些字符是连续地形成一个数据流。他不具备缓冲区,所

2013-01-23 02:07:20 854

转载 LCD驱动程序设计

1 Linux下设备驱动程序驱动程序从字面上可以理解为一类程序,这类程序的目的一般是驱动硬件正常工作,所以通常所说的驱动程序都是针对特定的硬件来编写的。Linux设备驱动程序是为特定的硬件提供给用户程序的一组标准化接口,它隐藏了设备工作的细节。Linux系统下驱动程序是运行在内核态的,是和内核连接在一起的程序。如果运行在用户态的应用程序想控制硬件设备,必须通过驱动程序来控制。Lin

2013-01-22 14:21:04 811

转载 触摸屏驱动设计

触摸屏工作流程:1、选择模式2、设置触摸屏接口到等待接口状态3、如果中断发生,激活转换模式4、获取坐标后,返回等待中断状态(INT_TC中断用于按下或弹起触摸屏)(INT_ADC用于坐标转换完成)  韦东山触摸屏驱动源码分析#include #include #include #include #inclu

2013-01-22 14:12:01 483

转载 Linux输入子系统

Linux系统提供了input子系,按键、触摸屏、鼠标等都可以利用input接口函数来实现设备驱动。体系结构设备描述在Linux内核中,input设备用nput_dev结构体描述,使用input子系统实现输入设备驱动的时候,驱动的核心工作是向系统报告按、触摸屏、键盘、鼠标等输入事件(event,通过input_event结构体描述),不再需要关心文件操作

2013-01-21 00:12:58 497

转载 linux网络体系结构

linux协议栈层次---osi模型(open systems interconnection)但是linux中网络栈的介绍一般分为四层的internet模型。要从协议层向设备发送数据,需要使用dev_queue_xmit函数,这个函数对数据进行排队,并交由底层设备驱动程序进行最终传输,报文的接收通常是使用netif_re执行的。当底

2013-01-20 00:26:38 635

转载 中断处理

2013-01-19 00:58:58 339

转载 Platform驱动程序

Platform总线是linux2.6内核加入的一种虚拟总线。platform机制的本身使用并不复杂,由两部分组成:platform_device和platform_driverPlatform 驱动与传统的设备驱动模型相比,优势在于platform机制将设备本身的资源注册进内核,由内核统一管理,在驱动程序使用这些资源时使用统一的接口,这样提高了程序的可移植性。 平台设备描述平台设

2013-01-18 01:47:50 406

转载 设备模型之驱动

驱动管理一定的设备,其中的关系主要是内核的内部机制实现的,但是实现的具体逻辑需要在bus_type中的match函数中具体设计。通常是一定的设备名和驱动名匹配,当然也可以有其他的逻辑,具体的只需要设计好bus_type中的match函数。驱动是由驱动结构体实现的。具体如下所示:/*驱动结构体*/struct device_driver {

2013-01-18 01:23:54 364

转载 设备模型之设备

例子bus.c#include #include #include #include #include MODULE_AUTHOR("David Xie");MODULE_LICENSE("Dual BSD/GPL");static char *Version = "$Revision: 1.9 $";static int my_ma

2013-01-17 23:54:13 406

转载 设备模型之总线

总线1 总述    总线是处理器和一个或多个设备之间的通道,在设备模型中, 所有的设备都通过总线相连, 甚至是内部的虚拟"platform"总线。总线可以相互插入。设备模型展示了总线和它们所控制的设备之间的实际连接。1.1 用struct bus_type结构体定义总线    在 Linux 设备模型中, 总线由 bus_type 结构表示, 定义在  : struct b

2013-01-17 19:32:23 389

转载 kobject和kset

1 Kobject1.1 简介Kobject 是Linux 2.6 引入的新的设备管理机制,在内核中由struct kobject数据结构 进行描述通过这个数据结构使所有设备在底层都具有统一的接口,kobject提供基本的对象管 理,是构成Linux2.6设备模型的核心结构,它与sysfs文件系统紧密关联,每个在内核中注 册的kobject对象都对应于sysfs文件系统中的

2013-01-15 11:13:23 641

转载 Sysfs文件系统

Linux2.6内核引入了sysfs 文件系统。sysfs 被看成是与proc同类别的文件系统。sysfs 把连接在系统上的设备和总线组织成分级的文件,使其从用户空间可以访问到。sysfs的挂载过程,她是这样被挂载的。mount -t sysfs sysfs /sys   Sysfs 被加载在/sys/ 目录下,它的子目录包括:• Block:在系统中发现的每个块设备在该目录下对应一个子目

2013-01-15 01:44:48 558

转载 LED驱动程序例子

例子mini2440_leds.c#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include

2013-01-14 01:48:44 447

转载 硬件访问与混杂设备驱动

1、 寄存器与内存       寄存器与内存的区别在哪里呢?       寄存器和RAM 的主要不同在于寄存器操作有副作用(side effect或边际效果):读取某个地址时可能导致该地址内容发生变化,比如很多设备的中断状态寄存器只要一读取,便自动清零。2、 内存与I/O       在X86处理器中存在I/O空间的概念,I/O空间是相对内存空间而言的,他们是彼此独立的地址空间,在

2013-01-13 14:27:32 380

转载 mmap设备方法

Mmap系统调用(功能)Void* mmap(void * add, size_t len , int prot, int flags, int fd, off_t offset)Mmap系统调用(参数)*Addr指定映射的起始地址,通常设为NULL,由系统指定。*Length:映射到内存的文件长度*port:映射区的保护方式

2013-01-12 23:59:25 586

转载 自动创建设备文件

设备文件是非常重要的文件,是应用程序与设备驱动交换数据,控制硬件的桥梁。在驱动程序中open、release的实现过程中其中的一个参数struct inode实质就是设备文件的索引,没有这个索引也就没有后期的各种操作,通常设备文件也被称为设备文件节点。因此没有设备文件后期的各种实现都是多余的。设备文件的创建有两种方法,其中就是在创建文件系统过程中用到的mknod命令。该命令的形式如下:

2013-01-12 23:16:01 547

转载 Poll方法

1、什么是Poll方法,功能是什么?2、Select系统调用(功能)      Select系统调用用于多路监控,当没有一个文件满足要求时,select将阻塞调用进程。      int select(int maxfd, fd_set *readfds, fd_set *writefds, fe_set *exceptfds, const struct timeval

2013-01-12 21:31:15 626

转载 阻塞型字符设备驱动及例子

前一节我们在设计简单字符驱动程序时,跳过了一个重要的问题:当一个设备无法立刻满足用户的读写请求时应当如何处理? 例如:调用read时没有数据可读, 但以后可能会有;或者一个进程试图向设备写入数据,但是设备暂时没有准备好接收数据。应用程序通常不关心这种问题,应用程序只是调用read 或write 并得到返回值。驱动程序应当(缺省地)阻塞进程,使它进入睡眠,直到请求可以得到满足。阻

2013-01-11 14:28:49 441

转载 内核等待队列

在Linux驱动程序设计中,可以使用等待队列来实现进程的阻塞,等待队列可看作保存进程的容器,在阻塞进程时,将进程放入等待队列,当唤醒进程时,从等待等列中取出进程。Linux 2.6内核提供了如下关于等待队列的操作:1、定义等待队列wait_queue_head_t my_queue2、初始化等待队列init_waitqueue_head(&my_queue)3、

2013-01-11 14:26:57 283

转载 ioctl设备控制及例子

ioctl功能-----大部分驱动程序除了需要具备读写设备的能力外,还需要具备对硬件的控制能力。例如,要求设备报告错误信息,改变波特率,这些操作常常通过ioctl方法来实现。用户使用方法-----在用户空间,使用ioctl系统调用来控制设备,原型如下:int ioctl(int fd,unsigned long cmd,......)原型中的点表示这是一个可选的参数

2013-01-10 21:31:16 457

转载 Linux字符驱动设备例子

测试文件app-mem.c#include int main(){ FILE *fp0 = NULL; char Buf[4096]; /*初始化Buf*/ strcpy(Buf,"Mem is char dev!"); printf("BUF: %s\n",Buf); /*打开设备文件*/ fp0 = fopen("/dev/memdev0","r+");

2013-01-10 15:21:38 512

转载 Linux设备驱动之并发控制

在驱动程序中,当多个线程同时访问相同的资源时(驱动程序中的全局变量是一种典型的共享资源),可能会引发"竞态",因此我们必须对共享资源进行并发控制。Linux内核中解决并发控制的最常用方法是自旋锁与信号量(绝大多数时候作为互斥锁使用)。  自旋锁与信号量"类似而不类",类似说的是它们功能上的相似性,"不类"指代它们在本质和实现机理上完全不一样,不属于一类。  自旋锁不会引起调用者睡眠

2013-01-08 21:23:44 324

转载 Linux内核调试技术

一、内核中的调试支持在前面已经建议过:学习编写驱动程序要构建安装自己的内核(标准主线内核)。最重要的原因之一是:内核开发者已经建立了多项用于调试的功能。但是由于这些功能会造成额外的输出,并导致性能下降,因此发行版厂商通常会禁止发行版内核中的调试功能。为了实现内核调试,我在内核配置上增加了几项:Kernel hacking  --->             [*] Magic Sy

2013-01-08 21:03:56 431

转载 字符设备驱动

2013-01-06 00:51:32 326

转载 Linux驱动分类

1.1 Linux设备驱动程序分类  Linux设备驱动程序在Linux的内核源代码中占有很大的比例,源代码的长度日益增加,主要是驱动程序的增加。在Linux内核的不断升级过程中,驱动程序的结构还是相对稳定。在2.0.xx到2.2.xx的变动里,驱动程序的编写做了一些改变,但是从2.0.xx的驱动到2.2.xx的移植只需做少量的工作。  Linux系统的设备分为字符设备(char

2013-01-06 00:34:31 427

转载 proc文件系统

2012-12-30 10:58:45 308

转载 Linux系统调用

4、创建新的应用函数

2012-12-30 10:00:35 267

转载 Linux进程调度

一:Linux进程的四大要素1:一段供进程执行的程序,该程序可以被多个进程执行。2:独立的内核堆栈。3:进程控制快(task_struct:有了这个数据结构,进程才能成为内核调度的一个基本单位接受内核的调度。同时,这个结构还记录着进程所占用的各项资源。4:独立的存储空间:即拥有专有的用户空间,除了前面的内核空间还有用户空间。线程:只有前三条,没有第四条。内核线程:完全没有用

2012-12-29 21:45:54 528

转载 Linux进程控制

2012-12-29 19:52:12 315

转载 内核定时器

在内核中,如果我们想在将来的某个时间点调度执行某个动作,同时在该时间点到达之前不会阻塞当前进程,那么内核定时器是个不错的选择。例如,一些周期性的操作等等。那么到底什么是定时器呢,要实现一个定时器,都需要哪些操作?内核定时器是一个数据结构,它告诉内核在一个用户定义的时间点,使用用户定义的参数来执行一个用户定义的函数。其数据结构是这样的:#include struct timer_li

2012-12-28 14:37:01 318

转载 深入分析 Linux 内核链表

一、 链表数据结构简介链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。通常链表数据结构至少应包含两个域:数据域和指针域,数据域用于存储数据,

2012-12-28 13:49:49 408

转载 Linux内核地址空间分布和进程地址空间

内核地址空间分布直接映射区:线性空间中从3G开始最大896M的区间,为直接内存映射区,该区域的线性地址和物理地址存在线性转换关系:线性地址=3G+物理地址。动态内存映射区:该区域由内核函数vmalloc来分配,特点是:线性空间连续,但是对应的物理空间不一定连续。vmalloc分配的线性地址所对应的物理页可能处于低端内存,也可能处于高端内存。永久内存映射区:该区域可访

2012-12-28 11:12:21 337

转载 进程地址空间与虚拟存储空间的理解

在进入正题前先来谈谈操作系统内存管理机制的发展历程,了解这些有利于我们更好的理解目前操作系统的内存管理机制。一 早期的内存分配机制在 早期的计算机中,要运行一个程序,会把这些程序全都装入内存,程序都是直接运行在内存上的,也就是说程序中访问的内存地址都是实际的物理内存地址。当计算 机同时运行多个程序时,必须保证这些程序用到的内存总量要小于计算机实际物理内存的大小。那当程序同时运行多个程序时,

2012-12-28 10:44:34 356

转载 Linux进程地址空间

我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间。其实,这个4G的地址空间是不存在的,也就是我们所说的虚拟内存空间。那虚拟内存空间是什么呢,它与实际物理内存空间又是怎样对应的呢,为什么有了虚拟内存技术,我们就能运行比实际物理内存大的应用程序,它是怎么做到的呢?呵呵,这一切的一切都是个迷呀,下面我们就一步一步解开心中

2012-12-27 23:41:08 300

转载 Linux内存管理子系统

地址类型:    a.物理地址:出现在CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果    b.线性地址(虚拟地址):    c.逻辑地址:在程序经过编译后,在汇编程序中使用的地址CPU要将一个逻辑地址转换为物理地址,需要两步:首先CPU利用段式内存管理单元,将逻辑地址转换成虚拟地址,再利用页式内存管理单元,把线性地址最终转换为物理地址 段式

2012-12-27 21:24:42 557

空空如也

空空如也

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

TA关注的人

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