linux中prom命令 linux prom

指令寄存器ir从prom接收到指令字后的运行过程如何,起什么作用

计算机每执行条指令都三阶段进行即取指令-----析指令-----执行指令

公司专注于为企业提供网站建设、成都做网站、微信公众号开发、商城开发微信小程序开发,软件按需求定制设计等一站式互联网企业服务。凭借多年丰富的经验,我们会仔细了解各客户的需求而做出多方面的分析、设计、整合,为客户设计出具风格及创意性的商业解决方案,创新互联更提供一系列网站制作和网站推广的服务。

取指令任务:根据程序计数器PC值程序存储器读现行指令送指令寄存器

析指令阶段任务:指令寄存器指令操作码取进行译码析其指令性质指令要求操作数则寻找操作数址

计算机执行程序程实际逐条指令重复述操作程直至遇停机指令循环等待指令

般计算机进行工作首先要通外部设备程序数据通输入接口电路数据总线送入存储器逐条取执行单片机程序般事先我都已通写入器固化片内或片外程序存储器机即执行指令

面我举实例说明指令执行程:

机程序计算器PC变0000H单片机序电路作用自进入执行程序程执行程实际取指令(取存储器事先存放指令阶段)执行指令(析执行指令)循环程

例执行指令:MOV A,#0E0H其机器码74H E0H该指令功能操作数E0H送入累加器

0000H单元已存放74H0001H单元已存放E0H单片机始运行首先进入取指阶段其序:

1 程序计数器内容(0000H)送址寄存器;

2 程序计数器内容自加1(变0001H);

3 址寄存器内容(0000H)通内部址总线送存储器存储器址译码电跟使址0000H单元选;

4 CPU使读控制线效;

5 读命令控制选存储器单元内容(应74H)送内部数据总线取指阶段所该内容通数据总线送指令寄存器至取指阶段完进入译码析执行指令阶段

由于本进入指令寄存器内容74H(操作码)译码器译码单片机知道该指令要数送A累加器该数代码存储单元所执行该指令必须数据(E0H)存储器取送CPU即要存储器取第二字节其程与取指阶段相似PC已0001H指令译码器结合序部件产74H操作码微操作系列使数字E0H0001H单元取指令要求取数送A累加器所取数字经内部数据总线进入A累加器进入指令寄存器至条指令执行完毕单片机PC="0002H"PCCPU每向存储器取指或取数自加1单片机进入取指阶段程直重复直至收暂停指令或循环等待指令暂停CPU条条执行指令完所规定

初始化网卡失败是什么意思

Linux下网卡设置常见问题 (3)

6) 你还可以从Don的ftp站点(在howto中也提及了)获取ne2k的诊断程序,看看你在启动进入Linux后能否用它检测你的网卡。使用“-p 0xNNN”选项告诉它在哪里寻找你的网卡。(缺省情况下只检测0x300,与启动时的探测不同,不会检测其它的地址。)在找到网卡时的输出如下:

--------------------------------------------------------------------------------

Checking the ethercard at 0x300.

Register 0x0d (0x30d) is 00

Passed initial NE2000 probe, value 00.

8390 registers: 0a 00 00 00 63 00 00 00 01 00 30 01 00 00 00 00

SA PROM 0: 00 00 00 00 c0 c0 b0 b0 05 05 65 65 05 05 20 20

SA PROM 0x10: 00 00 07 07 0d 0d 01 01 14 14 02 02 57 57 57 57

NE2000 found at 0x300, using start page 0x40 and end page 0x80.

--------------------------------------------------------------------------------

你的注册值和PROM值可能会不一样。注意,对16比特网卡,所有PROM值都增加一倍,以太网卡地址(00:00:c0:b0:05:65)出现在第一行,加倍后的0x57标识出现在PROM的结尾。

在0x300处没有安装网卡时的输出如下:

--------------------------------------------------------------------------------

Checking the ethercard at 0x300.

Register 0x0d (0x30d) is ff

Failed initial NE2000 probe, value ff.

8390 registers: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff

SA PROM 0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff

SA PROM 0x10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff

Invalid signature found, wordlength 2.

