当前位置:文档之家› Linux U盘驱动设计

Linux U盘驱动设计

Linux U盘驱动设计
Linux U盘驱动设计

成绩

评阅人

评阅日期计算机科学与技术系

《计算机操作系统》

课程设计

设计题目:Linux下USB驱动设计

班级:

学号:

姓名:

指导老师:

2011年 6 月16 日

实验目的:

实现在Linux下对硬件设备Kingston U盘的驱动;

实验环境:

Linux 系统:Red Hat Enterprise Linux 5

内核:2.6.18-53.el5(系统内核版本)、2.6.16(编写USB驱动内核版本)

实验原理:

1、设备驱动和文件系统的关系

图1显示了Linux内核的体系结构,从图中可以看出应用程序是通过文件子系统来访问底层设备的。一个物理设备,在文件系统中对应一个或多个逻辑结点,设备文件的属性由三部分信息组成:文件的类型(c/b)、主设备号、次设备号,其中设备类型和主设备号结合在一起唯一地确定了设备文件的驱动程序及其界面,而次设备号则说明目标设备是同类设备中的第几个。

2、Linux驱动程序的基本原理

Linux下开发设备驱动程序的原理较之Windows系统来说结构简单层次

清楚。挂在Linux上的每个设备都被描述为设备驱动程序文件,一些与设备有关的设备参数文件被保存在/dev目录下。用户自己提供或编写设备驱动时,也需要在/dev目录下有一个设备文件。设备驱动程序可以分为三个主要组成部分:①自动配置和初始化子程序;②服务于I/O请求的子程序;

③中断服务子程序。骨架关系如图2:

3、USB骨架驱动程序

(1)USB驱动的注册

Linux USB驱动程序需要做的第一件事情就是在Linux USB子系统里注册,并提供一些相关信息,例如这个驱动程序支持那种设备。注册时会通过初始化函数发送一个命令给usb_register。

当 USB 设备插入时,为了使linux_hotplug(Linux 中PCI、USB等设备热插拔支持)系统自动装载驱动程序,就需要创建一个MODULE_DEVICE_TABLE,代码如下:

static struct usb_device_id skel_table [] = {

{ USB_DEVICE(USB_SKEL_VENDOR_ID,

USB_SKEL_PRODUCT_ID) },

{ } /* Terminating entry */

};

MODULE_DEVICE_TABLE (usb, skel_table);

USB_DEVICE 宏,利用厂商 ID 和产品 ID 为我们提供了一个设备的唯一标识。当系统插入一个ID 匹配的USB设备到USB总线时,驱动会在USB core中注册,驱动程序中probe 函数也就会被调用。USB_DEVICE 结构指针、接口号和接口ID都会被传递到函数中。

驱动程序需要确认插入的设备是否可以被接受,如果不接受,或者在初始化的过程中发生任何错误,probe 函数返回一个NULL 值,否则返回

一个含有设备驱动程序状态的指针,通过这个指针,就可以访问所有结构中的回调函数。

当被支持的设备从系统插入或拔出时,会有哪些动作,所有这些信息都传送到USB子系统中。在USB骨架程序中可以这样来完成:

static struct usb_driver skel_driver = {

name: "skeleton",

probe: skel_probe,

disconnect: skel_disconnect,

fops: &skel_fops,

minor: USB_SKEL_MINOR_BASE,

id_table: skel_table,

};

变量name 是一个字符串,它对驱动程序进行描述;probe和disconnect是函数指针,当设备与在id_table中变量信息匹配时,此函数被调用;fops和 minor变量是可选的。大多数USB驱动程序钩住另外一个驱动系统,例如SCSI、网络或tty 子系统。这些驱动程序在其他驱动系统中注册,同时任何用户空间的交互操作通过那些接口提供,比如把SCSI 设备驱动作为USB驱动所钩住的另外一个驱动系统,那么我们对USB设备的read、write等操作,就相应按SCSI设备的read、write函数进行访问。

(2)USB驱动的注销

USB驱动从系统卸载驱动程序时,需要注销USB子系统,即需要usb_unregister 函数处理:

static void_exit usb_skel_exit(void)

{ /* deregister this driver with the USB subsystem */ usb_deregister(&skel_driver); }

module_exit(usb_skel_exit);

(3)注册 devfs

在骨架驱动程序里,最后一点是要注册 devfs。创建一个缓冲区来保存那些被发送给 USB 设备的数据和那些从设备上接受的数据,同时USB urb 被初始化,并且在devfs子系统中注册设备,允许devfs用户访问设备。注册过程如下:

/* initialize the devfs node for this device and register it */ sprintf(name, "skel%d", skel->minor);

skel->devfs = devfs_register

(usb_devfs_handle, name,

DEVFS_FL_DEFAULT, USB_MAJOR,

USB_SKEL_MINOR_BASE + skel->minor,

S_IFCHR | S_IRUSR | S_IWUSR |

S_IRGRP | S_IWGRP | S_IROTH,

&skel_fops, NULL);

如果devfs_register函数失败, devfs子系统会将此情况报告给用户。当然最后,如果设备从 USB 总线拔掉,设备指针会调用disconnect函数。驱动程序就需要清除那些被分配了的所有私有数据、关闭urbs,并且从devfs上注销自己。

devfs_unregister(skel->devfs);

现在,skeleton驱动就已经和设备绑定上了,任何用户态程序要操作此设备都可以通过file_operations 结构所定义的函数进行了。首先,要 open 此设备,在open函数中MODULE_INC_USE_COUNT宏是一个关键,它的作用是起到一个计数的作用,有一个用户态程序打开一个设备,计数器就加1,例如,我们以模块方式加入一个驱动,若计数器不为零,就说明仍然有用户程序在使用此驱动,这时候,不能通过rmmod命令卸载驱动模块。

(4)skel的write、和read函数

它们负责响应驱动程序的读写操作。在skel_write中,一个FILL_BULK_URB函数,就完成了urb 系统callbak和skel_write_bulk_callback之间的联系。

skel_read函数并没有用urb将数据从设备传送到驱动程序,而是用usb_bulk_msg函数代替,它可以在没有创建urbs和urb函数的情况下,来发送和接收数据。在此个过程中,调用usb_bulk_msg 函数并传递一个存储空间,用来缓冲和放置驱动收到的数据,若没有收到数据,则失败并返回一个错误信息。

(5)usb_bulk_msg函数

当对usb设备进行一次读或者写时,usb_bulk_msg函数是非常有用的;但是,需要连续地对设备进行读/写时,就应该建立一个自己的urbs,同时将urbs提交给usb子系统。

实验说明:

1、驱动过程

对于一个硬件,Linux是这样来进行驱动的:首先,我们必须提供一个.o的驱动模块文件(这里我们只说明模块方式,其实内核方式是类似的)。我们要使用这个驱动程序,首先要加载运行它(insmod *.o)。这样驱动就会根据自己的类型(字符设备类型或块设备类型,例如鼠标就

是字符设备而硬盘就是块设备)向系统注册,注册成功系统会反馈一个主设备号,这个主设备号就是系统对它的唯一标识(例如硬盘块设备在/proc/devices中显示的主设备号为3 ,我们用ls -l /dev/had看到的主设备就肯定是3)。驱动就是根据此主设备号来创建一个一般放置在/dev目录下的设备文件(mknod命令用来创建它,它必须用主设备号这个参数)。在我们要访问此硬件时,就可以对设备文件通过open、read、write等命令进行。而驱动就会接收到相应的read、write操作而根据自己的模块中的相应函数进行了。

