自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 网卡驱动之虚拟网卡驱动编写

我们来实现这么一个目的我ping 3.3.3.4的时候,按理说如果是真实网卡的话,我们3.3.3.3的机器,和3.3.3.4的机器。ping 3.3.3.4的时候3.3.3.3的机器会把包发给3.3.3.4,3.3.3.4收到包之后又会把包发给3.3.3.3在驱动程序中用netif_rx用这个函数上报包 它就可以ping得通了。但是我们是虚拟网卡,并没有真正的网线,也没有3.3.3.4

2017-03-31 23:28:03 5606 1

原创 网卡驱动程序框架

我们这里说的是网卡驱动程序,不是网络驱动程序,网络有七层,我们写的只是最底层的东西,网络这么多层,但是最终你还是要操作硬件啊所以上面肯定有个硬件相关层,我们要写的就是硬件相关的驱动程序这一小块。网卡你不需要打开什么设备,你只需要socket编程就行了怎么写1、分配某个结构体2、设置3、注册4、硬件相关的操作然而这个重点在设置这里首先你得提供发包函数 提供

2017-03-30 23:31:14 4208

原创 nandflash驱动之简单编写

参考内核中driver/mtd/nand/s3c2410.c或者driver/mtd/nand/atmel_nand.c先把头文件包含进去我们来看看nand_scan_ident这里面做了什么事情设置位数,因为我们的数据线只有8位所以这里选八位设置默认函数看看这个怎么设置的如果没设置就用默认的,看看这个

2017-03-30 12:37:19 1825

原创 nandflash驱动框架

nandflash驱动框架最上层肯定是应用程——————————app: open read write________________文件系统:文件系统是将对文件的读写转换为对块设备的读写—————————块设备驱动块设备 : 知道怎么优化——————nandflash协议层:知道发什么来读写,擦除,识别——————硬件相关

2017-03-28 23:07:18 1665

原创 nandflash原理及硬件操作

我们先看下nandflash的布线有data0 到data7 八根数据线nandflash是个存储芯片,那我提出请求:读地址a的数据,把数据b写到a地址上去那么我们看原理图只看到data0-data7,没有看到地址引脚,那怎么把地址传给我们的开发板复用,这几个引脚即传数据也传地址怎么分别是数据还是地址呢,有个ALE信号,当ALE是高电平时,传输的是地址但是它

2017-03-24 19:18:15 8893 1

原创 编写块设备驱动之内存模拟磁盘

可以参考一下内核里面的文件在内核里面收索blk_init_queue然后就会发现xd.c和Z2ram.c大概看一眼,看一个去驱动程序从入口开始看,这里有个register_blkdev注册块设备驱动,跟我们字符设备相比少了一个fops,注册块设备已经退化了,它只不过是cat /prok/device 可以看到一些信息。或者前面XT_DISK_MAJOR写为0的时候可以返回一个主设备

2017-03-23 17:31:46 511

原创 块设备驱动程序的框架

我们大概来猜一下它的框架是怎么样的应用程序  open read write一个普通的文件“1.txt”1.txt最终肯定要操作硬件啊,比如硬盘啊 flash等等然后中间是块设备驱动程序,对普通文件的读写肯定要转换成对块设备文件的读写,你要读写哪一个扇区,那谁来把文件的读写来转换成对扇区的读写呢???中间就引入了文件系统ll_rw_block是通用的入口  这ll_rw

2017-03-21 23:52:17 913

原创 块设备驱动的引入

块设备只能以快为单位接收输入和返回输出。假设我应用程序也是open read write,块设备里面也是给它提供open read write函数,然后来操作硬件我们举例来验证1.硬盘硬盘的格式像光盘一样一个一个盘面然后这一面上有一个一个的环像跑到一样的东西,这一环一环一样的东西称为柱面跑道上面有一个一个的块称为扇区,分别是扇区0,扇区1。我们假设有这么

2017-03-21 22:35:31 232

原创 USB驱动程序之鼠标用做键盘