--------------------------------------------------------------------------------

出现值0xff的原因是在读取空I/O口时返回的就是该值。如果在检测的区域内有其它硬件,你可以看到一些非0xff的值。

7) 尝试在运行提供的DOS驱动程序或配置程序之后,从DOS启动软盘(通过loadlin)热启动进入Linux。这可能会进行一些额外的(即非标准的)“魔法”来初始化网卡。

8) 试一下Russ Nelson的ne2000.com包驱动程序,看它能否看见你的网卡 -- 如果还不行,事情就不大妙了。例如:

A: ne2000 0x60 10 0x300

所用参数为软件中断向量、硬件IRQ和I/O地址。你可以从任意的msdos存档中的pktdrv11.zip里找到它 -- 现在的版本大概是11以上了。

5 SMC Ultra/EtherEZ和WD80*3网卡的问题

问题:你得到了如下信息:

eth0: bogus packet size: 65531, status=0xff, nxpg=0xff

原因:是共享内存的问题。

解决方案:最普遍的原因是配置的PCI机器没有映射到ISA内存设备里。因此你读到的是PC的RAM(全都是0xff值),而不是存放接收数据包数据的网卡上的RAM。

另一个容易解决的典型问题是板卡冲突,在此区域有缓存或“shadow ROM”,或者你的ISA总线运行速度高于8Mhz。以太网卡上的内存失效的数目也令人惊奇,所以如果你的以太网卡有诊断程序的话,运行一下。

问题:SMC EtherEZ在非共享内存(PIO)模式下不工作。

原因:老版本的Ultra驱动程序只支持共享内存模式下的操作。

解决方案:版本2.0以上的内核所附驱动程序就支持可编程I/O模式的操作。升级到v2.0以上版本。

问题:老的wd8003或可跳线的wd8013总是得到错误的IRQ。

原因:老的wd8003网卡或可跳线的wd8013兼容卡没有驱动程序可以从中读取设置的IRQ的EEPROM。如果驱动程序无法读到IRQ,就尝试用auto-IRQ发现它。若auto-IRQ返回0,那么驱动程序就给8比特网卡分配IRQ 5,或者为16比特网卡分配IRQ 16。

解决方案: 使auto-IRQ代码无效,并在你的模块配置文件(对于内建的驱动程序则通过启动参数)告诉内核你把网卡跳成了什么IRQ。

问题:SMC Ultra网卡被检测成了wd8013,但IRQ和共享内存地址是错的。

原因:Ultra网卡看起来跟wd8013很相象,如果内核里没有Ultra驱动程序,wd驱动程序就会把ultra误认为wd8013。ultra检测在wd之前,所以一般不会出问题。ultra在EEPROM保存的IRQ和内存地址与wd8013保存的位置不同,所以报告的值是假的。

解决方案:只保留需要的驱动程序重新编译内核。如果你在同一台机器上同时使用wd和ultra网卡,并使用模块,那么首先载入ultra模块就行了。

6 3Com网卡的问题

问题:3c503选择了IRQ N,但其它设备也需要IRQ N。(比如CD ROM驱动程序、 modem等。)可以不编译进内核就解决这个问题吗?

解决方案:3c503驱动程序按照顺序{5, 9/2, 3, 4}检测空闲的IRQ线,从中找到一个未被使用的IRQ。在网卡被ifconfig操作配置时选择中断IRQ。

如果你使用的是模块化的驱动程序,可以用模块参数设置各种情况,包括中断IRQ的值。

下面的语句选择IRQ9、基址0x300、和if_port #1(外部收发器)。

io=0x300 irq=9 xcvr=1

如果驱动程序被编译进了内核,你还可以通过LILO在启动时传递参数来设置同样的值。

LILO: linux ether=9,0x300,0,1,eth0

下面的语句选择IRQ3、检测基址、和缺省if_port #0(外部收发器)。

LILO: linux ether=3,0,0,0,eth0

问题:3c503: configured interrupt X invalid, will use autoIRQ.