2、U盘驱动配置

在Linux下这些设备通常都是以一种叫做usb-storage的方式进行驱动,要使用他们必须加载此模块usb-storage。本次驱动开发也就是在

2.6.16内核目录/drivers/usb/storage下修改相应的文件信息,进行

驱动的开发(/drivers/usb/storage目录对应为U盘SISC设备驱动源文件),这样就可以产生类似于usb-storage的驱动文件,即为我们需要的目标文件。

在加载安装类似于usb-storage的驱动文的时候,usbcore.o 和usb-uhci.o或usb-ohci也肯定是必须加载安装的(但一般系统会自动进行安装)。另外,若你系统中SCSI支持也是模块方式,那么scsi_mod 模块和sd_mod模块也要加载安装。

在加载完这些模块后,我们插入U盘或存储卡,就会发现系统中多了一个SCSI硬盘,通过正确地mount它,就可以使用了。

mount /dev/你的U盘设备文件名 /目标挂载目录

实验过程:

1、查看内核源码

查看系统目录/usr/src/kernels,看在这目录下是否有2.6.x 的内核版本源码,并且确保内核源码的完整性。如果这个目录下没有相应的内核源码,那可以到网上下载等同于系统版本或低于系统版本的源码,如果该目录下有系统源码,那么可以跳过以下对下载来的内核源码的配置及编译。本次的Linux系统安装时在该目录下产生的源码并不完整,因此本次用2.6.16版本的内核做USB驱动开发。

2、配置与编译2.6.16版本内核

进入 2.6.16内核版本目录,将系统源码/usr/src/kernels/

2.6.18-5

3.el5-i686目录下的隐藏文件.config拷贝到此目录,隐藏文

件.config为硬件配置与系统设置文件,是安装系统时根据用户的配置

信息自动生成的,为了方便本次开发,直接拷贝到此目录。也可以在内核根目录下执行:make menuconfig(基于文本模式的菜单型配置)进行相应的内核配置。

在内核根目录下执行:make bzImage,实现对整个内核重新编译,这个过程可能要持续一个小时左右。执行结束后,可以看到在当前目录下生成了一个新的文件: vmlinux, 其属性为-rwxr-xr-x。

这样就完成了对2.6.16版本内核的配置与编译,下面在此版本内核中实现对U盘驱动的开发。

3、获取、配置目标U盘出厂信息

将Kingston U盘设备插到主机上,通过cat /proc/bus/usb/devices 得到当前系统探测到的USB总线上的U盘的信息。它包括Vendor、ProdID、Product等。如图3所示:

图3 U盘出厂信息

得到Vendor=0951 ProdID=1624和Manufacturer=Kingston ,Product= DataTraveler G2。

进入linux-2.6.16内核目录,打开drivers/usb/storage/ unusual_devs.h文件,可以看到所有已知的产品登记表,都是以UNUSUAL_DEV(idVendor,idProduct,bcdDeviceMin,bcdDeviceMax,vend or_name,product_name,use_protocol,use_transport,init_function ,Flags)方式登记的。只要填入U盘的信息注册,就可以让驱动去认识和发现它。为了实现我们的U盘驱动,添加如下代码:

UNUSUAL_DEV( 0x0951, 0x1624, 0x0001, 0xffff,

"Kingston",

"DataTraveler G2",

US_SC_SCSI, US_PR_BULK, NULL,

US_FL_FIX_INQUIRY),

4、U盘驱动模块的注册与注销

打开drivers/usb/storage/ usb.c文件,可以看到该文件完成了对

U盘设备的注册、注销等一系列的功能。修改如下代码:

//将U盘驱动的名称改为:myUSBDriver

static struct usb_driver usb_storage_driver = {

.name = "myUSBDriver",

.probe = storage_probe,

.disconnect = storage_disconnect,

#ifdef CONFIG_PM

.suspend = storage_suspend,

.resume = storage_resume,

#endif

.id_table = storage_usb_ids,

};

//修改注册函数,让注册驱动时,在/var/log/message中输出:myUSBDriver Initializing 2011-6-15

static int __init usb_stor_init(void)

{

……

printk(KERN_INFO " myUSBDriver Initializing 2011-6-15

”);

……

return retval;

}

//修改注销函数,注销驱动时输出:myUSBDriver removing 2011-6-15 static void __exit usb_stor_exit(void)

