Silver之墨尔本
也许一个人的生活是孤独的,但同时也是值得品味的

My Links

Blog Stats
  • Posts - 138
  • Stories - 0
  • Comments - 293
  • Trackbacks - 0
News
  • Visit No.

     

    MCSE 2003
    Security Certificated

     

    CCNA Certificated

     

    Novell Administrator
    Certificated

     

    ITIL Foundation
    Certificated

    Google

存档

日记 分类

 
其实学习就是这么一回事。当你给卡在某处,只要你不give up, 你就会找到新的突破口。所以,有相当部分学习Linux学的好的人是偏执狂。
--------------Silver

星期一:
今 天似乎有了新的突破。关键是找到了一个不错的教材。那就是IBM学习教程。网上有2个版本。一个是中文版,一个是英文版。偶早就下了中文版,但是不是很喜 欢那种上来就教cmd的教程。所以翻了几页就没有看下去。今天终于注册英文版本成功。网上下了英文的101下来看。PDF文档。还是相当不错的。

看来接下来我就要以这个101为学习outline了。上个周末是有朋友到墨尔本来玩,偶陪了2天。2天开了近700公里。又玩又吃,现在人困马乏....希望效率能维持住原来水平。

星期三:
今 天发现奇怪的事情,IBM的中文学习资料和英文的学习资料竟然大相径庭!!唯一的特征是大家都和简炼。 网上有朋友说偶的笔记写的比较乱,偶看看,也确实很乱。因为自己的思路就是很乱。似乎感到Linux就是要多看多看,把什么都装到脑子里,然后再理出头 绪。代价自己是自己的脑容量大,CPU够强!!


偶决定还是从英文版入手。中文版本也兼看。双管齐下......

以下是偶对英文版本的翻译。同时也带有自己的理解,如果有问题,请提出....


英文版 LPI-101-P1
BIOS settings:
BIOS(Basic Input Output System) 是一个用来在机器启动的时候初始化的程序。BIOS是存放在一个ROM里面,即使掉电,程序(注意,不是数据)也不会丢失。 在早期的时候,ROM芯片是固定焊接在主板上的。如果你要升级BIOS,你必须换掉那个芯片。新的BIOS是存放在EEPROMS (Electrically Erasable Programmable Read only Memories) 上面。新的BIOS里面的程序可以通过用软盘来刷新。最近,你可以发现BIOS是存放在Flash Memory里面,也就是我们在相机里面用的SD卡和类似于优盘的这种东西。这种媒介同样可以方便的双薪。

大家都知道,BIOS提供一些选项你可以来开启或者关闭某些功能。比如说,屏蔽板载声卡等。当一个系统加电执行(POST,Power on self  Test)的时候,有些系统会提示按某个KEY来进入设置。

Buses, ports, IRQs and DMA
首 先,我们来说一下总线的分类。PCI(Peripheral Component Interconnect) 和早期的ISA(Industry Standard Architecture). ISA总线支持8-bit和16-bits的卡,而PCI则支持32-bits的设备。 当然了,现在市场上还有AGP(Accelecrated Graphics Port) ,AGP是建立在PCI 2.1总线基础上特殊的插槽。专门为了需要高速带宽和快速响应的图像卡设计。当然了,现在最新的还是PCI EXPRESS这个总线已经达到了PCI总线。 知道了总线,我们现在再来看文件系统的/proc/pci。我们 以后会介绍Linux的文件系统。现在,先让我们来看看/proc。首先,这个不是一个真正的在磁盘上的文件目录(这里我用文件目录,而不是文件系统,觉 得比较能够容易理解)。 在这个文件系统里面, 文件/proc/pci包含了这台机器上PCI总线的设备。 你也可以用命令lspci来得到简略的信息。如果你运行cat /proc/pci,你就可以看到PCI总线的情况。
lspci是存放在/sbin/lspci里面

-------------注意:
             在最新的fedora 7系统里面,整个/proc也发生了改变。在/proc下面,没有pci这个文件。/proc下面有bus目录。里面有input,pccard, pci,usb。偶还没有找到如何找出显示设备的虚拟文件。不过,lspci的命令依旧可以使用。
--------------注意完毕

