linux3g网卡驱动
① 安装linux系统
安装Linux系统
3.1 准备工作
在安装任何Linux发行版本之前,你首先应该做一些准备工作,包括收集系统信息,准
备安装版本等等,特别地,你应该进行一个安装规划。我们现在就来介绍一下安装之前
的准备要点。
3.1.1 获取Linux发行版
Linux发行版本可以从网络下载,也可以直接购买发行光盘。
目前下载Linux发行版本的站点相当多,如果你有一条64KB以上的DDN或者ISDN专线,
并且有让下载工具连续运行几天几夜的准备,那么下载总是要比购买cdrom来的容易一些
(因为Linux版本升级非常快,往往升级版推出半个月以后才能在本地买到发行盘)。
如果你不涉及国际流量问题,可以直接到发行商的主站点去下载光盘映像,然后烧制
成CD-R,或者拷贝到硬盘上安装。由于安装时的文件名大小写问题,我们一般建议将下
载的文件放到你的本地服务器上,通过ftp安装,然而这要求你首先有一台基本的linux
服务器。否则,你就需要烧制CD-R了。
如果有国际流量问题,可以考虑到教育网内的某个站点下载。另外,Turbo Linux公司
设有国内分公司,可以到www.turbolinux.com.cn去下载TLC的最新版本。
到市场上的软件连锁店直接购买Linux 光盘发行版,用光盘来安装是最方便快捷的。
目前RedHat,TurboLinux和corel都可以在连锁店买到。一定要注意,大部分Linux发行
版本有“完整版”和“精简版”的区分,例如TurboLinux有1CD,3 CD和10CD三个版本。
如果你是用Linux为你的单位构造网络服务器,我们总是建议你购买完整版本,毕竟价格
差不多。不过如果你想要使用SuSE之类不常见的版本,你还是得把网络打开转上几天几
夜。
我们建议你用一种Linux版本为基础,然后抽取别的版本中的优秀产品组合成你的服
务器软件。作为基点,RedHat(3CD版)和TurboLinux(10CD)都不错。
3.1.2 准备服务器硬件
①CPU
Linux 在Intel 80386, 80486, Pentium, Pentium Pro, Pentium II, Pentium
III ,Celeron ,AMD K6-2 (3DNow),AMD K6-3这几款cpu下能很好的工作,而非Inte
l 的 CPU ,主要包括:Cyrix 6x86,AMD K6,AMD K5,AMD,Cyrix MediaGX chip,WA
RNING出现问题的机会似乎比较多。需要补充的是6x86MX据说在Linux下的表现远好于原
来的6x86。不过,话说回来,你真的穷到要用6x86MX做服务器的程度吗?
一台装配PII以上CPU的Linux在服务量不是非常大时就能很好的工作,如果配备双CPU
那就可以和一台中档的名牌服务器相媲美。Linux对双CPU的支持还算不错,但如果你是
购买的发行版本,那么你在安装后经常需要重新编译内核才能充分发挥双CPU的威力。详
情可以参考第四章。
②主版
Linux支持市面上出售的大多数主板,在选购主板应该考虑是不是支持你的CPU,如果
采用双CPU还考虑买一块兼容的主板。笔者认为在主版的选购时要注意名牌效应,条件允
许一定要买名牌的。
③内存
Linux对内存的品牌没有特殊的限制,只是要求内存最小是 16MB,当然这个数字就我
感觉跟说用32MB内存跑Windows NT差不多。大体上,作为一台服务器,你可以从64MB内
存开始,至于多到多少,反正上限是2GB,现在条子这么便宜,你自己看看你的机器上有
多少个槽就行了。Linux对内存的质量要求比较一般。
④Linux支持的硬盘控制器/硬盘
Linux 支持标准的IDE、EIDE、MFM/RTL控制器。
IDE设备在工作是要占用CPU的处理时间,如果同时有几百个访问,这样占用CPU处理的
时间就急剧增加,系统的负担急剧上升,如果选用SCSI接口卡设备的话就可提高系统的
效率。Linux 并不支持并口的 SCSI 卡,在Linux下兼容的SCSI 列表么……反正我不想
介绍了,你自己去看兼容性列表,目前的Linux内核对BusLogic,AHA之类的大牌SCSI卡
支持还不错,但是肯定不如windows NT那么多。实在不行你可以跟零售商说:“不支持
Linux我可不要啊。”如果你真的预算紧张,那么也可以使用IDE硬盘,不过目前的Linu
x内核似乎对UDMA66不能正确支持,你可能仍然使用标准的DMA-33硬盘。
Linux 也支持磁盘阵列。
⑤网卡
Linux 以其强大的网络功能而着称,选择一块合适的网卡是十分必要的。在选择网卡
是要注意网的性能和兼容性。对于用Linux作为服务器的用户选择一块100M的以太网卡可
在很大程度上提高服务效率。下面就是一些在Linux下能很好工作的网卡:
3Com Etherlink III (3c509 EISA)
3Com 3c59x, 3c900, 3c905 (Not the 3c905B and C, see below) 3c579
Digital DE425, DE434, DE435, DE450, DE500 (uses DE4x5)
Digital 2104x,2114x ``Tulip'' chip cards, SMC DEC21041 , SMC PCI EtherPowe
r (uses Tulip driver)
Intel EEPro100 (PCI),EtherExpress i82557/i82558 PCI Pro/10+。
3Com 3c503, 3c503/16, 3c505, 3Com Etherlink 16 (3c507)
Allied Telesis AT1500 (uses Lance driver), AMD Lance/PCnet, HP J2405A, NE2
100, NE2500
AMD PCnet32 and AMD PCnetPCI
Apricot Xen-II, 680x0 VME (82596 chipset)
Ansel Communications AC3200 EISA
AT&T GIS WaveLAN ISA
Alteon AceNIC Gigabit Ethernet Driver
Allied Telesis AT1700
Aironet Arlan 655
Cabletron E21xx
Crystal LAN CS8900/CS8920
Comtrol Hostess SV11
Compaq Netelligent 10/100 TX PCI UTP, 10 T PCI UTP, Compaq Integrated
NetFlex 3/P, Compaq Netelligent Dual 10/100 TX PCI UTP, Compaq Netelligent I
ntegrated 10/100 TX UTP, Compaq Netelligent 10/100 TX Embedded UTP, Compaq N
etelligent 10 T/2 PCI UTP/Coax, Compaq Netelligent 10/100 TX UTP, Compaq Net
Flex 3/P
100VG-AnyLan Network Adapters, HP J2585B, J2585A, J2970, J2973, J2573,Comp
ex ReadyLink ENET100-VG4 & FreedomLine 100/VG
D-Link DE600, DE620 pocket adapters
D-Link DFE-930-TX PCI 10/100, VIA Rhine PCI Fast Ethernet cards with eithe
r the VIA VT86c100A Rhine-II PC or 3043 Rhine-I
Digital DEPCA & EtherWORKS, DE100, DE101, DE200 Turbo, DE201 Turbo, DE202
Turbo, DE210, DE422
Digi Intl. RightSwitch SE-X EISA and PCI
EtherWORKS 3 (DE203, DE204, and DE205)
Fujitsu FMV-181/182/183/184
HP PC-LAN Plus
HP PC-LAN (27245B and 27xxx series)
HP AnyLAN, 10/100VG, PCLAN (J2577, J2573, 27248B, )
Intel EtherExpress 16
Intel EtherExpress i82595 Pro10/10+ (ISA only)
MiCom-Interlan NI5010 ethercard
Mylex LNE390 EISA cards (LNE390A, LNE390B)
NE1000/2000 and compatible ISA cards
NE2000 (PCI), RealTEk RTL-8029, Winbond 89C940, Compex RL2000, KTI ET32P2,
NetVin NV5000SC, Via 82C926, SureCom NE3
NI5210 card (i82586 Ethernet chip), NI6510, ni6510 EtherBlaster
Novell NE3210 EISA Network Adapter
Yellowfin (and Compatibles)
G-NIC
Racal-Interlan ES3210 EISA Network Adapter
RedCreek Communications PCI
RealTek cards using RTL8129 or RTL8139 Fast Ethernet chipsets
Sangoma S502/S508 multi-protocol FR, Sangoma S502A, ES502A, S502E, S503, S
507, S508, S509
SMC Ultra / EtherEZ (ISA, 8k 83c790), SMC 9000 series, SMC 9000 series, SM
C Ultra32 EISA (32K) SMC EtherPower II 9432 PCI (83c170/175 EPIC series),
Tangent ATB-II, Novel NL-10000, Daystar Digital LT-200, Dayna DL2000, Dayn
aTalk PC (HL), COPS LT-95, Farallon PhoneNET PC II & III
Western Digital WD8003, WD8013
Any IBM Token Ring card that does not use DMA
SysKonnect Token Ring ISA/PCI Adapter TR4/16(+) ISA or PCI, TR4/16 PCI, an
d older SK NET TR4/16 ISA cards
IBM PCI tokenring cards based on the Pit/Pit-Phy/Olympic chipset
IBM Tropic chip-set cards
Linux支持的网卡品牌很多,详细的情况可以参考Linux的硬件兼容性列表(/usr/doc
/HOWTO/HARDWARE-HOWTO)。
⑥显示卡
就我看来,服务器的图形界面完全是不必要的,Solaris的那个openlook确实很漂亮,
但是有谁用呢,还不如干脆用M$呢。对于Linux更是如此,你只要弄一块凑合着能上102
4*768的4MB显卡就行了,当然前提是Linux的XFree86兼容。我推荐的是Trident 9750和
S3 virge,兼容性绝对没问题。如果你觉得这种东西实在太古老了,呵呵。
3.1.3 准备安装规划
为了安装Linux, 必须为它准备硬盘空间。这个硬盘空间必须和您的计算机上安装的
其他操作系统(如Windows, OS/2或着其他版本的Linux)所使用的硬盘空间分开,或者是
一个独立的硬盘。在你决定创建Linux分区之前最好先备份你的重要数据,以免造成不必
要的损失。实际上,既然你准备安装的是一台服务器,那么你干脆把整个硬盘都交给Li
nux得了。
Linux整个系统可安装在1GB左右的硬盘空间上,可是,我们安装Linux是为了让它完成
如:Web,Mail,Ftp等一些服务,这些服务真的开启之后,对硬盘的空间要求特大,比
如你开启一有2G大小的Ftp服务,你至少要有3G的硬盘空间,我们单位有的是一个28G的
硬盘可是在不到一年的应用中就使用了80%,如果你正在规划一个服务器是,那你一定要
考虑你选择一块容量大小合适的硬盘,不要等到不够用时再想办法,要加一个硬盘容易
,改变/home和/var的目录结构却可能是非常讨厌的。
Linux 在装时需要建立两种类型的分区,即“Linux native”硬盘分区和“Linux s
wap”交换分区。
尽管可以将Linux装在一个单一的大分区中(根据我们已经提到的分区原则),但我们推
荐你把系统分开安装在不同的分区上。如果你有一个装满的8G以上的分区,一旦发生文
件系统问题,你肯定会有麻烦的。
下面是我们建议的分区规划:
一个交换分区 -- 交换分区用来支持虚拟内存。 您必须创建交换分区, 即使您有更
多的内存,仍然推荐使用交换分区。 目前的交换分区已经可以设置到非常大,不过太大
也不见得有什么意义,我们建议控制在100MB以上,500MB以下,而且可以使用多个交换
分区。需要注意的是,如果你设置了多个交换分区,那么Linux安装程序通常只会激活第
一个,你需要手工启动其它的交换分区,详见第四章。
一个根分区 -- 根分区是/(根目录)所在地.。它只需要启动系统所须的文件和系统配
置文件,这些文件并不大。但是由于缺省的/tmp(存储临时文件的目录)也在这个目录下
面,所以应该留出足够的空间,一般可以设置在500MB到1GB。不过如果你按照我们下面
解释的专门创建了/tmp分区,那么就可以小一点,只要300MB左右。
一个 /usr 分区 -- /usr 是Linux系统大部分应用软件的所在的地方。 根据您交换安
装的包的数量以及发行版本的不同, 这个分区应该在300MB到1500MB之间。 如果可能,
将最大的空间用于/usr分区。 任何您以后将要安装的基于RPM的包都会使用比其他分区
更多的/usr空间。
一个 /home 分区 – 这是用户的home目录所在地;它的大小取决于您的Red Hat Lin
ux 系统有多少用户, 以及这些用户将存放多少数据。
一个 /var 分区 – 所有的邮件和打印队列,系统日志文件等等都存放在这个分区里
面,所以你应该适当选择一个足够大的/var分区。
一个 /tmp 分区 -- 就象它的名字,/tmp分区用来存放临时文件。 对于一个大型的,
多用户的系统或者网络服务器,专门创建一个/tmp分区是一个好主意。至于分区的大小
,你只有在实践中摸索了。
一个 /usr/local 分区 – 这个分区用来存放包含按照BSD的目录组织存放的软件,大
部分源代码编译后的目标程序也缺省放在这里,你需要一定的空间来存放这些文件,例
如1-2GB。
就服务器来说,存在两种基本的思路,一种是在开始的时候选择安装所有应用软件包
;另一种是开始只安装最小系统,然后逐步增加需要的包。除非你的应用对安全性很敏
感,否则建议你用第一种方法,否则你会发现研究软件包之间的依赖关系是一种很讨厌
的工作。
大部分发行版本在安装系统的同时完成对系统的基本设置。但是这种设置程序并不是
非常可靠,如果你在安装过程中发现配置某种硬件或者网络信息失败,你有两种选择:
停止安装或者忽略。据我们的经验,通常你应该忽略这些信息,只要Linux安装到了系统
上并且可以启动,所有的东西都可以手工设置。不要轻易地停止安装过程或者重新安装
,那是解决windows 9x问题的途径,不是Linux的。
Linux在安装过程中需要一些硬件的相关信息才能正确配置相应的硬件,在安装Linux
前一定要知道你使用的硬件信息,最好在安装时把你使用的所有硬件说明书放在手边(
如:主板、显示卡、显示器、调制解调、Scsi卡等),也可应用一些相应的软件检测你
的硬件信息然后记录下来。当然如果你早对你的硬件了如指掌就不必这样麻烦了。
一般用户只需知道网卡的型号、中断号和地址、鼠标和调制解调的类型和端口、显示
卡的类型和显存的大小、显示器的类型和参数、内存的大小、光驱的类型连接到哪个口
上、声卡的类型中断和地址、如用scsi卡必须知道类型。为了连接网络,还需知道机器
的域名、IP地址、子网掩码、路由地址、域名服务器的地址。
在记录了各种安装的必要信息之后,下一步是选择安装介质。
从CDROM安装总是最简单的。目前大部分系统可以从光盘启动,所以你需要的仅仅是设
置系统启动顺序为CDROM优先。如果你的Linux发行版本是多光盘的,通常在基本安装的
时候只需要第一张光盘。
从ftp安装也是一种很常用的手段。这种安装最常见的应用是你想要在一台新的机器上
安装一个全新的Linux发行版本的时候,毕竟CD-R刻录机不是每人都有的。如果要用ftp
安装,你必须首先确定你使用的发行版本是否支持ftp安装。某些版本是无法从ftp安装
的。
如果你确定你的版本支持ftp安装功能,而且你的Linux发行版本用的内核支持你的网
卡,你需要做两件事:(1)把发行盘的内容拷贝到ftp服务器的某个目录下面,并且记
下目录名;(2)制作软盘引导盘。
另外的安装方式是通过NFS或者samba数据源。这两种东西和用ftp安装差不多,不过一
个使用NFS,另一个使用的是Windows 的文件/目录共享,支持SAMBA数据源的安装的发行
版本更少一些,而且一般我们也不建议使用这种功能(主要是文件名大小写的问题)。
如果你选择的是从软盘启动,那么你需要根据是CD-ROM还是网络安装来确定使用哪一
种软盘映像,一般情况下,Linux的启动软盘是用全盘映像的方法存放在光盘上,可以使
用DOS下面的rawrite(在光盘上有)或者Linux下面的dd命令复制到软盘上使用。
3.2 RedHat 的安装过程
从这一节开始,我们介绍几种Linux发行版本的安装过程。这里选择了三个版本:Red
Hat,Turbo Linux中文版和SuSE。RedHat是最容易安装的版本,如果你是一个新手,看
看下面的安装过程就应该可以顺利地安装成功。
3.2.1 建立Linux引导盘
如果你的主板不支持光驱启动或者你要从软盘启动来安装RedHat那么就需要制作启动
盘,在RedHat 的光盘上包含一个启动盘映象文件,只要将这个文件用相应的程序写到软
盘上就可以制成启动软盘。
从Redhat 6.1以后的版本只提供一个映象文件即可安装,如从光驱和硬盘安装用\ima
ges\boot.img;如从网络安装用\images\bootnet.img。启动盘可以在DOS或者Linux下面
制作:
在 Dos 下制作启动盘
E:\images>\dosutils\rawrite (E 为 光盘的盘符)
假如是使用boot.img,只要在提示“Enter dis images source files name :”时输
入 boot.img,按回车出现提示“Enter target diskette driver: ”输入 A: 回车
。其他类型的启动盘制作方法类似。
在Linux 下制作启动盘
制作启动盘: dd if=boot.img of /dev/fd0 bs=1440k
建立DOS引导盘和用Loadlin引导
Linux提供了一个 Loadlin的应用程序可在dos 下启动Linux的安装程序,首先制作一
张dos启动盘拷贝相应的文件,再在这张盘上加载光驱的驱动程序,然后用这张盘启动计
算机,进入Linux 发行板的 dosutils 目录运行 autoboot .bat 就可进入安装界面。
autoboot.bat的内容如下:
loadlin autoboot\vmlinuz initrd=autoboot\initrd.img
3.2.2 开始系统安装
本书使用Redhat 6.1作范例.
使用发行光盘或者制作好的启动软盘盘启动机器,在lilo:提示符下面直接回车,将进
入安装界面。
如果你是从软盘启动机器,那么将进入下面的安装过程,否则,如果是从cd-rom安装
,将直接进入第四步。
选择语言
图3.1 选择语言
Redhat提供了多种言支持,很遗憾没有中文,只好选择 English。
选择键盘
系统提示用户选择键盘类型,选择 us即可 ,也可在安装后用 setup 程序更改此项。
图3.2 选择键盘
选择安装方式
图3.3 选择安装方式
通常我们选择从cdrom安装,只要直接在对应栏目里面按下回车就可以了。如果要选择
从ftp安装,那么在选择了ftp之后,还要给出ftp服务器的ip地址,本机器的ip地址和L
inux发行盘在服务器上的目录。
如果你是从软盘安装,那么这一步之后,系统将切换到图形模式,继续安装过程。
配置鼠标
系统能识别多数的鼠标类型,这项可使用默认值,如果你用的是两键鼠标你还应该选
择 'Emulate 3 mouse'否则在x windows 下有一些功能不能用。
图3.4 配置鼠标
欢迎界面
这是一个欢迎界面,标志下一步将进入文件拷贝和系统设置。
图3-5 欢迎界面
安装类型
图3-6 选择安装内容
为了方便用户Redhat的开发人员设计了几种安装类型,可根据需要来选择,但大多数
用户选择'Custom'定制安装,这样在以后的安装过程中可详细的对Redhat提供的软件包
进行选择,自由度更大。
建立分区
图3-7 建立分区
Redhat 提供了一个简单使用的图形化的分区工具,利用这个工具你可方便的建立,修
改,删除分区,分区的种类及大小可参看本章的1.3中的规划分区,如建立一500M的根分
区,选则 Add ,然后在下图的 'Mount Point:'中输入 '/';'Size(Megs):' 中输入 '
500' ; 'Partition Type:' 选择 'Linux Native ' ,最后按 Ok 确认即可。
图3-8 建立分区(2)
选择格式化的分区
图3-9 格式化分区
与其它的操作系统一样在使用分区前要对分区进行格式化,格式化成Redhat 可识别的
分区。注意原则上每个分区都应该格式化。如果你的硬盘使用的时间较长或则有坏块,
那么就选择' Check for bad blocks while formatting'把坏的区域标志上,以免数据
写到坏块上丢失。否则,对于新的硬盘只要简单地选择格式化就行了。
Lilo的配置
引导Linux 需要安装一个用来把内核装入计算机的程序,在Intel 的兼容PC 上使用L
ilo。在安装界面内有如下几个选项:
Create boot disk
创建软盘启动盘。默认是允许,如不创建,用鼠标点击前面的小方块让其凸起。一般
我们不必创建这个东西,详情见第四章和第九章。
Do not install LILO
不安装LILO,建议你不要选择这个选项,否则你无法启动系统。
Install LILO boot record on:
询问LILO 安装在哪儿,通常选则安装在 MBR 上。
Use linear mode
这个选项是要求Linux使用SCSI的线性模式。如果你有一个超大的或者比较特殊的SCS
I硬盘,选择这个选项。
下面的区域是表明了分区的详细情况,通常不用作修改。
图3-10 配置lilo
选择时区
中国用户在WORLD项选择亚洲,在相面的滚动框内选上海时间。
图3-11 设置时区
账号配置
图3-12 设置密码和账号
Redhat 在安装过程中需要设置 ROOT 用户的密码,同时也可建立新的用户,不过很少
有人在此时建立用户。只要输入root密码并且确认就可以了。
认证配置
图3-13 身份验证设置
这个配置通常不需要改动,它表示账号的身份认证和口令的加密方式。在Redhat 6.1
中,口令验证使用MD5加密方式,它具有更高的对抗蛮力猜测算法的能力。不过MD5不是
一个严格意义上的加密算法,因此是一个可选项。你也可以使用原始的DES并且不使用M
D5。当然这意味着降低了系统的安全强度。
X配置
图3-14 X window配置
所谓X 配置主要是指显示卡和显示器的配置,如不想在此配置可选 Skip x configur
ation ,等安装结束后用 setup 应用程序来设置。
选择安装的应用程序
你可根据需要选择你想要的应用程序,如果你的硬盘空间足够大我们总是建议安装所
有的软件包。(最后的everything选项)
图3-15 选择安装的软件包
(15)安装软件包
现在开始软件包的拷贝了,耐心的等几十分钟就可以了。
图3-16 安装软件包
在此安装过程中没有提到网络部分,可用安装后用 netconf 这个应用程序来完成,
后面的章节有详细的说明。
3.3 Turbolinux中文版安装过程
这里介绍的是TurboLinux 4.0Chinese的安装过程。目前TurboLinux 6.0已经发布了,
不过两者在安装之间的差别几乎可以忽略,你可以自己看看自己拿到的TLC版本。
3.3.1 启动Turbolinux 安装程序
直接用CDROM启动
只要你的BIOS支持CD-ROM启动,你就可以用这种方式。 直接把光盘插入光驱,引导机
器就可以了.
在DOS下用LoadLin启动
从DOS启动,转换到光盘驱动器,例如e:,然后进入子目录dosutils/ ,输入命令aut
oboot 并回车,就可以开始安装TurboLinux。
利用软盘启动
如果上面的两种安装方式都不能工作, 就必须利用软盘来启动安装TurboLinux,不管
怎样,我不建议你使用这种功能。如果你一定要用,你可以自己看TurboLinux附带的安
装手册。
3.3.2 TurboLinux安装过程
TurboLinux的安装过程是中文的,所以我们下面只是简单地介绍一下,其实你只要仔
细研究一下说明就差不多了。
1) 选择显示模式
本窗口会询问用户是否使用彩色的显示模式,缺省是YES,一般情况下,按回车 就可
以。除了某些单色显示器以外。
图3-17 选择显示器类型
欢迎画面,然后安装程序将会显示一个欢迎画面,您只需要按回车跳过即可。
2) 选择键盘类型
图3-18 选择键盘类型
用户在此处设置键盘布局,而中国用户一般都直接键入回车使用缺省设置US 键盘。
3) PCMCIA
如果您的系统上有PCMCIA卡(有时被称作PC Card),选择'是',安装程序会提醒您插
入特别设备驱动盘,不然您将无法驱动您的PCMCIA设备。 如果没有,直接选‘否’继续
。
4) 特别设备驱动
如果安装程序提醒您需要特别设备驱动盘,移去启动盘,并且插入特别设备驱动盘。
通常这是不必要的,除非你使用某种从软盘启动的安装方式。
TurboProbe
图3-19 检测硬件
TurboProbe是TurboLinux安装程序所特有的一部分, TurboProbe可以自动检测您系统
上安装的ISA设备/PCI设备/SCSI设备/网卡/并口IDE设备。如果系统在这个过程中挂起
了,重新启动机器。
6) 安装介质
图3-20 选择安装介质
TurboLinux提供了4种的方式,我们只介绍除'硬盘安装'方式外的3种方式。
CD-ROM 安装 - 最常用的安装方式,如果您选择了这种安装方式,你就要用第一张Tu
rboLinux光盘启动计算机,而后TurboLinux将自动进入安装界面。
NFS 方式安装 - 如果您的机器在一个局域网中, 并且该局域网上有另外一台服务器
上以NFS方式共享出一份TurboLinux的拷贝。那么您就可以利用这台 机器作为NFS服务器
来安装TurboLinux。在安装之前您必须从您的系统管理员处获得您系统的TCP/IP设置和
NFS服务器 的配置信息。选择这种安装方式将会弹出对话框 网络设置。 您需要输入您
得到
② 基于嵌入式linux 3G下的无压缩视频传输
这是我本科的毕业设计。时隔5个月,再次回顾一下。
本课题研究嵌入式系统在数据采集,3G无线通信方面的应用,开发集视频采集、地理信息采集、无线传输、客户机/服务器模式于一体的车载终端,实现终端采集视频与GPS信息的传输,支持服务器端显示视频与GPS信息的功能。
这里我着重介绍本项目中的视频传输。由于知识水平的缺乏和实验条件的限制,本人并没有采取视频压缩算法。但针对数据量大而且3G网络相对有线网络带宽限制的情况采取了措施。
硬件环境:友善之臂mini2440实验板(ARM9)。
操作系统:linux(终端)、windows7(服务器)。
网络环境:WCDMA(联通3G上网卡)。
Mini2440实验板上有CMOS摄像头接口。同时厂家提供的linux源代码中有摄像头驱动,编译进内核即可使用摄像头。摄像头采用的是OV9650,30万像素,在linux下作为字符串设备驱动,可通过读取设备文件,获得图像信息。
读取摄像头数据的代码如下:
复制代码
代码如下:
int camdata_count;
int cam_fd=open("/dev/camera",O_RDONLY);
printf("Camera init!/n");
while(1){
camdata_count=read(cam_fd,cam_data,640*512*2);
if(camdata_count==640*512*2){
/*视频数据处理与传输的代码*/
}
else{
printf("CAMERA Error!/n");
}
}
close(cam_fd);
从摄像头中读取的数据格式是RGB565的,如图所示。即红色分量占6位,绿色分量占6位,蓝色分量占5位,总共是16位。
为了作为bmp文件显示,需要将RGB565转换为RGB888(即24位真彩色)。再在文件开头加上bmp文件头,就成为一个完整的bmp文件了。用UDP协议传输这些图像数据。在服务器端,用.NET的库可以将接收到的BMP数据在图形界面的指定组件上显示。
.NET显示图像的代码如下:
复制代码
代码如下:
// st是一个已经建立的MemoryStream对象,bmp_data是bmp数据(byte数组),bmpSize是BMP图像大小(单位是B)。
st.Write(bmp_data, 0, bmpSize);
try
{
picBox.Image = Image.FromStream(st);//picBox是已经建立的PictureBox对象,呈现在图形界面上
}
catch (Exception e)
{
richTextBox2.Text += "error/n";//如果BMP数据错误,则输出如下错误
}
旅羡 //st对象清空
st.SetLength(0);
st.Position = 0;
st.Flush();
流程图如下:
以上方案在有线网络传输的情况下能顺利运行,但是在3G网络下图像几乎不能显示。这是因为3G网络的带宽限制和UDP协议不可靠的缺点,数据在传输过程中会产生丢包现象,影响图片质量。对此需要改善程序代码,增加一些措施来避免丢包:
(1) 将数据转化的工作交给服务器。
BMP文件基本不经过任何压缩,每个像素点占用3个字节(R、G、B分量分别占用一个字节),而从CMOS摄像头读取的数据是RGB565的,即一个像素点只占用2个字节。如果说从CMOS读取的图像信息不经真彩化处理,直接传输给服务器,这样,需要传输的数据量减少了大约1/3。
(2) 减少图像的尺寸。
从CMOS摄冲消像头读取的图像尺寸是640*512的。如果打包成BMP数据的话,总共大小是640*512*3+54(B),大约960KB。如果说不经真彩化处理,一帧数据总共大小是640*512*2(B),大约640KB。正常情况下,一秒可以采集6-7帧图像。联通WCDMA理论的上行速率是5.76Mbps,约为720KB/s,实际拆判拍情况一定低于此值。在此情况下,一秒基本上只能传输一帧图像。所以减小图片尺寸很必要。可以考虑将图片的长宽都减小为原来的1/6,再在服务器端进行真彩化处理和打包,放大为320*256的尺寸显示。这样,一帧RGB565的图像的大小约为107*86*2(B),约为18KB。这样就足够传输相应的数据了。
(3) 分包传输。
UDP协议仅负责传输,不保证对方可靠接收,没有拥塞控制。因此,在WCDMA这种相对来说较差的网络环境下,会造成大量数据包的丢失。实验证明,当一次传输数据量达到18KB(一帧的数据大小)时,丢包率在95%以上,这会严重影响图片质量。当一次传输数据量在1-2KB时,丢包率可以降低到一定值,并保证一定的传输效率。
(4) 每次数据传输之间给与一定延时。
如果将一帧图片分为每个1-2KB数据包来传输,大约要传输15-18次。在每次传输之间,如果不引入一定量的延时,同样会造成很大量的数据包丢失。而延时的时间也是需要把握好的,一般延时500-1000ns比较合适。在传输每帧图片之间,也需要给与一定的延时,此时延时时间过大的话,会造成每秒传输帧数过少,图片流畅率下降,一般传输每帧图片之间给予50ms的延时。
修改后的程序代码:
复制代码
代码如下:
count=read(fd,cam_data,WIDTH*HEIGHT*2);//缩小图片大小,data_buf为原图像数据,cam_data为缩小后的图像数据,两者都为字符数组类型
if(count==WIDTH*HEIGHT*2){
shrink(data_buf,cam_data,WIDTH,HEIGHT);
for(i=0;i30;i++){
//用UDP分包传输图像数据
sendto(sockfd,data_buf+(i*32768),32768,0,(struct sockaddr *)addr,len);
usleep(2000);//给与一定的延时
}
printf("One picture sended!/n");//一帧传输完毕
usleep(100000);
}
else{
printf("Error/n");
}
以上措施可以减少UDP传输视频数据的丢包率,但是,不管怎样,UDP传输数据的丢包现象普遍存在,或多或少会有一些。在3G网速较差的地区,丢包率甚至还是会达到50%。视频数据从摄像头读取后存放在一个无符号字符串数组里,本来是按顺序分割数据进行传输,由于读取的图像数据对应的像素点分布是从左到右、从上到下排布的,如果丢包,会造成接收到的图像的部分图像条无法及时更新,影响肉眼观察图像的质量。下面两张图对比了网络状况较好和较差情况下的显示效果。
上图是网络状况良好情况下的显示效果,可以看出,显示比较流畅,图像质量较好。下图是网络状况较差情况下的显示效果,可以看出,动态图像的某些图像条未及时更新,这是由于决定该图像条的显示的数据包在传输过程中丢包。
为了降低丢包带来的这种损失,可以考虑将每帧图像分成多个位平面并按一定顺序传输,每个位平面代表所有像素的同一位组成的二值图像。如下图所示,是每个位平面传输的顺序(从0开始计数)。
实验证明,每一帧分包传输后,靠前面的数据包丢包率比较小,而每个颜色分量的最高位对图片色彩质量的影响最大,位数越低,对图像色彩质量的影响越小。所以即便后面的位平面数据没有接收到,对图片色彩质量的影响也不会很大。将RGB每种颜色分量的位数按照从最高到最低的顺序进行传输,每种颜色分量对应的位平面穿插进行传输,于是就采用了上图所示的顺序。由于RGB565格式的数据每个像素共16位,一帧图片总共需要分16个位平面数据包传输。为了服务器能够正确进行图片数据的组装,在传输之前,将每个位平面数据包的最前面加上该包传输顺序的值,如下图所示。
终端部分代码如下:
复制代码
代码如下:
shrink(data_buf,cam_data,WIDTH,HEIGHT);//缩小图片大小,data_buf为原图像数据,cam_data为缩小后的图像数据,两者都为字符数组类型
for(i=0;i16;i++)
{
bzero(cut_buf,1152);
cut_buf[0]=(uchar)i;//将要传输的数据首个字节设为顺序号
for(j=0;j9202;j++)
{
//每个像素按位分位平面数据包
cut_buf[j/8+1]|=(uchar)(((uchar)(data_buf[j]bit_index(i))0x01)(j%8));
}
sendto(sockfd,cut_buf,1152,0,(struct sockaddr *)cam_addr,sockaddr_len);//发送数据
usleep(1000);//传输每个数据包之间的延时
}
printf("One picture sended!/n");//传输每帧图像之间的延时
usleep(100000);
在服务器端,用如下函数进行数据的重组,同时进行真彩化处理(C#.NET语言):
复制代码
代码如下:
private void picDataCopy(byte[] bBuf,byte[] bData) //bBuf为接收到的数据,bData是重组后的数据存放的数组
{
int index=bBuf[0];
for (int i = 0; i 9202;i++ )//循环9202次,逐位进行数据的重组
{
if(index15){
bData[3*i + 2 - (index%3)] |=
(byte)(((bBuf[i/8 + 1] (i%8)) 0x01) (7 - index/3));
}
else if(index==15){
bData[3*i+1]|=
(byte)(((bBuf[i/8 + 1] (i%8)) 0x01) 2);
}
}
}
如上图所示,是在改变传输方案后,即采用按位平面传输的方法传输后的显示效果图,在网络良好的情况下,可以正常显示。在网络状况较差的情况下,图像颜色质量会下降,而且会不稳定地变化。但是部分图像条不显示的情况就不再出现。
总结:此方案重在联系,实际工程中肯定不会采取此方案,还是有必要学习视频压缩算法及其在linux上的移植。