{

……

printk(KERN_INFO " myUSBDriver removing 2011-6-15”);

……

}

5、修改Makefile文件

为了单独编译U盘驱动模块(与内核编译脱离开来,有利于节省编译时间),修改drivers/usb/storage目录下的Makefile文件为:

/***********************************************************/ EXTRA_CFLAGS := -Idrivers/scsi

ifneq ($(KERNELRELEASE),)

obj-$(CONFIG_USB_STORAGE) += myUSBDriver.o

myUSBDriver-obj-$(CONFIG_USB_STORAGE_DEBUG) += debug.o myUSBDriver-obj-$(CONFIG_USB_STORAGE_USBAT) +=

shuttle_usbat.o

myUSBDriver-obj-$(CONFIG_USB_STORAGE_SDDR09) += sddr09.o myUSBDriver-obj-$(CONFIG_USB_STORAGE_SDDR55) += sddr55.o myUSBDriver-obj-$(CONFIG_USB_STORAGE_FREECOM) += freecom.o myUSBDriver-obj-$(CONFIG_USB_STORAGE_DPCM) += dpcm.o myUSBDriver-obj-$(CONFIG_USB_STORAGE_ISD200) += isd200.o myUSBDriver-obj-$(CONFIG_USB_STORAGE_DATAFAB) += datafab.o myUSBDriver-obj-$(CONFIG_USB_STORAGE_JUMPSHOT) += jumpshot.o

myUSBDriver-obj-$(CONFIG_USB_STORAGE_ALAUDA) += alauda.o myUSBDriver-obj-$(CONFIG_USB_STORAGE_ONETOUCH) += onetouch.o

myUSBDriver-objs := scsiglue.o protocol.o transport.o usb.o \

initializers.o $(myUSBDriver-obj-y)

else

PWD := $(shell pwd)

KVER ?= $(shell uname -r)

KDIR := /lib/modules/$(KVER)/build

all:

$(MAKE) -C $(KDIR) M=$(PWD)

endif

ifneq ($(CONFIG_USB_LIBUSUAL),)

obj-$(CONFIG_USB) += libusual.o

endif

clean:

rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions

/***********************************************************/ 执行该Makefile文件,将会产生myUSBDriver.ko的U盘驱动文件。

6、Make产生myUSBDriver.ko驱动文件

在drivers/usb/storage目录下(也可以将storage文件夹拷贝到别的地方)执行命令:make,如下所示:

最后产生了myUSBDriver.ko驱动文件,如下所示:

7、卸掉原来系统中U盘驱动:usb-storage.ko

在/lib/modules/2.6.18-53.el5/kernel/drivers/usb/storage/目录下,将已存在的文件usb-storage.ko修改为usb-storage,因为该目录下的硬件驱动存在依赖关系,即使U盘驱动没有安装,当插入U盘时,该目录下的.ko驱动文件会自动进行安装,这样修改是为了避免自动安装U盘驱动,以便调试我们编写的U盘驱动。执行如下:

插入U盘,执行命令:cat /proc/bus/usb/devices,但是依然会发现我们的U盘乃然使用usb-storage驱动。如下所示

拔出U盘,执行命令:rmmod usb-storage,执行对usb-storage模块驱动的卸载,执行如下所示,由命令:lsmod可知系统中已经没有了usb-storage驱动模块。

插入U盘,这时会发现U盘没有使用任何驱动程序,如下所示

这样就完成了对原来系统中U盘驱动usb-storage.ko的卸载。

8、安装myUSBDriver.ko U盘驱动模块

在storage目录中执行命令:insmod myUSBDriver.ko,这样就完成了对我们U盘驱动模块的安装,如下所示:

执行命令:cat /var/log/messge 查看日志文件,如果输出我们的注册信息:myUSBDriver Initializing 2011-6-15,则表示我们的驱动安装成功,如下所示:

可知,我们的U盘驱动已成功注册安装!

也可执行命令:lsmod查看已安装的模块驱动,如下所示:

9、实现驱动myUSBDriver绑定到我们的U盘

把我们的U盘插入到主机中,执行命令:cat /proc/bus/usb/devices,可以查看U盘使用的驱动,如下所示:

可见我们的驱动已经和我们的U盘绑定在一起了。执行命令:cat /var/log/messge 查看日志文件,如下所示:

可见在/dev/下生成设备文件sdb4,现在就可以对这个设备文件进行挂载,并且打开、读写、关闭等的操作了。

执行命令:ls –la /dev/sdb4,如下

可见,逻辑设备节点sdb4为块类型的设备文件,对应于我们的U盘,该设备文件的主设备号为:8,次设备号为:20,我们可以对块设备文件进行直接存取操作。

同样在窗体界面操作时,我们会发现在计算机中存在了我们的U盘SCSI 设备,如下所示:

我们可以在窗体界面下直接对我们的U盘进行访问。

这样我们的U盘驱动程序的编写就实现了。

10、卸载、注销myUSBDriver驱动

执行命令:rmmmod myUSBDriver 对驱动myUSBDriver进行卸载(当U 盘在使用该驱动时,无法卸载),如下所示:

执行命令:cat /var/log/messge 查看日志文件,如下:

可见,在日志文件中输出:myUSBDriver removing 2011-6-15,即为我们修改的注销函数输出信息,这样更进一步表明了我们驱动开发的正确性。

执行命令:lsmod可以查看到已经没有了myUSBDriver驱动!

11、实现自动加载myUSBDriver驱动模块

为了实现当插上U盘时可以自动加载安装myUSBDriver驱动模块,可以把myUSBDriver驱动模块拷贝到/lib/modules/ 2.6.18-53.el5/ kernel/drivers/usb/storage/目录下,然后在该目录下depmod一下

(depmod用于分析可载入模块的相依性,depmod可检测模块的相依性,供modprobe在安装模块时使用)(modprobe与insmod的区别:modprobe 主要加载系统已经通过depmod登记过的模块,insmod一般是针对具体.o文件进行加载),那么你在插入USB设备的时候,系统就会自动为你加载驱动模块的,当然这个得有hotplug(热插拔的挂载机制)的支持。自动挂载磁盘分区的操作从底层来说,是要内核支持的,2.6 内核的sysfs虚拟文件系统就提供了这一支持,这个文件系统(/sys/) 通常用于反应系统硬件信息,总线上的设备变化、网络设备的变化等事件在这里都能反应出来,这个文件系统的变化配合上内核的hotplug 机制就可以掌握硬件改动相关的信息。如下所示:

确保系统没有安装加载myUSBDriver驱动模块后,插入我们的U盘,这时在计算机中会发现我们的U盘的SCSI 设备,执行命令:cat /proc/bus/usb/devices,如下:

可以发现,系统已经为我们自动加载了myUSBDriver驱动,这样就方便了我们重启电脑后的一系列驱动加载安装的麻烦。同样可以执行cat /var/log/message查看相关的日志信息。

这样就完成了我们需要的自动加载myUSBDriver驱动模块!

实验总结:

本次课程设计,已经完全达到了开发U盘驱动的需求,也为开发别的硬件的U盘提供了在Linux系统下开发的参考,更为开发别的USB设备提供了思路。通过本次课程设计,使我们对Linux内核有了更深的了解,进一步为内核的移植打下了基础,同时在这过程中也让我们体会到了Linux系统源代码开放的极大好处与带来的乐趣。

字符设备驱动程序课程设计报告

中南大学 字符设备驱动程序 课程设计报告 姓名:王学彬 专业班级:信安1002班 学号:0909103108 课程:操作系统安全课程设计 指导老师:张士庚 一、课程设计目的 1.了解Linux字符设备驱动程序的结构; 2.掌握Linux字符设备驱动程序常用结构体和操作函数的使用方法; 3.初步掌握Linux字符设备驱动程序的编写方法及过程; 4.掌握Linux字符设备驱动程序的加载方法及测试方法。 二、课程设计内容 5.设计Windows XP或者Linux操作系统下的设备驱动程序; 6.掌握虚拟字符设备的设计方法和测试方法;

7.编写测试应用程序,测试对该设备的读写等操作。 三、需求分析 3.1驱动程序介绍 驱动程序负责将应用程序如读、写等操作正确无误的传递给相关的硬件,并使硬件能够做出正确反应的代码。驱动程序像一个黑盒子,它隐藏了硬件的工作细节,应用程序只需要通过一组标准化的接口实现对硬件的操作。 3.2 Linux设备驱动程序分类 Linux设备驱动程序在Linux的内核源代码中占有很大的比例,源代码的长度日益增加,主要是驱动程序的增加。虽然Linux内核的不断升级,但驱动程序的结构还是相对稳定。 Linux系统的设备分为字符设备(char device),块设备(block device)和网络设备(network device)三种。字符设备是指在存取时没有缓存的设备,而块设备的读写都有缓存来支持,并且块设备必须能够随机存取(random access)。典型的字符设备包括鼠标,键盘,串行口等。块设备主要包括硬盘软盘设备,CD-ROM等。 网络设备在Linux里做专门的处理。Linux的网络系统主要是基于BSD unix的socket 机制。在系统和驱动程序之间定义有专门的数据结构(sk_buff)进行数据传递。系统有支持对发送数据和接收数据的缓存,提供流量控制机制,提供对多协议的支持。 3.3驱动程序的结构 驱动程序的结构如图3.1所示,应用程序经过系统调用,进入核心层,内核要控制硬件需要通过驱动程序实现,驱动程序相当于内核与硬件之间的“系统调用”。

最新LED显示屏驱动电路设计

L E D显示屏驱动电路 设计

摘要 LED显示屏具有使用寿命长、响应速度快、可视距离远、规格品种多、数字化程度高、亮度高等特点,在信息显示领域已经得到了非常广泛的应用。它利用发光二极管构成的点阵模块或像素单元,组成大面积显示屏。其显示方法有静态显示和动态扫描显示。动态扫描显示耗用硬件资源少,但软件要不断处理,耗CPU。静态显示虽然软件简单但硬件价格稍贵。LED显示屏主要包括发光二极管构成的阵列、驱动电路、控制系统及传输接口和相应的应用软件。而驱动电路设计的好坏,对LED显示屏的显示效果、制作成本及系统的运行性能起着很重要的作用。 本文介绍了点阵式电子显示屏的硬件电路设计原理与软件设计方案,采用51系列单片机芯片,得到了一个能同时显示8个汉字16×16的LED点阵式电子显示屏。 关键词:LED显示屏动态扫描 AT89S52 74HC595

ABSTRACT The LED display monitor has the long of service life, quacking response speed, the far of it’s visual range , many specification variety, high of the digitized, the brightness higher characteristic. It in the information demonstrated the domain already obtained the extremely widespread application. It lattice module or picture element unit which constitutes using the light emitter, composes the big area display monitor. It’s demonstration method has the static demonstration and the dynamic scanning demonstration. The dynamic scanning demonstration consumes the hardware resources to be few, but the software must process unceasingly, and consumes CPU. Although the static state software for display is simple, the hardware price is slightly expensive. The LED display monitor mainly include the array which the light emitter diode constitutes , actuates the electric circuit ,the control system and the transmission connection and the corresponding application software. But actuates the circuit design the quality, to the LED display monitor demonstration effect, the manufacture cost and the system performance characteristic is playing the very vital role. Key words: LED display monitor Dynamic scanning AT89S52 74HC595

linux网卡驱动的配置

RedHat5.1下安装Realtek8168网卡驱动 1.先识别机器上的网卡型号: [root@localhost kernel]#kudzu --probe --class=network 2、使用命令查看kernel包是否都装全了,具体如下: [root@localhost kernel]# rpm -qa | grep kernel 如果装全了,会显示如下几个包: kernel-xen-devel-2.6.18-8.el5 kernel-devel-2.6.18-8.el5 kernel-2.6.18-8.el5 kernel-xen-2.6.18-8.el5 kernel-headers-2.6.18-8.el5 如果没有装全,就在redhat enterprise Linux 5.0第一个ISO的Server文件目录下可以找到对应的包,拷贝到某一具体目录下,进入目录后,用如下命令就可以进行安装: [root@localhost kernel]# rpm -ivh kernel-devel-2.6.18-8.el5.x86_64.rpm

注意:如果不装全这些包,在网卡编译时就会报错说找不到src目录文件。 用如下命令查看GCC是否安装,通常都装上的,还是检查一下比较好。 [root@localhost 2.6.18-8.el5]# whereis -b gcc gcc : /usr/bin/gcc /usr/lib/gcc /usr/libexec/gcc 3、将r8168-8.aaa.bb.tar.bz2解压出来变成r8168-8.aaa.bb文件夹形式,拷到U盘 在redhat下挂载U盘: 插入U盘 [root@localhost kernel]#mount /dev/sdb1 /mnt/usb 4.将r8168-8.aaa.bb文件夹拷都本地,如/home目录下 首先将u盘中的驱动程序包拷贝到/home目录下 [root@localhost media]# cp r8168-8\[1\].011.00.tar.bz2 /home/ [root@localhost media]# cd /home/ [root@localhost home]# ls r8168-8[1].011.00.tar.bz2 5.其次解压驱动程序包 [root@localhost home]# tar -vjxf r8168-8\[1\].011.00.tar.bz2

LCD显示屏的器件选择和驱动电路设计说明

LCD显示屏的器件选择和驱动电路设计 如何实现LCD平板显示屏驱动电路的高性能设计是当前手持设备设计工程师面临的重要挑战。本文分析了LCD显示面板的分类和性能特点,介绍了LCD显示屏设计中关键器件L DO和白光LED的选择要点,以及电荷泵LED驱动电路的设计方法。 STN-LCD彩屏模块的部结构如图1所示,它的上部是一块由偏光片、玻璃、液晶组成的LCD屏,其下面是白光LED和背光板,还包括LCD驱动IC和给LCD驱动IC提供一个稳定电源的低压差稳压器(LDO),二到八颗白光LED以及LED驱动的升压稳压IC。 STN-LCD彩屏模块的电路结构如图2所示,外来电源Vcc经LDO降压稳压后,向LCD驱动IC如S6B33BOA提供工作电压,驱动彩色STN-LCD的液晶显示图形和文字;外部电源Vcc经电荷泵升压稳压,向白光LED如NACW215/NSCW335提供恒压、恒流电源,LED的白光经背光板反射,使LCD液晶的65K色彩充分表现出来,LED的亮度直接影响LCD色彩的靓丽程度。

LCD属于平板显示器的一种,按驱动方式可分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)以及有源矩阵驱动(Active Matrix)三种。其中,单纯矩阵型又可分为扭转式向列型(Twisted Nematic,TN)、超扭转式向列型(Super Twisted Nematic,STN),以及其它无源矩阵驱动液晶显示器。有源矩阵型大致可区分为薄膜式晶体管型(ThinFilmTr ansistor,TFT)及二端子二极管型(Metal/Insulator/Metal,MIM)两种。TN、STN及TFT型液晶显示器因其利用液晶分子扭转原理的不同,在视角、彩色、对比度及动画显示品质上有优劣之分,使其在产品的应用围分类亦有明显差异。以目前液晶显示技术所应用的围以及层次而言,有源矩阵驱动技术是以薄膜式晶体管型为主流,多应用于笔记本电脑及动画、影像处理产品;单纯矩阵驱动技术目前则以扭转向列以及STN为主,STN液晶显示器经由彩色滤光片(colorfilter),可以分别显示红、绿、蓝三原色,再经由三原色比例的调和,可以显示出全彩模式的真彩色。目前彩色STN-LCD的应用多以手机、PDA、数码相机和视屏游戏机消费产品以及文字处理器为主。 器件选择 1. LDO选择。由于手机、PDA、数码相机和视屏游戏机消费产品都是以电池为电源,随着使用时间的增长,电源电压逐渐下降,LCD驱动IC需要一个稳定的工作电压,因此设计电路时通常由一个LDO提供一个稳定的 2.8V或 3.0V电压。LCM将安装在手机的上方,与手机的射频靠得很近,为了防止干扰,必须选用低噪音的LDO,如LP2985、AAT3215。 2. 白光LED。按背光源的设计要求,需要前降电压(VF)和前降电流(IF)小、亮度高(500-1800mcd)的白光LED。以手机LCM为例,目前都使用3-4颗白光LED,随着LED 的亮度增加和手机厂商要求降低成本和功耗,预计到2004年中LCM都会选用2颗高亮度白光LED(1200-2000mcd),PDA和智能手机由于LCD屏较大会按需要使用4-8颗白光LED。NAC W215/NSCW335和EL 99-21/215UCW/TR8是自带反射镜的白光LED,EL系列其亮度分为T、S、R三个等级,T为720-1000mcd,S为500-720mcd,都是在手机LCD背光适用之列。 LED驱动电路设计