IO 端口
当 一个CPU需要和附属设备沟通的时候,就必须经过IO PORTS,或者就只是简单的PORT。当CPU想要读取或者控制一个设备的时候,它是对那个端口进行操作。 大多数设备都是占用了超过一个以上的端口。一般都是2的倍数。数据传输通常是每次传送1个或者两个字节。设备是无法共享端口的,因此,如果你有ISA卡, 你就必须保证每个设备都有它们自己的端口或者被指派的端口。在最早的时候,通常是通过设置ISA卡上面的硬件跳线来完成选择端口的。后来,ISA卡开始使 用一个叫做PNP(plug and play)的系统。PCI卡都是使用PnP的。

在/PROC下面,有一个ioports的虚拟文件。使用cat /proc/ioports 可以打开文件查看端口。所有的端口都是用十六进制来进行标号。你可以看到键盘端口,并行端口,串行端口,一起显示端口等。

Interrupts(中断)
那 么,CPU是如何知道什么时候数据传输完毕,或者什么时候数据可以被读取呢? 一般来说,系统中会有一个相应的寄存器来决定是否可以读取IO端口。但是,这样带来两个问题。1)CPU必须花费大量的时间来检测这些寄存器。2)如果有 一些数据是有时效性的(比如Modem接受数据,如果数据不在规定时间内读取,那么modem的buffer就会给下一个数据所覆盖),CPU如何知道什 么时候可以读取呢?
因此,为了解决上述的问题,我们引入了中断这个概念。中断也称为IRQ(Interrupt Requests). 当有事件需要CPU关注的时候,设备就会引发一个中断,CPU就会中断当前的工作来处理这个事务。
IRQ的号码是十进制从0到15(16个中断). 一般来说,每个设备都是拥有自己的私有中断。比如说,IRQ5就是经常被声卡或者第二个并行口所使用。如果你想要同时使用这两个设备,你就必须通过修改设备设置使其使用其他中断(比如IRQ15)

现 在,PCI设备都是共享IRQ,因此如果有一个中断发生,一个中断程序(Interrupt handler) 就会检查这个中断是不是它的,如果不是,就传给下一个在中断链上面的中断程序。 大家可以使用dmesg | grep -i irq 来查看PCI: Sharing IRQ N with 00:1d.0

DMA:
我们前面提到在通过IO端口和外设进行沟通的时候,通常是传 送1个或2个字节。 对于一个高速设备来说, 服务型中断可能占用了许多的CPU的时间。 一个更为高速的方法就是使用DMA(Direct Memory Access),  DMA控制器可以直接将外设的信息读入RAM。 你可以运行cat /proc/dma 来查看DMA信息。

Plug and Play(PnP)
早 期的PC分配了固定的端口和IRQ给特殊的设备。比如键盘和并行口。但是,当增加2个同样的设备的时候,就回遇到困难。比如说,当你安装2个Modem的 时候,你应当使用COM1和COM2端口(Linux里面称为ttys0 和ttys1). 早期的一些modem允许你通过设置跳线来选择COM口。后来,PNP就发明了。PNP就是让设备来告诉系统和BIOS,它会占用那些资源。 一些新的ISA设备采用了PNP,PCI设备都是采用PNP进行设计的。
如果你在安装ISA PNP的设备,你必须避免IRQ的冲突。端口是不可以共享的。 每个设备必须拥有独立的端口。 DMA通道也是同样的道理。

在2.4 核心以前的版本,我们用一个叫做isapnptools的程序来允许用户配置Pnp设备。 这个isapnp一般回调用/etc/isapnp.conf来配置Pnp设备。一般这些设置应当在Linux启动过程中完成。 你也可以用pnpdump来扫描Pnp设备并输出一些列你的pnp设备所需求的资源。
在2.4后期, Pnp已经被整合入了Linux核心,从RH7.3开始,isapnp就不再存在了。 你可以使用ispnp命令(其实在F7里也已经不存在了)来显示关于PNP的设备。如果BIOS能够发现PNP设备,那么你就可以在/proc里面看到。 你可以在/proc/bus/pnp里面找到(这个偶也没有找到,不知道藏在哪里,不过我到是用dmesg找到一个鼠标)

IDE 硬盘
首 先我们来看一下什么是IDE,IDE是(Intergrated Drive Electronics)的简写。它也被叫做ATA硬盘(以IBM PC-AT命名)。另外一个设备叫做SCSI(Small Computer System Interface), 主要流行在服务器上。
IDE主要是成本低,SCSI则可以链接大量的设备,以及在总线上的高速访问。
另外一个新的类型就是SATA(Serial ATA). SATA已经达到了ATA的极限。