原因:3c503网卡只能使用中断IRQ{5, 2/9, 3, 4}中的一个(这些是网卡所能连接的中断线。)如果你使用一个不在其中的IRQ值,就会得到如上的提示。一般情况下,没必要为3c503指定中断值。3c503会在ifconfig配置时使用autoIRQ,并从IRQ{5, 2/9, 3, 4}中选择一个。

解决方案:使用上述的合法IRQ值,或者不指定IRQ以启用autoIRQ。

问题:提供的3c503驱动程序无法使用AUI(粗缆以太网)端口。怎样才能不使用缺省的细缆以太网端口而选择AUI端口?

解决方案:3c503的AUI端口对于内建驱动程序可以在启动时选择,对于模块化驱动程序可以在插入模块时选择。这一选择会覆盖未使用的dev-rmem_start变量的低比特位,所以启动参数:

LILO: linux ether=0,0,0,1,eth0

对内建在内核的驱动程序起作用。

要在载入模块时指定AUI端口,只需把xcvr=1附加在模块选项包含你的I/O和IRQ值的那一行就行了。。

7 非特定网卡的FAQs

Linux与ISA的即插即用以太网卡

要获得最佳效果(问题最少),推荐使用随网卡附的程序(通常是DOS程序)取消PnP机制,并给网卡设置一个固定的I/O地址和IRQ。确定你使用的I/O地址在启动时被驱动程序检测到,如果使用模块,则在/etc/conf.modules中使用io=选项提供地址。你也可以进入BIOS/CMOS设置,把IRQ从PnP改为Legacy-ISA(如果你的计算机有此选项的话)。

注意,运行基于DOS的配置程序一般并不需要安装DOS。可以用DOS软盘启动,然后从提供的软盘上运行它们就可以了。你可以自由地下载OpenDOS和FreeDOS。

如果需要使用PnP以与其它操作系统兼容,你就得每次启动时都使用Linux的isapnptools包配置网卡。你还需要确定为网卡选择的I/O地址被驱动程序检测到,或用io=选项提供I/O地址。

启动时没有检测到以太网卡

出现这个问题的常见原因是人们使用的内核不支持特定的网卡。对于模块化的内核,这一般说明要求的模块尚未被载入,或者需要用模块选项指定其I/O地址。

如果你使用的是模块化的内核,就象大多数用Linux发行版安装的那样,试着用一下该发行版的配置工具来选择网卡所用模块。对于ISA网卡一个较好的主意是,确定网卡的I/O地址,如果配置工具要求选项则把它作为一个选项(如io=0x340)加进去。如果没有配置工具,那么你需要在/etc/conf.modules里添加正确的模块名称(及选项)-- 阅读man modprobe以了解更多的细节。

如果你使用的发行版套件里的预编译内核,那么查看文档以确定你安装的是哪一种内核,以及是否支持你所用的网卡。如果不支持的话,要么试着找一个支持你网卡的内核,要么自己生成一个内核。

只保留所需的驱动程序生成自己的内核是个聪明的主意,因为这会减小内核大小(为应用程序保留宝贵的RAM!),减少打扰敏感硬件的设备检测数目。生成内核并不象听起来那么复杂。你只需要对一些有关你想要哪些驱动程序的问题回答是或不是,其它的事都由程序完成。

另一个主要原因是其它的设备占用了网卡所需的部分I/O空间。大多数网卡在I/O空间里占用了16或32个字节。如果你的网卡设在0x300并要求32个字节,那么驱动程序就要求0x300-0x31f。如果某个其它设备驱动程序注册了哪怕其中一个端口,驱动程序就不会对该地址进行检测,而是静悄悄地进入下一个检测地址。所以,在启动之后,运行一下cat /proc/ioports以确定网卡要求的全部I/O空间都是空的。

还有一个问题就是网卡跳到的I/O地址不是缺省检测的地址。每个驱动程序的检测地址列表可以很容易地在驱动程序源码中的文本注释里找到。即使网卡设定的I/O地址不在检测地址列表上,你也可以在启动时用ether=命令提供(对内建驱动程序),参见传递以太网参数...。模块化的驱动程序可以在/etc/conf.modules里使用io=选项指定一个非缺省检测的地址。

ifconfig报告了错误的网卡I/O地址

这不可能。你只是理解错误。这不是一个Bug,而且报告的数字是正确的。这只出现在某些基于8390的网卡上(如wd80x3、smc-ultra等),实际的8390芯片位于第一个给定I/O端口加上一个偏移量处。此偏移量保存在dev-base_addr里,也就是ifconfig报告的值。如果你想看到网卡使用的全部端口,试一下cat /proc/ioports以得到想要的数字。

PCI机器探测到了网卡,但驱动程序检测失败。

某些PCI的BIOS在上电时没有启用所有的PCI卡,特别是在使用了“PNP OS”的BIOS选项情况下。这一特性是为了支持当前依然使用某些实模式驱动程序的Windows版本。或者禁用该选项,或者升级到一个可以启用被禁用网卡的新驱动程序。

RAM, SRAM ,DRAM ,SDRAM ,ROM ,PROM, EPRM, EEPROM,NAND FLASH, NOR FLASH

先说RAM吧!!

由字面意思就可以理解,SDRAM SRAM DRAM都可以统称RAM,random access memory的缩写,只是前面加了几个修饰词而已。

SRAM:静态随机存储器,就是它不需要刷新电路,不像动态随机存储器那样,每隔一段时间就要刷新一次数据。但是他集成度比较低,不适合做容量大的内存,一般是用在处理器的缓存里面。像S3C2440的ARM9处理器里面就有4K的SRAM用来做CPU启动时用的。

SDRAM:同步动态随机存储器,像电脑的内存就是用的这种RAM叫DDR SDRAM。其集成度非常高,因为是动态的,所以必须有刷新电路,每隔一段时间必须得刷新数据。其存储单元不是按线性排列的,是分页的。一般的嵌入式产品里面的内存都是用的SDRAM。

DRAM:动态随机存储器,SDRAM只是其中的一种吧,没用过,不怎么清楚。

ROM:只读存储器的总称。

PROM:可编程只读存储器,只能写一次,写错了就得报废,现在用得很少了,好像那些成本比较低的OPT单片机里面用的就是这种存储器吧。

EPRM:没见过,不知道什么东西。网上也找不到相关的东西。是EPROM吧?

EPROM:可擦除可编程存储器,这东西也比较古老了,是EEPROM的前身,在芯片的上面有个窗口,通过紫外线的照射来擦除数据。非常之麻烦。

EEPROM:电可擦除可编程只读存储器,比之EPROM就先进点了,可以用电来擦除里面对数据,也是现在用得比较多的存储器,比如24CXX系列的EEPROM。

NANDFLASH和NORFLASH都是现在用得比较多的非易失性闪存。NOR采用的并行接口,其特点读取的速度比之NAND快乐很多倍,其程序可以直接在NOR里面运行。但是它的擦除速度比较慢,集成度低,成本高的。现在的NOR的容量一般在2M左右,一般是用在代码量小的嵌入式产品方面。还有就是在ARM9的开发板上可以看见。

而NAND呢,采用的是串行的接口,CPU从里面读取数据的速度很慢,所以一般用NAND做闪存的话就必须把NAND里面的数据先读到内存里面,然后CPU才能够执行。就跟电脑的硬盘样的。但是它的集成度很高,我的ARM9的开发板上面一块256M的NAND还没有一块2M的NOR的一半大,所以成本很低。还有就是它的擦除速度也的NOR要快。要不然的话那就真的悲剧了,假如擦除一块2M的NOR要一分钟,如果NAND的擦除速度比NOR还要慢,那擦除一块256M的NAND不是要几个小时。NAND一般是用在那些要跑大型的操作系统的嵌入式产品上面,比如LINUX啊,WINCE啊。NOR可是可以跑,可以把LINUX操作系统剪裁到2M以内,一个产品难道只去跑系统吗?用户的应用程序呢!其实很多时候,一个嵌入式产品里面,操作系统占的存储空间只是一小部分,大部分都是给用户跑应用程序的。就像电脑,硬盘都是几百G,可是WINDOWNS操作系统所占的空间也不过几G而已。

我知道的都说了,忘采纳


标题名称:linux中prom命令 linux prom
分享链接:http://pwwzsj.com/article/doocigs.html