Linux串口(serial、uart)驱动程序设计

Linux串口(serial、uart)驱动程序设计 https://www.doczj.com/doc/901645283.html,/space.php?uid=23089249&do=blog&id=34481 一、核心数据结构 串口驱动有3个核心数据结构,它们都定义在<#include linux/serial_core.h> 1、uart_driver uart_driver包含了串口设备名、串口驱动名、主次设备号、串口控制台(可选)等信息,还封装了tty_driver(底层串口驱动无需关心tty_driver)。 struct uart_driver { struct module *owner;/* 拥有该uart_driver的模块,一般为THIS_MODULE */ const char*driver_name;/* 串口驱动名,串口设备文件名以驱动名为基础 */ const char*dev_name;/* 串口设备名*/ int major;/* 主设备号*/ int minor;/* 次设备号*/ int nr;/* 该uart_driver支持的串口个数(最大) */ struct console *cons;/* 其对应的console.若该uart_driver支持serial console, 否则为NULL */ /* * these are private; the low level driver should not * touch these; they should be initialised to NULL */ struct uart_state *state; struct tty_driver *tty_driver; }; 2、uart_port uart_port用于描述串口端口的I/O端口或I/O内存地址、FIFO大小、端口类型、串口时钟等信息。实际上,一个uart_port实例对应一个串口设备