BIOS和IDE 硬盘尺寸
IDE 硬盘是安装扇区分割。每个数据单位是512字节。一个硬盘可能含有几个磁碟,每个磁碟都有柱面。读取磁碟的是磁头。要找到一个特定的扇区,磁碟必须把磁头 移到某个柱面,然后选择磁头(如果有多个的话),然后等到正确的扇区转到磁头下,读取即可。 由此产生了称为CHS地址(Cylinder,Head, and Sector)。 也称为磁盘几何学。
不幸的是,在早期的BIOS中,对C,H,S的值是有限制的。知道1990年,磁盘容量开始飞速增长,突破了BIOS和DOS所造成的限制。 虚拟CHS值由此产生。虚拟CHS要么有BIOS实现,或者一些底层软件来实现。
但是,及时没有BIOS和DOS的限制,CHS的设计最高能够容纳65536柱面,16个磁头,和255扇区/磁道。这个限制大约规定了最高不超过137GB的容量。
因此,解决方案是,系统不再询问CHS的值,而是询问LBA(Logical Block Address)的值,有磁盘自己来找到想对应的扇区来进行读写。这个过程是在1996年,采用了ATA-2标准。

就 像我们前面提到的, 一个系统要启动,就必须要借助BIOS。因此,从一个硬盘启动,需要BIOS能够懂得磁盘的分布和位置,并且装载初始化程序,由此来启动系统软件(比如 WINDOWS)。 一个旧版本的BIOS是不懂得LBA磁盘,因此会将启动区域限制在第一个1024的柱面里面,或者BIOS能够理解的磁盘几何学的第一个1024柱面。 虽然碰到的机会可能不多,但是,你还是有可能将/boot目录设置在一个分区的第一个1024柱面里面。 及时你的BIOS可以从磁盘的最后一个柱面来启动机器,很多Linux软件还是会警告你不要将/boot设置在超过1024柱面的位置。

大家可以使用hdparm -I /dev/hda 来查看信息(在F7里面无法使用)。另外一个要注意的是,PC将会从系统的第一个IDE硬盘启动。系统回从MBR(master boot record)里面读取一小段代码,这个代码里面记载了从那个分区驱动。

Linux disk names:
现 在让我们来看一下Linux另外一个重要的概念。 /dev文件系统。 这个/dev和/proc是一样的,它是一个伪文件系统,换句话会说,它描述了在Linux系统上挂载的设备。 在/dev的文件系统里面,你会找到整个类似于/dev/hda,或者/dev/hda5,/dev/sda,/dev/sdb1等到。你也会找到其他的 设备。 我们现在就只看/dev/hd 和/dev/sd。
那些以/dev/hd为开始的设备,比如/dev/hda等就是指IDE硬盘。第一个IDE控制器连接的硬盘称为/dev/hda,第二个称为/dev/hdb。以此类推。
大 家可以用dmesg |grep -i sda 找到BIOS认出的设备(偶的是挂接的SATA)。一个IDE硬盘可以有最多4个主分区和没有限制的逻辑分区。举例来说,一个硬盘有1个主分区和4个逻辑 分区,那么,就是hdc1, hdc5, hdc6,hdc7,hdc8。

SCSI的硬盘一般以/dev/scd出现。有时候CDROM会以模拟SCSI的设备形式出现。
/dev/cd-rom->/dev/scd0
现今的USB和SATA则会以sd形式出现。

遗留下来的外设们
上 面我们已经概况了一些集成在主板上的串口,并口, 我们也看了一些标准的IO端口和IRQ的指派。串口一向是链接的老大难。 现在的大量设备比如IEEE 1394,USB等设备的出现大大的减轻了串口和并口的配置问题。 现在还是让我们来继续讨论一下BIOS的设置。

Serial Ports(COMn)
一 般机器上有4个串口,COM1~COM4。 如果你机器上只有一个串口,那么一般就是一个9口的DB9接口, 它会默认使用COM1的IRQ,IO端口3F8和IRQ4。 其实,COM1和COM3是共享一个IRQ4的,这个和COM2和COM4共享一个IRQ3是一个道理。 除非驱动程序和链接到COM的设备能够处理共享中断的问题(或者干脆其中一个设备不用中断),不然一台机器只能同时使用COM1和COM2。
有时候,你不得不关闭板载串口,这样你可以得到一个额外的IO地址和IRQ。当然了,你只是在不得已的情况下才做这些改动。
posted on Thursday, September 13, 2007 12:15 AM #Notes
Comments
No comments posted yet.
Title  
Name  
Url
Comments   
Protected by Clearscreen.SharpHIPEnter the code you see: