VxWorks6.6 pcPentium BSP 使用说明(三):设备驱动
本文主要介绍了pcPentium BSP中包含的驱动程序。包含了官方提供的所有驱动程序,除了aic7888Lib——现在已用得很少的一个AIC-7888 SCSI控制器的驱动介绍。建议重点阅读ataDrv和ataShow部分,其他部分可以略看。
6.2中引进的总线模型。在此模型中,VxBus提供大部分功能,这在以前是需要放入BSP文件sysDev.c中的(例如sysFei82557End.c)对于PCI设备,除了确保在sysPhysMemDesc[]中有足够的DUMMY_MMU_ENTRY定义行,BSP的其他支持是不需要的。对于位于处理器总线的设备,BSP的支持通常仅限于进入hwconf.c的条目表。
。
i8237Dma.c |
8237 DMA驱动程序 |
pcConsole.c | 控制台驱动程序 |
i8042Kbd.c | 英特尔键盘控制器 |
i8048Kbd.c | 英特尔键盘控制器 |
m6845Vga.c |
摩托罗拉M6845 VGA控制器 |
nec765Fd.c | nec765软盘控制器 |
ataDrv.c |
IDE / ATA的硬盘控制器 |
ataShow.c |
IDE / ATA的硬盘控制器显示例程 |
aic7880Lib.o |
AHA-2940 PCI SCSI适配器卡 |
vxbI8253Timer.o | 英特尔8253定时器驱动程序 |
vxbLoApicTimer.o |
英特尔Pentium/2/3/4 APIC / xAPIC定时器库 |
vxbIntelTimestamp.o | 英特尔时间戳驱动程序 |
vxbMc146818Rtc.o |
MC146818 RTC的驱动程序 |
i8259Intr.c | 英特尔8259PIC |
loApicIntr.c |
英特尔Pentium/2/3/4本地APIC / xAPIC驱动 |
loApicIntrShow.c |
英特尔Pentium/2/3/4本地APIC / xAPIC显示驱动程序 |
ioApicIntr.c |
英特尔IO APIC的/ xAPIC驱动 |
ioApicIntrShow.c |
英特尔IO APIC/xAPIC显示驱动程序 |
nullNvRam.c | 无效的NVRAM库 |
nullVme.c | VME总线空库 |
pcmciaLib.c | PCMCIA驱动 |
pcmciaShow.c | PCMCIA驱动显示程序 |
elt3c509End.o |
3COM的3C509 END驱动程序 |
ultraEnd.o |
SMC Elite Ultra驱动程序 |
dec21x40End.o |
DEC 21x4x PCI END驱动程序 |
ne2000End.o |
Novell/Eagle 2000 END驱动 |
lptDrv.c | 并行端口驱动程序 |
Reference Manual
- ns16550
-
用于串口。此驱动程序不支持E7520芯片。详细请参阅第一节第3部分“创建一个BootROM镜像”。
- i8237Dma
-
为ISA
DMA控制器驱动。该驱动用在nec765Fd.c,这是一个很好的可用的范例。 - pcConsole,i8042Kbd和i8048Kbd
-
板载英特尔8042和8048键盘控制器。为了使用该控制器config.h中的INCLUDE_PC_CONSOLE必须使能。宏PC_KBD_TYPE在config.h必须和PC_PS2_101_KBD在i8042Kbd.c中,PC_XT_83_KBD在i8048Kbd.c中一样,被定义。
- m6845Vga
-
摩托罗拉M6845VGA控制器驱动。要使用此控制器,定义config.h中INCLUDE_PC_CONSOLE使能。
- nec765Fd
-
nec765软盘控制器驱动。要使用这个驱动程序,必须使能INCLUDE_FD指令在config.h中。
- ataDrv和ataShow
-
IDE/ATA硬盘控制器驱动。要使用该驱动程序,必须启用config.h中的INCLUDE_ATA指令。请注意,老的INCLUDE_IDE指令被INCLUDE_ATA取代而且vxsys()被替换为mkbootFd()和mkbootAta()。默认情况下,通过设置INCLUDE_ATAVxWorks设置一个ATA硬盘设备在ATA主控制器(ATA控制器0)和一个设备在ATA控制器1。如果一个系统有两个以上的控制器或每个控制器超过一个驱动器,则配置config.h 的参数,而且sysLib.c中的ataResources表也必须进行修改以支持更多的驱动器和控制器。例如,假设系统的ATA控制器0有两个物理驱动器。修改config.h中ATA0_NUM_DRIVES的定义的默认值1为2:/*
config.h */ ... ...#define ATA0_NUM_DRIVES (2)...
请注意,BSP的config.h和sysLib.c预先确定ATA配置参数的值而ataResources表记录至多允许两个控制器。这样一个受限的配置不是每一个目标系统的代表。考虑到在一个系统上,可能有一个硬盘挂载在主控制器,一个CD-ROM设备在从控制器,一个PCMCIA设备在第三个控制器上。默认的ataResources表必须修改以使ataDrv可以初始化并使用系统所有的控制器。特别地,应该定义附加的配置参数,在ataResources表中采用如下类似的方式来初始化第三个控制器。 -
-
...ATA_RESOURCE
ataResources[ATA_MAX_CTRLS] = {
/* ATA controller zero resources */ { /* ATA 0 initializers ... */
},/* ATA controller one resources */ { /* ATA 1 initializers ... */
}, /* ATA controller two resources */ { /* PCCARD_RESOURCE */
{ ATA2_VCC, /* 3-5 volts Vcc */
ATA2_VPP, /* 5-12 volts Vpp */ {
ATA2_IO_START0, /* start I/O address 0 */
ATA2_IO_START1 /* start I/O address 1 */ },
{ ATA2_IO_STOP0, /* end I/0 address 0 */
ATA2_IO_STOP1 /* end I/0 address 1 */ },
ATA2_EXTRA_WAITS, /* extra wait states 0-2 */
ATA2_MEM_START, /* start host mem address */
ATA2_MEM_STOP, /* stop host mem address */
ATA2_MEM_WAITS, /* mem extra wait states 0-2 */
ATA2_MEM_OFFSET, /* mem offset of card address */
ATA2_MEM_LENGTH /* length of memory */ },
ATA2_CTRL_TYPE, /* IDE_LOCAL or ATA_PCMCIA */
ATA2_NUM_DRIVES, /* number of drives on controller */
INT_NUM_ATA2, /* interrupt number of controller */
ATA2_INT_LVL, /* interrupt level of controller */
ATA2_CONFIG, /* device configuration settings */
ATA2_SEM_TIMEOUT, /* semaphore timeout for controller */
ATA2_WDG_TIMEOUT, /* watchdog timeout for controller */
ATA2_SOCKET_TWIN, /* socket number for twin card */
ATA2_POWER_DOWN /* power down mode for this controller */ } };
... -
-
该表的初始值包含定义在BSP文件config.h中。
-
ataResources表的大小和ataDrv支持的ATA控制器数量,由$WIND_BASE/target/h/drv/hdisk/ataDrv.h文件中的ATA_MAX_CTRLS定义。默认ATA_MAX_CTRLS的值设置为2的情况下ataDrv将支持最多2个控制器。当ataResources表被修改为指定两个以上的控制器,如上面的例子中ATA_MAX_CTRLS被重新定义$WIND_BASE/target/src/drv/hdisk/ataDrv.c文件应在重新生成vxWorks镜像前被重新编译以使用新的配置。
-
vxbI8253Timer
-
这个库包含一个用于操作Intel定时器8253及其兼容定时器芯片的的板级独立接口。默认情况下在hwconf.c中只有计数器0被配置。如果使用其他定时器,i8253DevResources
[]需要做如下修改。 -
-
struct
hcfResource i8253DevResources[] = {
{ "regBase", HCF_RES_INT, {(void *)PIT_BASE_ADR} }, -
{ "clkFreq", HCF_RES_INT, {(void *)PIT_CLOCK} },
{ "intr0", HCF_RES_INT, {(void *)INUM_TO_IVEC (INT_NUM_IRQ0)}},
{ "intr0Level", HCF_RES_INT, {(void *)PIT0_INT_LVL}},
{ "intr1", HCF_RES_INT, ....................................},
{ "intr1Level", HCF_RES_INT, ...............................},
{ "intr2", HCF_RES_INT, ....................................},
{ "intr2Level", HCF_RES_INT, ...............................},
{ "clkRateMin", HCF_RES_INT, {(void *)SYS_CLK_RATE_MIN} },
{ "clkRateMax", HCF_RES_INT, {(void *)SYS_CLK_RATE_MAX} },
{ "regInterval",HCF_RES_INT, {(void *)PIT_REG_ADDR_INTERVAL} }
};
作为为什么考虑一个8253兼容设备如何整合到系统如此重要的一个例子,考虑这些设备在消费者那通常是如何应用的。The
8253的兼容芯片通常包含三个定时器。通常情况下,所有三个定时器通过一个14.31818
MHz的板载晶振除以12,以产生1.19318 MHz的时钟频输入给定时器。桌面系统下每个通道的定时器输出往往如如下方式连接: -
8253 +---------------+ | Timer 2 | from bit 0 | output+------> to speaker circuitry of port 61h ----+->gate | | | 1.19318 MHz ----+->clk 2 | | | +---------------+ | Timer 1 | +5 V | output+------> DRAM refresh (logic 1)--+----+->gate | | | | 1.19318 MHz ----+->clk 1 | | | | | +---------------+ | | Timer 0 | | | output+------> to IRQ0 (timer interrupt) +----+->gate | | | 1.19318 MHz ----+->clk 0 | | | +---------------+
-
正如图所示,定时器通道2的输出直连接到扬声器。定时器2的输出没有连接到8259
PIC(Programable Interrupt Control可编程中断控制器)或其他中断控制器。从定时器通道1的输出提供给DRAM刷新。因此,该定时器一旦被编程分配给系统DRAM就不可以被操作。因为上面例子中定时器通道0被连接到中断控制器,而不是作为系统的关键功能时间基准(如DRAM的刷新),所以定时器0是作为系统可编程的辅助时钟的好的候选。上面的例子只是8253兼容定时器设备整合到系统的一种可能的方式。有些系统板可能将所有的定时器输出通道都连接到了中断控制器。不是每个系统都会将定时器输出通道连接到DRAM刷新或扬声器。再次强调,我们建议用户查阅目标系统的说明文档以了解具体系统的定义需求。 - -
-
这些宏SYS_CLK_RATE_MIN,SYS_CLK_RATE_MAX,AUX_CLK_RATE_MIN,和AUX_CLK_RATE_MAX必须被定义以提供给sys[Aux]ClkRateSet()校验参数。
- -
-
宏PIT_CLOCK也必须定义为i8253的时钟频率。
- vxbMc146818Rtc
-
这是实时时钟驱动程序(基于摩托罗拉MC146818)。
- vxbIntelTimestamp
-
这是英特尔芯片组时间戳驱动;在使用时间戳功能,必须定义config.h中的宏INCLUDE_TIMESTAMP。
- vxbLoApicTimer
-
这个库包含操作英特尔P6(PentiumPro,
II, and III)和P7(Pentium4)系列处理器本地APIC/xAPIC 定时器的规则并提供板级独立的接口。 - -
-
宏APIC_TIMER_CLOCK_HZ也必须定义为指示本地APIC/xAPIC定时器的时钟频率。
- i8259Intr
-
Intel
8259A可编程中断控制器(PIC)驱动。 - loApicIntr
-
英特尔P6(PentiumPro,
II, and III)和P7(Pentium4)系列处理器本地APIC/xAPIC驱动程序。此驱动程序即用于Virtual Wire Mode(定义在config.h中的VIRTUAL_WIRE_MODE))也用于Symmetric
IO Mode(定义在config.h中的SYMMETRIC_IO_MODE)。 loApicInit()初始化本地APIC/xAPIC,扫描规范指定的特定内存区域以确定基地址。它使用BSP中定义的LOAPIC_BASE和IOAPIC_BASE如果不能在MP配置表中找到地址。扫描内存区域由pc.h中的两对宏BIOS_ROM_START和BIOS_ROM_END,EBDA_START}和EBDA_END定义。 - ioApicIntr
-
英特尔P6(PentiumPro,
II, and III)和P7(Pentium4)系列处理器本地APIC/xAPIC驱动程序。此驱动程序用于Symmetric IO模式(定义在config.h中的SYMMETRIC_IO_MODE)。ioApicInit初始化IO
APIC/xAPIC存储在redTable[]中的信息。redTable[]有三个部分——lsw、vectorNo和mask。第一个部分,lsw,存储IO
APIC/xAPIC重定向表的低位字符(least significant word)。这包括触发模式,中断输入引脚的极性,目标模式和交付模式。第二个部分,vectorNo,是重定向表的vectorNo。第三部分,mask,应该为0被ioApicIntLock()和ioApicIntUnlock()用来保存中断掩码的状态。 - nullNvRam
-
这个库包含了对断电缺乏断电非易失性存储芯片(NvRAM)的系统提供虚拟NvRAM的操作指令。
-
对于没有NvRAM的系统,宏NV_RAM_SIZE应定义为NONE。
- nullVme
-
这个库包含板卡不包括在任何常用总线指令的空指令。
- pcmciaLib和pcmciaShow
-
PCMCIA驱动。为了使用PCMCIA卡config.h的INCLUDE_PCMCIA指令必须启用。该驱动目前支持三张卡。要使用ATA
PC卡,使能INCLUDE_ATA;要使用SRAM PC卡,使能INCLUDE_SRAM;要使用3Com
Etherlink III PC卡,使能INCLUDE_ELT。默认情况下,当INCLUDE_PCMCIA使能时所有的这三种卡都能够支持。 - USB支持
-
该BSP提供USB
1.1和2.0的支持。
VxWorks6.6 pcPentium BSP 使用说明(三):设备驱动的更多相关文章
- VxWorks6.6 pcPentium BSP 使用说明(一):基本概念
"VxWorks6.6 BSP 使用说明"将发布pcPentium和idp945两个系列的BSP的使用说明.每个系列约5篇文章.之后还将发布由这两个官方提供的BSP的实战移植方法. ...
- VxWorks6.6 pcPentium BSP 使用说明(二):创建启动盘
本篇介绍从Solaris.Linux.Windows或VxWorks创建VxWorks启动盘的方法. 从Solaris或Linux创建启动盘 使用Solaris或Linux自带的工具/usr/bin/ ...
- linux设备驱动归纳总结(三):7.异步通知fasync【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-62725.html linux设备驱动归纳总结(三):7.异步通知fasync xxxxxxxxxxx ...
- linux设备驱动归纳总结(三):6.poll和sellct【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-61749.html linux设备驱动归纳总结(三):6.poll和sellct xxxxxxxxxx ...
- linux设备驱动归纳总结(三):5.阻塞型IO实现【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-60025.html linux设备驱动归纳总结(三):5.阻塞型IO实现 xxxxxxxxxxxxxx ...
- linux设备驱动归纳总结(三):4.ioctl的实现【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-59419.html linux设备驱动归纳总结(三):4.ioctl的实现 一.ioctl的简介: 虽 ...
- linux设备驱动归纳总结(三):3.设备驱动面向对象思想和lseek的实现【转】
本文转自自:http://blog.chinaunix.net/uid-25014876-id-59418.html linux设备驱动归纳总结(三):3.设备驱动面向对象思想和lseek的实现 一. ...
- linux设备驱动归纳总结(三):2.字符型设备的操作open、close、read、write【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-59417.html linux设备驱动归纳总结(三):2.字符型设备的操作open.close.rea ...
- linux设备驱动归纳总结(三):1.字符型设备之设备申请【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-59416.html linux设备驱动归纳总结(三):1.字符型设备之设备申请 操作系统:Ubunru ...
随机推荐
- 安装golang的mongodb驱动mgo速记
这里介绍的方法只适用于Centos平台,测试版本为centos 6.5 下载源码安装实在麻烦,这里采用比较简单的方法给GO安装mongodb驱动 安装mgo之前,需要先安装bzr yum -y ins ...
- 关于dom4j解析xml
一:相关jar包 dom4j-1.6.1.jar 二:用例xml文件 三:解析 注:可能有的小白不知道如果获取节点,so,you can: for (Iterator<Element> i ...
- Android端生成META-INF信息文件的Gradle插件 RapidMetaInfPlugin
来源博客:Wang Jie's Blog 本文链接:<http://blog.wangjiegulu.com/2018/02/05/Android端生成META-INF信息文件的Gradle插件 ...
- Redis安装和基础介绍
一:初识Redis Redis是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型.Redis提供了5种不同类型的数据结构,各式各样的问题都可以很自然地映射到 ...
- Java生产者消费者
简单的生产者.消费者,一个数据缓冲区,一个或者多个生产者把数据放入缓冲区.一个或者多个消费者将数据从缓冲区取走.该缓冲区是一个数据共享,必须进行同步处理,如果缓冲区是满的,生产者将不能放数据,同理如果 ...
- 【Tools】ubuntu16.04安装搜狗输入法
Ubuntu16,04 安装搜狗输入法 1.下载搜狗输入法的安装包 下载地址为:http://pinyin.sogou.com/linux/ 2.按键Ctr+Alt+T打开终端,输入以下命令切换到下载 ...
- 设置修改CentOS系统时区
一.时区 1. 查看当前时区date -R 2. 修改设置时区方法(1)tzselect方法(2) 仅限于RedHat Linux 和 CentOS系统timeconfig方法(3) 适用于Debia ...
- 想玩 BGP 路由器么?用 CentOS 做一个
在之前的教程中,我对如何简单地使用Quagga把CentOS系统变成一个不折不扣地OSPF路由器做了一些介绍.Quagga是一个开源路由软件套件.在这个教程中,我将会重点讲讲如何把一个Linux系统变 ...
- Windows 桌面和文件夹的右键->打开命令行窗口
Windows 桌面和文件夹的右键->打开命令行窗口 1.先按下shift,再点鼠标右键运行CMD,(不是管理员权限) 上图是我已经加了右键的,并且 系统设置了 ps代替cmd,所以是“在此处 ...
- [求助][SPOJ MARIOGAM]-高斯消元(内含标程,数据等)
小蒟蒻开始做概率的题之后,遇到了这道题,然而,他发现自己的程序调试了无数次也无法通过,系统总是返回令人伤心的WA, 于是,他决定把这一天半的时间收集到的资料放在网上, 寻求大家的帮助, 也可以节省后来 ...