TFT—LCD显示及驱动电路的设计

摘要 TFT—LCD显示及驱动电路设计由视频解码电路,LCD显示电路,电源控制电路和单片机控制电路四个模块组成。视频源产生模拟视频信号,由TVP5150视频解码把模拟视频信号解码输出数字视频信号,由LCD液晶屏显示。对视频解码和液晶显示器的配置是通过单片机完成的。本设计主要针对高校电视技术实践课程设计,应用于视频解码输出教学,实现信号处理可视模块化教学方案。 关键字 视频解码 LCD显示单片机

毕业论文 目录 第一章概述 (3) 1.1 设计背景 (3) 1.2系统框图 (3) 第二章 TFT--LCD液晶显示技术 (1) 2.1液晶基本性质及显示原理 (1) 2.2 PT035TN01—V6液晶显示屏 (1) 2.2.1 PT035TN01—V6模式选择 (1) 2.2.2 PT035TN01—V6屏的交直流电路设计 (1) 2.2.3 PT035TN01—V6屏的SPI电路设计 (2) 第三章图像解码的电路设计 (4) 3.1视频解码芯片的选取 (4) 3.2 TVP5150视频解码芯片 (5) 3.2.1 TVP5150芯片引脚功能 (5) 3.2.2 TVP5150典型寄存器 (5) 3.3 TVP5150视频解码系统配置 (6) 3.3 TVP5150典型电路 (6) 3.3.1 复位电路 (6) 3.3.2 A/D采样电路 (6) 3.3.3 晶振电路 (6) 3.4 TVP5150的具体配置 (7) 第四章 MCU 控制电路 (9) 4. 1单片机概述 (9) 4.2单片机的总线控制 (9) 4.2.1单片机对液晶屏的控制 (9) 4.2.2单片机对TVP5150的控制 (9) 第五章开关电源设计 (11) 5.1设计要求 (11) 5.1.1 电源芯片的选取 (11) 5.1.2功能分析 (11) 5.2 升压电路 (11) 5.2.1升压原理 (11) 5.2.2 升压电路 (11) 5.2 降压电路 (11) 5.2.1降压原理 (11) 5.2.2降压电路 (11) 第六章软件系统 (12) 6.1软件流程图 (12) 6.1.1 PT035TN01—V6液晶显示屏软件流程图 (12) 6.1.2 TVP5150解码电路程序框图 (13) 6.2 TVP5150 IIC程序见附录一 (13) 第七章系统调试与结果 (14) 7.1 硬件调试 (14) 7.1.1 调试方法 (14) 7.1.2 调试数据 (14) 7.2软件调试 (14) 7.2.1 编译环境 (14) 7.2.2 调试波形 (14) 总结 (15) 谢辞 (16) 参考文献 (17) 附录一 (18)

linux UART串口驱动开发文档

linux UART串口驱动开发文档 w83697/w83977 super I/O串口驱动开发 内容简介: 介绍了Linux下的串口驱动的设计层次及接口, 并指出串口与TTY终端之间的关联层次(串口可作TTY终端使用), 以及Linux下的中断处理机制/中断共享机制, 还有串口缓冲机制当中涉及的软中断机制; 其中有关w83697/w83977 IC方面的知识, 具体参考相关手册, 对串口的配置寄存器有详细介绍, 本文不再进行说明. 目录索引: 一. Linux的串口接口及层次. 二. Linux的中断机制及中断共享机制. 三. Linux的软中断机制. 四. TTY与串口的具体关联. 一. Linux的串口接口及层次. 串口是使用已经非常广的设备了, 因此在linux下面的支持已经很完善了, 具有统一的编程接口, 驱动开发者所要完整的工作就是针对不同的串口IC来做完成相应的配置宏, 这此配置宏包括读与写, 中断打开与关闭(如传送与接收中断), 接收状态处理, 有FIFO时还要处理FIFO的状态. 如下我们就首先切入这一部分, 具体了解一下与硬件串口IC相关的部分在驱动中的处理, 这一部分可以说是串口驱动中的最基础部分, 直接与硬件打交道, 完成最底层具体的串口数据传输. 1. 串口硬件资源的处理. W83697及W83977在ep93xx板子上的映射的硬件物理空间如下: W83697: 0x20000000起1K空间. W83977: 0x30000000起1K空间. 因为串口设备的特殊性, 可以当作终端使用, 但是终端的使用在内核还未完全初始化之前(关于串口与终端的关联及层次在第四节中详细), 此时还没有通过mem_init()建立内核的虚存管理机制, 所以不能通过ioreamp来进行物理内存到虚存的映射(物理内存必须由内核映射成系统管理的虚拟内存后才能进行读写访问), 这与先前所讲的framebuffer的物理内存映射是不同的, 具体原因如下: √终端在注册并使用的调用路径如下: start_kernel→console_init→uart_console_init→ep93xxuart_console_init→register_conso

linux下安装编译网卡驱动的方法

linux下安装编译网卡驱动的方法 你还在为不知道linux下安装编译网卡驱动的方法而不知所措么?下面来是小编为大家收集的linux下安装编译网卡驱动的方法,欢迎大家阅读: linux下安装编译网卡驱动的方法 安装linux操作系统后发现没有网卡驱动,表现为 system → Administration → Network下Hardware列表为空。 以下为安装编译网卡驱动的过程,本人是菜鸟,以下是我从网上找的资料进行整理,并实际操作的过程,仅供借鉴。 一.检测linux系统内核版本和网卡类型,相关命令如下: uname -r 查看linux内核版本(uname -a 可显示所有信息)