我们还是接着来看看我们的例子程序 usbmouse.c这里它接着判断了他是不是鼠标,得到它的usb_host_interface,interface=intf->cur_alsetting就是当前接口的设置

2017-03-20 23:14:24 1369 1

原创 usb驱动程序初步编写

今天我们的目标是将USB鼠标用做按键比如说左键按下就相当于字母L右键按下就相当于字母S滚轮按下就相当于回车相当于一个输入子系统,怎么做呢??1.分配一个input_device结构体2.设置它能够产生按键类事件,能够产生这三个按键3.注册4.硬件相关的操作使用USB总线下路的收发函数来读写数据我们今天写的驱动程序和以前写的驱动程序有什么差别,差别就是

2017-03-20 18:00:07 14001

原创 USB驱动程序之USB总线驱动程序

USB主机控制器分为三种,一种是UHCI  OHCI  EHCIUHCI规范:intel阵营  告诉你怎么做USB这些东西 适用于低速和全速USB设备  低速一般称为USB1.1 全速一般称为USB2.0 inter做硬件比较牛 所以他的硬件比较复杂点,软件比较简单点 OHCI规范:microsoft阵营做出来的东西 适用于低速和全速 微软软件牛逼点,所以它的软件复杂点,硬件简单点

2017-03-14 21:56:40 3337

原创 USB驱动程序之概念介绍

在windows下,当你拿一个新的PC设备,把他接到PC上面,它会出现发现新硬件,跳出一个框说要你安装驱动程序假设我们USB连的手机,他会提示你发现android phone,然后弹出对话框,提示你安装驱动程序。但是为什么没有驱动程序,它知道是android phone呢???这些信息应该在我们USB驱动程序读出来才对啊,为什么还没读出来就知道它是什么设备。因为这个windows里面已

2017-03-13 22:12:07 781

原创 触摸屏驱动之编写驱动程序