lsmod 设备加载情况 ls /usr/share/hwdata 查看硬件设备 lspci 查看pci网卡设备ethernet controller 厂商和型号,modprobe **** ****为网卡型号,例如modprobe RTL8101E ,如果出错,说明模块不存在,该型号不识别 我在这一步时查找不到网卡型号,无奈只能由同时采购的其他相同型号预装win7的电脑下查看网卡型号,是个笨办法,嘿嘿…… 找到网卡型号后就到驱动之家下载了相应网卡的linux驱动,这些需要根据自己的实际情况下载,不多说了,重点是后面。 二.下载网卡驱动 Intel_e1000e-1.9.5.zip 为我下载的所需的网卡驱动,这个在linux下需自己编译. 三.安装网卡驱动

1.检测编译需要用到内核的源代码包和编译程序gcc。所以如果没有的话,要先装。 [root@localhost ~]# rpm -qa|grep kernel kernel-xen-2.6.18-8.el5 kernel-xen-devel-2.6.18-8.el5 kernel-headers-2.6.18-8.el5 [root@localhost ~]# rpm -qa|grep gcc gcc-c++-4.1.1-52.el5 libgcc-4.1.1-52.el5 gcc-4.1.1-52.el5 gcc-gfortran-4.1.1-52.el5 如果缺少kernel-xen-devel-2.6.18-8.el5,可以去安装光

USB设备驱动程序设计

USB设备驱动程序设计 引言 USB 总线是1995 年微软、IBM 等公司推出的一种新型通信标准总线, 特点是速度快、价格低、独立供电、支持热插拔等,其版本从早期的1.0、1.1 已经发展到目前的2.0 版本,2.0 版本的最高数据传输速度达到480Mbit/s,能 满足包括视频在内的多种高速外部设备的数据传输要求,由于其众多的优点,USB 总线越来越多的被应用到计算机与外设的接口中,芯片厂家也提供了多种USB 接口芯片供设计者使用,为了开发出功能强大的USB 设备,设计者往往 需要自己开发USB 设备驱动程序,驱动程序开发一直是Windows 开发中较难 的一个方面,但是通过使用专门的驱动程序开发包能减小开发的难度,提高工 作效率,本文使用Compuware Numega 公司的DriverStudio3.2 开发包,开发了基于NXP 公司USB2.0 控制芯片ISP1581 的USB 设备驱动程序。 USB 设备驱动程序的模型 USB 设备驱动程序是一种典型的WDM(Windows Driver Model)驱动程序,其程序模型如图1 所示。用户应用程序工作在Windows 操作系统的用户模式层,它不能直接访问USB 设备,当需要访问时,通过调用操作系统的 API(Application programming interface)函数生成I/O 请求信息包(IRP),IRP 被传输到工作于内核模式层的设备驱动程序,并通过驱动程序完成与UBS 外设通 信。设备驱动程序包括两层:函数驱动程序层和总线驱动程序层,函数驱动程 序一方面通过IRP 及API 函数与应用程序通信,另一方面调用相应的总线驱动 程序,总线驱动程序完成和外设硬件通信。USB 总线驱动程序已经由操作系统 提供,驱动程序开发的重点是函数驱动程序。 USB 设备驱动程序的设计

linux串口测试程序

linux串口测试程序 由于已经完成了第一个HELLO程序,标志着整个编译环境已经没有问题了,下来准备做一下串口测试程序。由于串口驱动开发板已经作好了,所以就作一个Linux串口测试工具简单的数据收发看看。 Linux串口测试工具网上常见的版本都看起来比较烦琐,下面是一个简单一点的,这个程序功能是收到10个字节后会发前7个字节,如果所发的数据的第一个字节是9则退出。 #include #include #include #include #include #include #include #include #define BAUDRATE B9600 #define MODEMDEVICE "/dev/ttyUSB1" int main() { int fd,c=0,res;struct termios oldtio,newtio;//intch;static char s1[10],buf[10];printf("start ……\n");/*打开PC的COM1口*/ fd = open(MODEMDEVICE,O_RDWR|O_NOCTTY);if (fd < 0) { perror(MODEMDEVICE);exit(1);} printf("open……\n");/*将旧的通讯参数存入oldtio结构*/ tcgetattr(fd,&oldtio);/*初始化新的newtio */ bzero(&newtio,sizeof(newtio));/*8N1*/ newtio.c_cflag = BAUDRATE|CS8|CLOCAL|CREAD;newtio.c_iflag = IGNPAR;newtio.c_oflag = 0;/*正常模式*/ /*newtio.c_lflag = ICANON;*/ /*非正常模式*/ newtio.c_lflag = 0;newtio.c_cc[VTIME] = 0;newtio.c_cc[VMIN] = 10; tcflush(fd,TCIFLUSH);/*新的temios作为通讯端口参数*/ tcsetattr(fd,TCSANOW,&newtio);printf("writing……\n"); while(1) { //printf("read……\n");res = read(fd,buf,10);//res = read(fd,s1,10);//strcat(buf,s1);// res = write(fd,buf,7);printf("buf = %s\n",buf);if(buf[0]==9) break;} printf("close……\n");close(fd);/*还原旧参数*/ tcsetattr(fd,TCSANOW,&oldtio);return 0;} 还有一点要注意,就是Linux串口测试工具串口有两种工作模式,即正规模式和非正规模式,如果习惯在串口调试器中用16进制发送,此时串口应该为非正规模式才行。 下面是这两种模式的说明Linux串口测试工具正规模式(CANONICAL或者COOKED) 此模式下,终端设备会处理特殊字符,并且数据传输是一次一行的方式,既按回车后才开始发送和接收数据。例如LINUX的SHELL. Linux串口测试工具非正规模式(NON-CANONICAL

linux串口编程参数配置详解

linux串口编程参数配置详解 1.linux串口编程需要的头文件 #include //标准输入输出定义 #include //标准函数库定义 #include //Unix标准函数定义 #include #include #include //文件控制定义 #include //POSIX中断控制定义 #include //错误号定义 2.打开串口 串口位于/dev中,可作为标准文件的形式打开,其中: 串口1 /dev/ttyS0 串口2 /dev/ttyS1 代码如下: int fd; fd = open(“/dev/ttyS0”, O_RDWR); if(fd == -1) { Perror(“串口1打开失败!”); } //else //fcntl(fd, F_SETFL, FNDELAY); 除了使用O_RDWR标志之外,通常还会使用O_NOCTTY和O_NDELAY这两个标志。 O_NOCTTY:告诉Unix这个程序不想成为“控制终端”控制的程序,不说明这

个标志的话,任何输入都会影响你的程序。 O_NDELAY:告诉Unix这个程序不关心DCD信号线状态,即其他端口是否运行,不说明这个标志的话,该程序就会在DCD信号线为低电平时停止。 3.设置波特率 最基本的串口设置包括波特率、校验位和停止位设置,且串口设置主要使用termios.h头文件中定义的termios结构,如下: struct termios { tcflag_t c_iflag; //输入模式标志 tcflag_t c_oflag; //输出模式标志 tcflag_t c_cflag; //控制模式标志 tcflag_t c_lflag; //本地模式标志 cc_t c_line; //line discipline cc_t c_cc[NCC]; //control characters } 代码如下: int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300, B384 00, B19200, B9600, B4800, B2400, B1200, B300, }; int name_arr[] = {38400, 19200, 9600, 4800, 2400, 1200, 300, 38400, 19200, 9 600, 4800, 2400, 1200, 300, }; void SetSpeed(int fd, int speed) { int i; struct termios Opt; //定义termios结构 if(tcgetattr(fd, &Opt) != 0) { perror(“tcgetattr fd”); return; }

在linux系统下如何安装网卡驱动

2011年研发二部工作 周报月报 作者:赵玉武 时间:2012-6-13

目录 一、整理漏扫系统的结构 (1) 1、整理NetScan目录中的程序。 (1) 2、整理proftpd目录中内容(插件的检测信息)。 (4) 3、整理proxyd目录中的安管(安管平台)。 (8) 二、熟悉Nessus的工作原理 (8) 1、Nessus扫描引擎的工作原理... 错误!未定义书签。 三、整理运行的整个流程.............. 错误!未定义书签。 1、通过客户端下发策略,上传到服务器上。错误!未定 义书签。 2、服务端:接收客户端下发的策略。错误!未定义书签。 3、服务端进行身份的认证....... 错误!未定义书签。

一、整理漏扫系统的结构 网卡是Linux服务器中最重要网络设备。据统计,Linux网络故障有35%在物理层、25%在数据链路层、10%在网络层、10%在传输层、10%在对话、7%在表示层、3%在应用层。由此可以看出,网络故障通常发生在网络七层模型的下三层,即物理层、链路层和网络层。对应于实际网络也就是使用的网络线缆、网卡、交换机、路由器等设备故障。Linux的网络实现是模仿FreeBSD的,它支持FreeBSD 的带有扩展的Sockets(套接字)和TCP/IP协议。它支持两个主机间的网络连接和Sockets通讯模型,实现了两种类型的Sockets:BSD Sockets和INET Sockets。它为不同的通信模型和服务质量提供了两种传输协议,即不可靠的、基于消息的UDP传输协议和可靠的、基于流的传输协议TCP,并且都是在IP网络协议上实现的。INET sockets 是在以上两个协议及IP协议之上实现的。 由于交换机、路由器通常独立于Linux或者其他操作系统。网卡设置故障是造成Linux 服务器故障最主要原因。可能因为硬件的质量或性能、磨损老化、人为误操作、不正确的网络设置、管理问题、Linux软件的BUG、系统受到黑客攻击和Linux病毒等原因造成。 Linux 服务器网卡故障排除的思路是:应当遵循先硬件后软件的方法。因为硬件如果出现物理损坏那么如何设定网卡都不能解决故障。解决问题的方法可以从自身Linux计算机的网卡查起,如果确定硬件没有问题了,再来考虑软件的设定。 1、网卡的选择 一般来说,2.4版本以后的 Linux可以支持的网卡芯片组数量已经很完备了,包括著名厂商如:Intel 以及使用广泛的 RealTek, Via 等网卡芯片都已经被支持,所以使用者可以很轻易的设定好他们的网

linux驱动程序的编写

linux驱动程序的编写 一、实验目的 1.掌握linux驱动程序的编写方法 2.掌握驱动程序动态模块的调试方法 3.掌握驱动程序填加到内核的方法 二、实验内容 1. 学习linux驱动程序的编写流程 2. 学习驱动程序动态模块的调试方法 3. 学习驱动程序填加到内核的流程 三、实验设备 PentiumII以上的PC机,LINUX操作系统,EL-ARM860实验箱 四、linux的驱动程序的编写 嵌入式应用对成本和实时性比较敏感,而对linux的应用主要体现在对硬件的驱动程序的编写和上层应用程序的开发上。 嵌入式linux驱动程序的基本结构和标准Linux的结构基本一致,也支持模块化模式,所以,大部分驱动程序编成模块化形式,而且,要求可以在不同的体系结构上安装。linux是可以支持模块化模式的,但由于嵌入式应用是针对具体的应用,所以,一般不采用该模式,而是把驱动程序直接编译进内核之中。但是这种模式是调试驱动模块的极佳方法。 系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作。同时,设备驱动程序是内核的一部分,它完成以下的功能:对设备初始化和释放;把数据从内核传送到硬件和从硬件读取数据;读取应用程序传送给设备文件的数据和回送应用程序请求的数据;检测和处理设备出现的错误。在linux操作系统下有字符设备和块设备,网络设备三类主要的设备文件类型。 字符设备和块设备的主要区别是:在对字符设备发出读写请求时,实际的硬件I/O一般就紧接着发生了;块设备利用一块系统内存作为缓冲区,当用户进程对设备请求满足用户要求时,就返回请求的数据。块设备是主要针对磁盘等慢速设备设计的,以免耗费过多的CPU时间来等待。 1 字符设备驱动结构 Linux字符设备驱动的关键数据结构是cdev和file_operations结构体。

4位7段数码管驱动电路设计要求

4位7段数码管驱动电路 图1 开发板电路原理图 信号说明

1. iRST_N(异步复位) 当iRST_N信号为低时,Seg7_Driver模块中的所有寄存器异步复位为初值。 2. iCLK 模块的输入时钟40MHz。 3. iSeg_Val[15:0] 7段数码管输入二进制值,0x0~0xF iSeg_Val[15:12],左侧第一位7段数码管的值。 iSeg_Val[11: 8],左侧第两位7段数码管的值。 iSeg_Val[ 7: 4],左侧第三位7段数码管的值。 iSeg_Val[ 3: 0],左侧第四位7段数码管的值。 4. iDot_Val[3:0] 各位7段数码管小数点的显示,值为1表示显示小数点,0表示不显示小数点。 iDot_Val[3],左侧第一位7段数码管的小数点。 iDot_Val[2],左侧第两位7段数码管的小数点。 iDot_Val[1],左侧第三位7段数码管的小数点。 iDot_Val[0],左侧第四位7段数码管的小数点。 5. oDisplay[7:0] 7段数码管的数据信号。4位7段数码管共用数据信号。7段数码管为共阳极连接,各段数据线为0时,对应段发光。 6. oDis_En[3:0] 各位7段数码管的使能信号,低有效。

oDis_En[3],左侧第一位7段数码管的使能信号。 oDis_En[2],左侧第两位7段数码管的使能信号。 oDis_En[1],左侧第三位7段数码管的使能信号。 oDis_En[0],左侧第四位7段数码管的使能信号。 建议的分块: 将整个驱动电路分成Seg7_Ctrl模块与Seg7_Hex2seg模块 Seg7_Ctrl模块负责产生数码管动态显示的控制信号oDis_En的时序 Seg7_Hex2Seg模块负责将二进制值转换成数据码管显示的数据值,包括小数点的值。 注意点: 1. 动态显示过程是利用人眼的视觉残留现象来实现的,应选择适当的数码管扫描频率。可先 选择数码管的扫描显示的刷新率为125Hz(8ms),即每位数码管用2ms。 2. 完成基本功能后,可实验改变刷新率,观察数码管显示的效果,并思考原因。 3. 如果要使得数码管能够显示,A,b,C,n,o等其他字符,模块应该作怎样的修改?

Linux下网卡驱动程序

Linux下8019网卡驱动程序 福建鑫诺通信有限公司陈光平(chenggp_fj@https://www.doczj.com/doc/901645283.html,) 本文以S3C44B0的CPU为例,详细解析了linux下RTL8019网卡驱动程序工作原理,其间知识大多来源互联网络,特别是浙大潘纲的论文,在此不一一列出,此文目的只是让嵌入式linux爱好者得到更多网卡驱动的资料,并获得交流机会,不足之处请指正 (一)、硬件相关部份 1、CPU与网卡的连接方式 (s3c44B0 CPU) (RTL 8019网卡) CPU与网卡接线图 上图为S3c44b0CPU和网卡的接线图,此接法并非固定,如接法不同,则牵涉到很多相应的改动,下面会详细分析不同之处 从硬件部门得到:网卡在CPU的存储空间上接BANK4,即0x08000000(看44B0手册)外部中断号为:EXTINT3 (irqs.h文件获得值为22) 上面两个值可以查CPU手册,或询问硬件设计人员 由上图可以知道以下数据: (1)、网卡与CPU地址线连接错开8位(A0接A8) (2)、总共连线,其实4根就足够用了,因为每根线可以译码4个地址空间,总共是16个地址空间,每个地址空间对应一个寄存器地址,而8019总共就是16个寄存器(3)、一般是跳线模式,不使用9346芯片 1-1 基地址算法 首先8019的基地址是300H(见RTL8019芯片资料:选择IO总线地址),但是有些硬件已在芯片中做过了偏移,比如我们的网卡已做了处理,基址已偏移到0x08000000, 那么因为网卡A0接CPU的A8,表示基地址左移8位,下一个寄存器reg0的地址就是:0x08000100(0000,0000,0001 0001,0000,0000) 还不理解的话我们看另一种接法:

TFT-LCD显示驱动电路设计

目录 1 选题背景 (1) 1.1 TFT-LCD的发展现状 (1) 1.2 课设基本内容及要求 (2) 1.2.1 硬件电路设计 (2) 1.2.2 驱动设计 (2) 1.2.3 基本要求 (2) 2 方案论证 (2) 2.1 总体设计 (2) 2.2 显示原理 (3) 2.2.1 LCD器件结构 (3) 2.2.2 液晶显示原理 (3) 2.2.3 TFT元件的工作原理 (4) 3 过程论述 (6) 3.1 控制电路设计 (6) 3.1.1 时钟电路设计 (7) 3.1.2 复位电路设计 (7) 3.1.3 液晶模块驱动 (8) 3.2 软件部分设计 (8) 3.2.1 主程序 (9) 3.2.2 初始子化程序 (9) 3.2.3 显示子程序 (9) 4 系统调试 (10) 4.1 硬件调试 (10) 4.2 软件调试 (11) 5 总结 (11) 参考文献 (13) 附录1 原理图 (14) 附录2 源程序 (15)

1 选题背景 1.1 TFT-LCD的发展现状 网络和无线通信技术的发展及其产品的迅速普及,全球数字化技术的迅速推进,促进了信息技术与信息产业的蓬勃兴起。显示器集电子、通信和信息处理技术于一体,被认为是电子工业在微电子、计算机之后的又一重大发展机会,具有广阔的市场好良好的机遇。各种平板显示技术成为研究开发的热点,其中薄膜晶体管液晶显示器(TFT-LCD)是目前唯一在亮度、对比度、功耗、寿命、体积和重量等综合性能上全面赶上和超过CRT的显示器件。它的性能优良、大规模生产特性好,自动化程度高,原料成本低廉,发展空间广阔,已迅速成为新世纪的主流产品,是21世纪全球经济增长的一个亮点。 本文围绕设计以单片机作为LCD液晶显示系统控制器为主线,基于单片机AT89C51,采用的液晶显示控制器的芯片是SED1520,主要实现由按键控制的中文显示、图片显示、滚屏以及左右移动功能。同时也对部分芯片和外围电路进行了介绍和设计,并附以系统结构框图加以说明,着重介绍了本系统应用的各硬件接口技术和各个接口模块的功能及工作过程,并详细阐述了程序的各个模块。本系统是以单片机的C语言来进行软件设计,指令的执行速度快,可读性强。 1.2 课设基本内容及要求 题目:64*128 TFT-LCD显示驱动电路设计 1.2.1 硬件电路设计 (1) 显示器与驱动IC(电路)间的接口电路设计; (2) 驱动IC(电路)与MCU间的接口电路设计; (3) 驱动IC、MCU的外围电路设计。 1.2.2 驱动设计 (1) 初始化程序设计 (2) 显示实例设计 (3) 硬件电路与驱动程序的联调、仿真 (4) 实物制作与测试 1.2.3 基本要求 (1) 具有从下向上的滚动显示功能; (2) 实现64bit级灰度调制; (3) 支持SPI接口;

Linux下查看网卡驱动和版本信息

Linux下查看网卡驱动和版本信息 查看网卡生产厂商和信号 查看基本信息:lspci 查看详细信息:lspci -vvv # 3个小写的v 查看网卡信息:lspci | grep Ethernet 查看网卡驱动 查看网卡驱动信息:lspci -vvv # 找到网卡设备的详细信息,包括网卡驱动 # lsmod 列出加载的所有驱动,包括网卡驱动 查看网卡驱动版本 查看模块信息:modifo # 其中包含version信息 或# ethtool-i RHEL 6.3中的网卡驱动版本: # modinfo igb filename: /lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/net/igb/igb.ko version: 3.2.10-k license: GPL description: Intel(R) Gigabit Ethernet Network Driver # modinfo e1000e filename: /lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/net/e1000e/e1000e.ko version: 1.9.5-k license: GPL

description: Intel(R) PRO/1000 Network Driver author: Intel Corporation, # modinfo e1000 filename: /lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/net/e1000/e1000.ko version: 8.0.35-NAPI license: GPL description: Intel(R) PRO/1000 Network Driver # modinfo ixgbe filename: /lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/net/ixgbe/ixgbe.ko version: 3.6.7-k license: GPL description: Intel(R) 10 Gigabit PCI Express NetworkDriver # modinfo r8169 filename: /lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/net/r8169.ko version: 2.3LK-NAPI license: GPL description: RealTek RTL-8169 Gigabit Ethernet driver 查看网络接口队列数 查看网卡接口的中断信息:#cat /proc/interrupts | grep eth0 或# ethtool-S eth0 查看网卡驱动源码的版本号 解压Intel网卡驱动源码,打开解压缩目录下的*.spec文件查看驱动的版本。 例如:解压e1000-8.0.35.tar.gz网卡驱动后,查看e1000.spec文件。

相关主题
文本预览
相关文档 最新文档