我们打开我们的核心板原理图可以看到这四根引脚分别接在xadcAIN2,3,4,5上面搜索发现不需要配置什么寄存器我们看一看芯片手册上的触摸屏那一章,我们的工作就是阅读那一章然后弄清楚那里面的东西就可以了先来看一看内核自带的触摸屏驱动做了什么事情ts.clock = clk_get(dev, "adc");if (IS_ERR(ts.clock)) {dev_err(

2017-03-13 16:26:12 4250

原创 触摸屏驱动之概念介绍

触摸屏其实我们也是用输入子系统做的,回过头来看看我们输入子系统,触摸屏跟输入子系统一样的,右边的handler用的是edev.c,左边的device我们分配,设置,注册,和硬件操作开发板厂商一般提供了触摸屏驱动,我们在内核代码里面搜索 s3c2410_ts.c我们大概浏览一遍,然后自己来写static int __init s3c2410ts_init(void){retu

2017-03-11 21:38:46 2371

原创 LCD驱动程序(四)测试

我们先把内核里面的LCD驱动程序给去掉步骤1.make menuconfig2.找到里面的Graphics support(图形支持)linux内核配置:Device Drivers  --->Graphics support  ---> Support for frame buffer devices  --->     │       S3C F

2017-03-11 21:37:26 631

原创 LCD驱动程序(3)显存与调色板

我们设置好了LCD控制器,它就会自动的从显存里面取出一个像素的值,然后发送到LCD上去,然后再取出第二个......取到最后面之后有返回到第一个,周而复始。显存必须物理地址连续,LCD没那么聪明,你这个显存必须是连续的。怎么分配呢,我们就不能有kmalloc这种函数了。就要用专用的函数来分配这块内存。来看一看内核自带的一些驱动是怎么来分配这块内存的。我们参考我们内核里面的S3c

2017-03-10 23:47:01 872

原创 LCD驱动程序(1)初步编写LCD驱动程序

先参考内核里面自带的驱动程序,我们只是参考它的头文件而已 /*1.分配一个fb_info结构体*/ 30     s5p_lcd=framebuffer_alloc(sizeof(struct s5p_lcd), &pdev->dev); 31     //这里为什么需要一个大小,内核里面有个经常有个取巧的办法,分配一个结构体    ,本来这个结构体只有这么大,它会额外分配

2017-03-08 16:57:52 1604

原创 LCD硬件操作

我们的CPU里面有一个LCD控制器,可以把LCD理解成一行有很多个像素,有很多行。然后LCD后面有个电子抢,有个喷嘴,把颜色打到这个屏幕上,打完一个像素之后移动到下一个像素,然后喷射出来它怎么知道怎么移动呢,它怎么知道要移动到下一个像素呢。这个就是我们的vclk决定的,每来一个时钟,就移动一个像素。然后打出颜色,颜色的数据从VD0-VD23V就是video 视频 D就是data数据 V

2017-03-08 12:43:03 532

原创 LCD驱动程序层次分析

我们内核里面自带的触摸屏驱动是fbmem.c它肯定不止一个,根据我们驱动的分层思想,它肯定会把共性的东西抽出来我们来看这个驱动的入口函数static int __initfbmem_init(void){proc_create("fb", 0, NULL, &fb_proc_fops);if (register_chrdev(FB_MAJOR,"fb",&fb_

2017-03-08 12:38:39 421

原创 平台总线模型

平台总线模型主要分为3个部分,1.driver 2.device 3.busdevice主要放硬件相关的东西driver里面主要存放的比较稳定的代码我们依然可以查看gpio_keys.c这个代码来学习平台总线是一种虚拟的总线driver这个结构体会通过调用platform_driver_register这个函数platform_driver_re

2017-03-05 21:18:48 524

原创 按键驱动之使用输入子系统架构

有关输入子系统我们可以参考 gpio_keys.c这个代码,注:这只是一个例子,没有实际的作用static struct input_dev *button_dev/*1.分配一个input_device结构体*//*参考gpio_keys.c这个例子,可以知道其分配函数是input_allocate_device*//*2. 设置*//*怎么设置呢,我们来看看这个结构

2017-03-04 18:21:19 585

原创 linux驱动之输入子系统

输入子系统框架,把内核打开 搜索input.c输入子系统的代码在/driver/input目录下面 最上一层,我们称它为核心层要看一个驱动程序我们应该从他的入口函数开始看有一行:err = register_chrdev_region(MKDEV(INPUT_MAJOR, 0),INPUT_MAX_CHAR_DEVICES, "input");//注册字符设备,以前是我们自己写

2017-03-03 11:35:04 510

原创 内核定时器消除按键抖动

按键抖动按键所用的开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,开关不会马上稳定地接通或断开。因而在闭合及断开的瞬间总是伴随有一连串的抖动。按键去抖动的方法主要有两种:一是硬件电路去抖动;另外一种是软件延时去抖。而延时又一般分为两种,一种是for循环等待,另外一种是定时器延时。在操作系统中,由于效率方面的原因,一般不允许使用for循环来等待,只能使用定时器

2017-03-02 21:46:48 982

原创 驱动中的同步互斥阻塞之原子量

目的:只能有一个app打开驱动程序1.原子操作原子操作指的是在执行过程中不会被别的代码路径所中断的操作常用原子操作函数举例atomic_v  v=ATOMIC_INIT(0);  //定义原子变量v并初始化为0atomic_read(atomic_t *v); //返回原子变量的值void atomic_inc(atomic_t *v);//原子变量增加1voi

2017-03-01 18:46:21 317

原创 基于异步通知机制的按键驱动

按下按键是驱动程序通知应用程序应用程序里面要注册信号处理函数驱动程序给应用程序发信号发给谁,这就要应用程序告诉驱动pid了怎么发,是驱动里面调用kill_fasync为了使设备支持异步通知机制,驱动程序涉及以下3项工作1.支持F_SETOWN命令,能在这个控制命令处理中设置filp->f_owner为对应进程ID   不过此项工作已经有内核完成,

2017-03-01 17:40:02 322

空空如也

空空如也

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

TA关注的人

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