友声网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
开启左侧

Linux 应用宝典

[复制链接]
 楼主| admin 发表于 2006-3-25 20:27 | 显示全部楼层
接第十条
模块搭建过程中的变化

对于所有开发可加载硬件驱动程序的人来说,对他们影响较大的一个基本变化不是源于内核源代码,而是将外部模块编译过程整合为标准的内核搭建机制。如果用户使用的不是集成开发环境(例如TimeSys公司的TimeStorm,它可以检测内核版本并自动建立Makefile),那么用户需要手工为硬件驱动程序建立Makefile。

在2.4和更旧版本的内核下,模块的开发和编译位置不受限制,只要将适当的编译标记移到命令行或模块的Makefile中就可以了。这些标记包括两个编译模块时必须的符号定义和一个指针。该指针指向包含有内核所含文件的目录。以下面的语句为例,用户可以建立一个名为testmod.o的可加载内核模块:
#gcc -D__KERNEL__ -DMODULE -I/usr/src/linux-2.4.21/include -O2 -c testmod.c

为2.6内核搭建模块的过程比较简单,但是要想满足所有成功编译所需要的条件就不那么容易。用户既不需要手工指定以模块为导向的说明(例如MODULE, __KERNEL__等),也不必指定新的符号(如KBUILD_BASENAME和KBUILD_MODNAME等),只要对外部模块植入标准内核搭建系统的过程进行整合就可以了。用户也不必指定诸如-O2之类的选项,因为用户编译的模块与其它可加载内核模块一样,进程会自动调用所有的强制性标志。至于Makefile的编写就简单得多了,例如为testmod.ko模块编写的可与2.6内核兼容的Makefile如下所示:
obj-m := testmod.o。

然而,为了建立外部模块,用户必须先完成内核源代码树接口的编写。这样可以建立一些临时目录以供编译时使用。下面是一个为2.6内核构建模块的命令行。它可以从包含模块源代码目录下执行:
# make -C /usr/src/linux-2.6.1 SUBDIRS=$PWD modules

此示例命令假设用户的模块源代码和Makefile所在的目录与用户正在运行的命令中的相同。如果用户不使用POSIX命令(例如BASH),那么可以通过“SUBDIRS=`pwd`”命令,用$PWD变量代替SUBDIRS参数。这样用户就可以使用“pwd”命令识别工作目录。建立出口的命令如下所示:

#make: Entering directory `/usr/src/linux-2.6.1'
*** Warning: Overriding SUBDIRS on the command line can cause
*** inconsistencies
make[1]: `arch/i386/kernel/asm-offsets.s' is up to date.
Building modules, stage 2.
MODPOST
CC /home/wvh/timesys/2.6/testmod/testmod.mod.o
LD [M] /home/wvh/timesys/2.6/testmod/testmod.ko
#make: Leaving directory `/usr/src/linux-2.6.1'



"make"命令的成功完成将产生testmod.ko模块。对该模块的命名使用的是新的内核模块命名规则。如果用户已经对系统的启动程序进行了修改,以便通过名称清楚地加载模块,那么用户需要确定在升级到2.6内核后,这些模块的命名是否遵循了新的命名规则。

适应2.6内核的内部变化

Linux 2.6内核还带来了许多内部变化,用户需要改变已有的驱动程序以适应这种变化。这些变化包括内核的异步I/O机理、DMA支持层、存储器与页分配机理、数据块硬件驱动程序和新的类属硬盘接口等。例如,用来分配并管理存储器与页的功能就发生了新的变化。在2.6内核下,系统使用了一种名叫mempool的标准接口。对模块参考计数的使用和管理也发生了变化。模块参考计数主要用于决定一个模块是否正在使用,并对没有被使用的模块进行安全卸载。在2.6内核下,命令序列已被工作序列所代替,其中,对大量不同驱动程序产生影响的一个重要变化是参数模块的新接口。MODULE_PARM()宏已由详细的参数说明所代替。这种说明来源于新的module_param()宏。

Linux 2.6内核的优先能力和对SMP的识别能力,为驱动程序编写人员带来一些新问题。在单处理机系统中,在无优先能力的Linux内核下,一些驱动程序可以假设在两个处理器间不必再提供重入接口,因为它们无法同时运行驱动程序。驱动程序可以使用“spinlock”或“mutex”命令来保护那些可从多进程访问的数据。这些问题的考虑对于为嵌入式环境(如TimeSys Linux)编写高性能和实时硬件驱动程序的人来说尤为重要。

其它考虑因素

如果用户较为依赖Linux 2.6内核的工作,那么还需要对驱动程序做一些其它的改动。例如,尽管自从2.3内核诞生后,devfs文件系统已经被写入内核,并且在2.6内核设置中被标注为舍弃指令,但是它却经常在一些特殊领域中使用。例如在嵌入式计算中, devfs可提供较强的灵活性和一个紧缩的/dev文件名。devfs文件系统是介于hardcoded硬件节点间的中间步骤。此类节点主要用于早期的Linux和Unix系统中。同时,它还是udev、hotplug和sysfs文件系统的综合。对udev的支持技术目前正在被写入Linux 2.6内核。TimeSys公司已经开发出了拥有此类技术的商业Linux系统。如果用户正在使用其它的Linux发行版,那么用户也许会发现devfs支持和集成技术对于驱动程序来说十分重要。

如果用户想使用devfs文件系统,那么必须首先在搭建内核时激活对它的支持。这一步可以在内核设置编辑程序的File systems→Pseudo filesystems中完成。使用devfs还需要改变硬件驱动程序对硬件节点的识别方法。当用户使用传统的/dev目录作为Linux硬件描述符文件的放置位置时,硬件驱动程序通过启动register_blkdev() 或register_chrdev()函数来注册新硬件。具体使用哪一个,要看驱动程序注册的是一个数据块硬件还是字符硬件,而且必须事先知道硬件的主号码和次号码。另外,因为udev是一个可热插拔程序,它可以自动建立并删除/dev目录下的登录项,所以这一方法同样也适用于新的udev硬件机理。

使用devfs硬件文件系统时,硬件驱动程序必须使用devfs_register()系统呼叫来注册它们的硬件。驱动程序可以继续使用此前指定的主次编码,也可通过为devfs_register()呼叫指定DEVFS_FL_AUTO_DEVNUM 标志,由devfs自动指定编码。
 楼主| admin 发表于 2006-3-25 20:28 | 显示全部楼层
在Linux上快速搭建计数器
对外发布网站会有人不断访问,那么怎么来统计访问网站的人数呢?目前有很多方法,例如流量统计和IP统计等。这里介绍的是计数器(Counter)。通过计数器,网站人员能及时掌握浏览网站的人数。现在互联网上的很多服务器采用的都是Linux操作系统,那么如何在Linux上快速搭建属于自己的计数器呢?

安装与配置

在Linux平台上有wwwcount-2.6-3.i386.rpm软件包,可搭建基本的计数器,而且很简单。该软件包的安装和配置方法如下:

1.首先下载wwwcount-2.6-6.i386.rpm。输入下面的命令:
#rpm -Uvh wwwcount-2.6-6.i386.rpm

此时,系统会自动在/var/lib/wwwcount/data目录下打开一个my.dat文件。用户需要设置my.dat文件的权限,并在/var/www/html中打开一个范例文件wc-example.html。用户只要察看wc-example.html文件的源代码,即可将计数器挂上网站。

2.接着下载wwwcount2.6.tar.gz文件。下载完后,就开始安装、设置与使用了。

3.登录Linux主机,进入/usr/local/src目录,对wwwcount2.6.tar.gz文件进行解压操作。命令如下:
# cd /usr/local/src
# tar -zxvf wwwcount2.6.tar.gz

4.接着开始对刚解压的文件进行设置,可以参见下面的过程:

# ./Count-config //开始设定
……
◆ cgi-bin dierctory [/usr/local/etc/httpd/cgi-bin]:
/usr/local/apache/cgi-bin //Apache默认的cgi-bin的目录
……
◆ Base directory [/usr/local/etc/Counter]:
/usr/local/Counter // wwwcount安装的目录
You need to enter the directory of the configuration file.
◆ Config directory [/usr/local/Counter/conf]: //默认按回车键
You will create this file later by running the program “Gen_conf”.
◆ Name of the configuration file [count.cfg]: //默认按回车键
You need to enter the directory of the counter data file.
◆ Data directory [/usr/local/Counter/data]: //默认按回车键
You need to enter the directory of the Log file.
◆ Log directory [/usr/local/Counter/Log]: //默认按回车键
◆ Name of the log file [Count2.6.log]: //默认按回车键
You entered:
++++++++++++++++++++++++++++++
CgiBinDir=/usr/local/apache/cgi-bin
……
++++++++++++++++++++++++++++++
Everything looks ok [y|n]? y //确定以上设置没问题后就按y

5.接下来输入“./configure”命令,开始一些测试主机情况。

6.如果想要让计数器每点击一次就增加一个数的话,在Makefile文件中找到“Makefile #COUNT_RELOAD= -DCOUNT_RELOAD=1 ”这行(大约在33行),将注解“#”符号取消,保存后退出。

7.输入命令“make clean”,然后开始编译可执行文件。

8.接着使用“./Gen-conf”命令设置主机信息,过程如下:

……
Continue [y|n]? y //按下y确定
Enter your fully qualified domain name [no default]:
game1.com.cn //需要输入主机名与域名
◆ Enter your IP address [no default]: 221.7.128.164
◆ Does your host have any nickname [y|n]:
? y //如果主机有多个名称,那就按y,否则按n
◆ Enter your host's nickname (FQDN) [no default]:
//如果上面按y,才会出现需要填另一个主机名
◆ Do you want to allow automatic file creation [y|n]
? n //通常不希望自动产生文件
◆ Do you want the program to run in strict mode [y|n]? y
◆ Do you want to ignore access hits from your own host [y|n]? y
//用户自己访问,如果想计入其内,就按y。
……

9.开始进行安装,过程如下:

# ./Count-install
Your configuration:
……
Continue [y|n]? y //查看上面的设置信息是否正确,正确的话就开始安装
◆ Do you know the user and group id of httpd' child process [y|n]:? y
◆ Enter user id of httpd's child process [no default]:? nobody
◆ Enter group id of httpd's child process [no default]:? nobody
//如果用户不清楚,可以在httpd.conf文件中查找相关的设置

到此,安装就完成了。

应用

要使用上面搭建的计数器也很简单,只要在网页文件中的任何地方加入下面代码,就可以显示出计数器图形了:

其中test.dat文件放在/usr/local/Counter/data目录下,用户可以参照下面对这个文件进行一些操作:

#cd /usr/local/Counter/data
#echo 1 > test.dat
#chown nobody:nobody test.dat
#chmod 644 test.dat

 楼主| admin 发表于 2006-3-25 20:29 | 显示全部楼层
接上
NASA的研究人员将他们建造的集群称之为Beowulf(http://www.beowulf.org)。从此以后,这个名字就成为了使用PC的低成本集群系统的代名词。1996年,出现了Beowulf的两个继承者:Hyglac(由加利佛尼亚技术学院和美国Jet Propulsion Laboratory的研究人员建造)和Loki(它由美国的Los Alamos National Laboratory建造)。这两个集群分别使用了16个Intel Pentium Pro 200 CPU,网络为100Mbits/s Fast Ethernet,操作系统采用 Linux,数据传输用 MPI (Message Passing Library) 。它们的性能都达到了1gigaflops,而价格则都低于5万美元。

“石头汤计算机”的构建

看起来,采用Beowulf的方法似乎可以满足Hargrove和Hoffman绘制美国生态地图的要求。因为每一台单一的工作站只能处理几个州的数据,而他们不可能将不同的区域分配给不同的工作站来处理(因为整个国家中每个部分的环境数据都必须同时进行比较和处理)。换句话说,他们需要一个能够进行并行处理的系统。于是,在1996年,Hargrove和Hoffman向自己的上级部门提交了一个申请,准备购买64台包含奔腾2处理器的PC来建一个和Beowulf类似的集群系统。然而,这个计划却没有得到批准。出于无奈,他们决定寻求替代的方案。他们获知美国能源部橡树岭办公室经常会使用一些新的PC来替代旧的PC,而这些旧的PC则会在内部网上作为废弃的设备进行拍卖。而现在就有数百台被废弃的机器等着处理。于是,他们开始在ORNL一个闲置的房间里通过收集废弃的PC来建造“石头汤计算机”。

并行计算系统的设计理念是“各个击破”,也就是并行系统将一个复杂的问题分解成了一些小的任务。然后这些任务被分配到了系统的各个节点(比如Beowulf集群中的PC),而这些节点可以同时处理问题。并行处理的效率在很大程度上取决于所要处理的问题。一个需要考虑的非常重要的因素是各个节点之间以什么样的频率进行中间结果的共享。有些问题必须被分成无数细小的任务,而这些过于细化的分配需要各节点间进行频繁的通信,因此并不适于进行并行计算。与之相比,一些问题可以被分成比较大的子问题,而这些子问题间无需频繁的通信,因而通过并行系统处理起来就要快得多。这样的问题就比较适于使用这种系统来处理。

在构建任何一个Beowulf集群之前,都要对所要构建的系统进行一些设计。连接PC的方法可以选择普通的以太网,也可以选择更加专业快速的网络。由于缺乏预算,Hargrove和Hoffman采用了普通的以太网进行连接,因为这是免费的。他们选择其中一个PC作为前端节点,并且在其中安装了两个网卡。其中一个网卡用于和外面的用户通信,另外一个则和剩下的节点进行通信,而这些节点则通过自己的专有网络进行连接(如图1)。各个PC之间的合作是通过相互之间传送信息来完成的。现在有两种最流行的信息传送方式,其中一种是MPI,它的全称是Message Passing Interface。另一种是PVM,它的全称是Parallel Virtual Machine。MPI和PVM各有各的优点,PVM虽然应用得比较早,但缺少标准化,它比较适用于异种机环境。比较来看,PVM的性能较低,而且它的函数功能不如MPI丰富。MPI不仅提供大量的函数功能,并且它有一个共同遵守的标准受到广泛的支持。MPI的发展也很快。二者都可以免费从网上获得。在“石头汤计算机”的建造中,两种方式都被使用到了。

很多Beowulf集群系统的硬件组成都很一致,也就是说所使用的所有PC的处理器和其它硬件都一样。这种一致简化了集群的管理和使用,但却并不是必须的。“石头汤计算机”就包含了各种处理器,因为它在建造之初的设计就是使用所有可用的设备。刚开始,“石头汤计算机”包含有一些使用Intel 486的机器,接下来,使用的机器至少都是奔腾以上,且内存至少为32MB,硬盘则为200MB以上。

事实上,在建造这个集群系统的过程中,Hargrove和Hoffman发现很少有机器可以满足这种需求,于是他们就将不同PC的比较好的组件组合在一起。

每为集群添加一个节点,他们就为其安装上Linux操作系统。后来他们更是简化了这个过程,使得每一节点的安装过程更加简便。“石头汤计算机”第一次运行是在1997年。到2001年的时候,其所包含的节点已经达到了133个。这其中包含有75个486 PC、53个奔腾机器和5个Compaq公司产的Alpha工作站(如图2和图3)。

对“石头汤计算机”的升级过程非常简单,只需要将其中最慢的节点进行替换即可。作为集群的一个例行任务,每隔一个小时,每一个节点就会进行一次简单的速度测试。测试得到的值将帮助对集群进行调整。与商业机器不一样的是,“石头汤计算机”的性能一直在持续上升,因为它会不断得到来自各方免费赠送的机器对其进行升级。
 楼主| admin 发表于 2006-3-25 20:29 | 显示全部楼层
接上
并行处理问题

与设置和装配Beowulf系统的硬件相比,并行程序的开发更需要技巧和创造力,因而也更具有挑战性。Beowulf集群中最常用的程序模式是Master-Slave。这种模式中,一个节点作为Master,它负责指挥与之相关联的一个或者多个Slave。

另外一个挑战是在集群中的PC间实现负载均衡。因为“石头汤计算机”中包含有各种不同速度的处理器,所以不能将工作量进行平均分配(因为这样将导致快的机器长时间等待慢的机器)。解决这个问题的办法是开发一个算法程序,让Master给那些更快完成数据处理的节点传送更多的任务。这样,那些快的PC就可以做更多的工作,而速度慢的机器也可以被充分利用起来。

最终效果

经过一段时间的努力,Hargrove和Hoffman终于使用“石头汤计算机”成功绘制出了完整的美国生态地图。该地图于1999年在波特兰举行的超级计算机年会上在ORNL的展台上展出(如图4)。

除了绘制当前的生态地图外,功能强大的“石头汤计算机”还可以预测出随着全球气候变暖的影响,2099年时美国生态地图的情况。图5显示的就是分别采用两种模型(British Hadley模型和Canadian Climate Centre模型)得出的结果。

小结

据称,“石头汤计算机”的峰值处理能力曾达到过150gigaflops。不过该集群系统的建造者坦言,他们从来没有对该集群系统做过正式的性能测试。他关心的是能够使用该系统来完成他们的工作,不过他们也表示,该系统的理论处理能力应该达到1.2gigaflops左右。

在写本文的时候,“石头汤计算机”集群系统已经在完成了它的使命之后停止了运行。不过作为开放源码应用的一个经典案例,该集群的网站(http://stonesoup.esd.ornl.gov)至今也没有关闭。目的是让我们能够从中得到更多的启示。

就我国而言,集群系统有极其广泛的应用前景,它将促进我国系统集成的发展和自有软件开发和推广。以前一些在大型机运行的国外大型软件都是国外公司与国外计算机生产厂商的紧密合作开发出来的。而我国由于不可能得到一些计算机厂商的底层技术,因此大大限制了国有软件的发展速度及高性能计算的认识水平。现在许多国外大型软件公司都致力将软件移植到PC机系统上,而Linux的发展更是加速了这种更新的步伐。在集群技术日益发展和更新的今天,我们应紧跟国际发展趋势,研究我国的具体应用,开发出更高性能的自有集群系统,普遍提高我国高性能计算水平。
 楼主| admin 发表于 2006-3-25 20:29 | 显示全部楼层
linux应用软件谈之远程桌面控制
这里我要说的不是telnet,rsh之类的远程控制工具,而是指远程控制桌面应用.
X window比MS windows先进的地方是,X window是个基于网络的的图形视窗系统,本身就具有远程控制的强大功能.用户在远程系统上登录执行X 应用程序,并将Xclients执行的结果传回本地主机.这就是我下面要介绍的Remote X


一、Remote X
假设本地主机ip为172.16.1.1,远程的主机ip为172.16.1.2

第一步,在本地主机上的任意一个xterm中执行xhost,用来允许远程的其它主机可以和本地主机的X server联网:
xhost + 172.16.1.2
如果不指定任何ip地址,则表示权限完全放开,这会带来安全问题,要小心!

第二步,确认本地主机的xfs是运行的.用ps检查一下进程.

第三步,从本地主机(172.16.1.1)上通过网络登录到远程主机172.16.1.2上,你用telnet,ssh,rsh都可以.设置DISPLAY变量.
export DISPLAY=172.16.1.1:0

第四步,现在可以使用远程主机上的X 应用程序了.

这么样,很方便吧,但是你还不能掌控整个桌面环境,这个工作就交给vnc吧!Remote X 在局域网上运行效果很不错,普通的电话拨号就不用试了,速度太慢了.


二、vnc
我相信有不少人在windows环境用过pcanywhere,但你想不想用一个免费的,可以在linux,win9x/nt上都可以使用的pcanywhere,这就是vnc.
vnc就是vitual network computing的缩写,它支持许多操作平台,甚至可在浏览器中操作.
我主要介绍vncviewer的用法,以及用linux远程控制linux或nt.
vnc client通过架构在tcp/ip上的vnc协议与vnc server沟通,通过认证后,把X server的桌面环境,输入设备,和X 资源交给vncserver掌控,vnc server将桌面环境通过vnc 协议送给vnc client端.让vnc client来操纵vnc server桌面环境和输入设备.
首先下载到vnc的linux版本和windows版本.
当前的linux版本是vnc-3.3.3r1_x86_linux_2.0.tgz
当前的windows版本是vnc-3.3.3r7_x86_win32.zip

1.安装linux版的vnc
(1)安装
tar zxvf vnc-3.3.3r1_x86_linux_2.0.tgz
cd vnc_x86_linux_2.0
cp *vnc* /usr/local/bin/
mkdir /usr/local/vnc
cp -r classes/ /usr/local/vnc/
(2)设置vnc server的访问密码
vncpasswd
(3)启动vnc server
vncserver
注意运行后显示的信息,记下所用的端口号,一般从1开始,因为0被x server占用了.现在,你就能提供vnc服务了.vnc client的用法等会介绍.

2、安装nt版的vnc
1)安装
解开vnc-3.3.3r7_x86_win32.zip包后,会产生winvnc和vncviewer两个目录.winvnc目录中是vnc server的安装程序,vncviewer目录中是vnc client的安装序.我只关心vnc server,在winvnc目录中执行setup即可.
2)设置
首先执行install default registry settings.
run winvnc(app mode)就是执行vnc server
这时可看到winvnc运行的小图标,用鼠标右键点击图标,在properties/incoming connections中设定密码.默认配置即可.
现在,你的nt就能提供vnc服务了.

3、使用vncviewer
vnc server启动成功后,你就可用vncviewer来远程控制桌面了.
vncviewer xxx.xxx.xxx.xxx:display number
例如,vncviewer 172.16.1.2:1
按要求输入密码就可以看到远程的桌面了.
注意:viewers需要在16位色的显示模式下工作,如果您的操作系统中没上16位色,那么请您及时的调整您计算机的显示模式。不然vncviewer无法正常工作。

4、linux版vnc server的改进.
linux上的vnc server内定的桌面管理环境是twm,实在是太简陋了.
修改$HOME/.vnc/xstartup这个文件.
把所有内容的行前加上#,再在接尾部份加上:
startkde &
你当然可用你喜好的桌面代替.我这是用kde来代替twm,速度会慢少少,但用起来方便不少.
注意要重新启动vnc server.

5、通过浏览器使用vnc
通过浏览器使用vnc,要注意端口号的变化.
假设vnc server是172.16.1.2:1的话,那么,可用浏览器访问http://172.16.1.2:5801
端口号=display number + 5800
好了,心动不如行动,just do it !
 楼主| admin 发表于 2006-3-25 20:29 | 显示全部楼层
Linux下的硬盘提速方案


  目前很多朋友都用上了大容量的DMA或UDMA-33标准的硬盘。在微软的Windows98下为了使得DMA或UDMA-33标准的硬盘提高数据传输速率,可以在计算机的CMOS或操作系统中打开IDE硬盘的DMA(直接存储器存取)这项功能。但是在Linux平台中,Linux是不会自动的打开DMA模式,所以在Linux中使用这些IDE接口的UDMA-33标准的硬盘感觉数据传输远远没有在Windows中快。事实上,Linux平台中也可以通过软件来打开DMA模式,以下就是Linux下的硬盘提速的具体做法。


  首先,在Linux下打开DMA模式之前,最重要的事情就是备份硬盘上的数据。因为在开启DMA模式之后谁也无法预料到硬盘是否还能正常工作,数据是否还完整。把Linux下所有的重要数据备份到其他硬盘或是CD-R等存储媒介上是最好的选择,请不要把数据备份在同一块硬盘上,更不能把数据备份到同一个硬盘分区。
第二步需要修改hdparm目录下的一些设备节点参数。但是修改这些参数必须以超级用户(ROOT)的身份登陆Linux系统才行。普通Linux用户没有这个权限修改hdparm目录下的东西。下面就是一个修改硬盘设备节点参数的例子,注意,不同型号,不同容量的硬盘可能列出的参数不太一样,但是修改的过程和方法大体上是一样的。

# /sbin/hdparm /dev/hda
/dev/hda:
multcount = 0 (off)
I/O support = 0 (default 16-bit)
unmaskirq = 0 (off)
using_dma = 0 (off)
keepsettings = 0 (off)
nowerr = 0 (off)
readonly = 0 (off)
readahead = 8 (on)
geometry = 629/240/63, sectors = 9514260, start = 0
#

  要注意的是,OFF代表此参数不起作用,ON表示打开此功能或模式。上面的参数列表写的非常清楚,Multcount(多扇区读) 没有打开;此硬盘格式为16位格式;DMA数据传输模式没有打开。很显然,这样的参数并没有使硬盘达到最佳的优化,没有能完全发挥当今高速IDE硬盘的性能。
为了优化硬盘,提高硬盘的数据传输速率,首先还是要了解以下这些参数的含义:

c3 :就是把硬盘的16位格式转换为32位模式。
m16 :改变硬盘的多路扇区的读功能,-m16可以使得硬盘一次读入16个扇区的数据。但是不是所有的硬盘都支持这个功能。使用hdparm -i /dev/hda 可以察看您的硬盘最大能读写的扇区数目。
d1X34 在支持DMA-capable的硬盘中,这个参数可以支持双DMA通道的数据传输模式。
d1X66 在支持UDMA-capable的硬盘中,这个参数可以支持双DMA通道的数据传输模式。
  了解以上参数的作用和含义之后,现在请您仔细检查硬盘上面上的标签,看看您的硬盘是否支持DMA 或者 UDMA模式,然后才对照这些参数来优化您的硬盘,以防出现不可预见的错误。
优化硬盘的参数,也可以参考下面的例子,注意,不是所有的硬盘都适用一下的优化参数,请按照实际情况来设置参数:


# hdparm -d1X66 -m16 -c3 /dev/hda
# hdparm /dev/hda
/dev/hda:
multcount = 16 (on)
I/O support = 3 (32-bit w/sync)
unmaskirq = 0 (off)
using_dma = 1 (on)
keepsettings = 0 (off)
nowerr = 0 (off)
readonly = 0 (off)
readahead = 8 (on)
geometry = 629/240/63, sectors = 9514260, start = 0

  修改完这些参数之后,有时候并不能一次性把硬盘优化成功。如果在硬盘还在正常工作的时候修改这些数据,硬盘会进入“休眠”状态。这就需要等硬盘灯会熄灭,硬盘不处于繁忙状态下优化硬盘参数比较容易成功。

  hdparm的改变是一个临时的状态,下次再次启动Linux系统的时候hdparm将会消失。所以要想永久的保存修改后的信息,就必须把修改后的参数和数据写入/etc/rc.d/rc.local或者/etc/rc.local文件,甚至比启动过程要早运行的程序中。

  最后要提醒大家的是,如果您的主板的芯片组或Linux内核kernel(比如内核kernel版本过于陈旧,2.2版以前)如果不支持UDMA模式,那就没有必要去修改硬盘设备的参数了。升级主板或者kernel是解决这个问题的较好选择。
 楼主| admin 发表于 2006-3-25 20:30 | 显示全部楼层
实现自动登录Linux
开机自动登录linux,并自动运行X window应用程序,有其特殊的应用背景,如基于linux平台的监控系统,linux启动后不需要身份验证,而直接运行监控程序等等。本文以Redhat7.2为平台,结合linux启动过程,介绍了如何避免身份验证自动登录,并直接进入X window自动运行应用程序。

一、linux启动的最后阶段的工作

linux 在启动过程的最后阶段(具体启动步骤略),init 会根据 /etc/inittab文件的最后一行x:5:respawn:/etc/X11/prefdm -nodaemon运行/etc/X11/prefdm脚本,(Red hat 7.2缺省时是这样的)。prefdm脚本的主要任务是完成X window的启动,可以有几种启动X window的方法,都包含在prefdm脚本中,几种主要方法有:

运行xdm启动X window;
运行gdm,进入gnome桌面环境;
运行kdm进入kde桌面环境;
自动登录进入linux;

prefdm脚本框架大致如下:


#!/bin/sh
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin
. /etc/profile.d/lang.sh
# 第一步:查看是否为自动登录
if [ -f /etc/sysconfig/autologin -a -x /usr/sbin/autologin ]; then
if /usr/sbin/autologin; then
exit 0
fi
fi
# 第二步:如果不是自动登录方式,就会在/etc/sysconfig/desktop中搜寻用户偏爱的登录方式
......
# 可以是kdm、gdm以及xdm,并运行相应的kdm、gdm以及xdm。
......




二、自动登录的实现(autologin的实现)

在/etc/X11/prefdm脚本中,是否实现自动登录有一个条件测试开关,事实上,可以在这里注释掉测试开关,直接执行启动X window的操作。

自动登录实质上就是绕过身份验证,直接启动X window。X window的启动可以由xinit来完成。

Xinit用来启动X window系统服务器以及系统上的第一个客户程序,可以通过为xinit传递命令行参数的形式指定要启动的服务器及客户程序。如果不传递参数给xinit,它将在用户的根目录下寻找并运行 .xinitrc脚本来启动客户程序;在用户的根目录下寻找并运行 .xserverrc脚本来启动服务器。如果xinit在用户的根目录下找不到.xinitrc、.xserverrc,xinit将使用缺省的X :0。
实际上,用startx来启动X更为方便。对于运行单一会话的X window 系统,startx提供了更为良好的用户接口。同样,startx首先在用户的根目录下寻找 .xinitrc及.xserverrc脚本,如果找不到这两个脚本,startx将使用/etc/X11/xinit/xinitrc以及/etc/X11/xinit/xserverrc脚本。
startx脚本的最基本框架是:

a、 寻找.xinitrc,如果没有则使用xinitrc;
b、 寻找.xserverrc,如果没有则使用xserverrc;
c、 根据找到的脚本确定xinit的参数;

由此可看出,startx在不需要传递任何参数的情况下,可以完成启动X的任务,因此,可以如下修改/etc/X11/prefdm脚本来实现自动登录:


#!/bin/sh
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin
. /etc/profile.d/lang.sh
# 第一步:查看是否为自动登录
#if [ -f /etc/sysconfig/autologin -a -x /usr/sbin/autologin ]; then
#注释掉上边的条件测试,直接运行startx
if /usr/X11R6/bin/startx; then
exit 0
fi
#fi




当然,应确保/etc/inittab中的启动级别为5。


重新启动系统,会发现系统不验证用户身份,直接进入X window,此时的用户身份为root。但是,如果原来root有自己的桌面、默认shell时,上述方法启动X不一定保证还能拥有原来的设置。为了在启动X后,在避免验证身份的同时,又不改变用户原来的设置,那么在运行startx之前,还有工作要做。
 楼主| admin 发表于 2006-3-25 20:30 | 显示全部楼层
接上
三、自动登录后,保持用户原来的配置(桌面、shell以及其它的一些环境变量)。

观察原来/etc/X11/prefdm脚本的自动登录部分:


......
# 第一步:查看是否为自动登录
if [ -f /etc/sysconfig/autologin -a -x /usr/sbin/autologin ]; then
if /usr/sbin/autologin; then
exit 0
fi
fi
......




不难看出,脚本中保留了自动登录的接口:一个可执行文件/usr/sbin/autologin以及一个配置文件/etc/sysconfig/autologin。

1、/etc/sysconfig/autologin配置文件的实现:


#config for autologin
USER=root
EXEC=/usr/X11R6/bin/startx
说明,USER指定自动登录时的用户名;EXEC指定启动X要运行的程序。





2、/usr/sbin/autologin可执行文件的实现:


/*********************
**** autologin.c ****
*********************/
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <pwd.h>
int main(int argc, char **argv)
{
struct stat st;
FILE *f;
char *cfg;
struct passwd *pw;
uid_t uid;
gid_t gid;
char *dir, *shell;
char *user=NULL;
char *cmd=NULL;
user="root";
/*为了能说明问题又保持程序简洁,这里默认登录用户为root,实际上,
登陆用户名应该从/etc/sysconfig/autologin中得到,
程序实现时要注意过滤掉/etc/sysconfig/autologin中的无效用户名*/
cmd="/usr/X11R6/bin/startx";
/*同样,这里直接指定启动X window的程序,实际上,该程序应该从/etc/sysconfig/autologin中得到*/
pw = getpwnam(user);
//getpwnam返回包含用户信息的passwd结构(该结构在pwd.h中定义)。
if(pw) {
uid=pw->pw_uid;
gid=pw->pw_gid;dir=strdup(pw->pw_dir);
shell=strdup(pw->pw_shell);
}
//获得用户相关信息
else {
printf("ERROR: No such user %s!\n", user);
return 1;
}
chown("/dev/console", uid, gid);
chown("/dev/tty", uid, gid);
//为控制台和终端设置用户ID及组ID

//下面是设置用户相关ID
setregid(gid, gid);
setegid(gid);
setgid(gid);
setreuid(uid, uid);
seteuid(uid);
setuid(uid);
setenv("HOME", dir, 1);
setenv("SHELL", shell, 1);
setenv("USER", user, 1);
setenv("LOGNAME", user, 1);
//设置用户相关环境变量
chdir(dir);
//切换到用户根目录
user=NULL;
execvp(cmd, argv);
/*在配置完用户的相关信息后,执行启动X window操作。注意这里默认执行/usr/X11R6/bin/startx */
printf("ERROR: Couldn't exec %s: %s\n", cmd, strerror(errno));
return 2;
}




运行gcc -o autologin autologin.c,拷贝autologin可执行文件到/usr/sbin/autologin,拷贝autologin配置文件到/etc/sysconfig/autologin。 重新启动系统,会直接进入X window并保留用户原来所有的风格。


如果不需要自动登录的配置文件/etc/sysconfig/autologin,所有的操作都在/usr/sbin/autologin以默认的方式实现(比如,默认登录身份为root,默认执行操作为/usr/X11R6/bin/startx等),那么,/etc/X11/prefdm脚本的自动登录部分可简化如下:


......
# 第一步:查看是否为自动登录
if /usr/sbin/autologin; then
exit 0
fi
//第二步......
......




即在脚本中去掉条件测试开关,直接执行/usr/sbin/autologin,这时,只需要拷贝autologin可执行文件到/usr/sbin/autologin,不再需要拷贝autologin配置文件到/etc/sysconfig/autologin。

四、选择进入kde或者gnome,并自动启动X window应用程序

如果重新启动后系统进入了kde,而用户需要进入gnome,只需运行switchdesk gnome在重新启动系统即可,以后每次启动时会自动进入gnome;反之亦然。
一般系统自动登录的目的是启动X window 后自动运行某个X window程序。如果系统默认的启动级别为3,那么如果要在系统启动后自动运行某些应用程序,只需要在某些脚本中加入相应命令即可,不再详述。在X window启动后自动运行应用程序要复杂一些,幸好,kde和gnome都为此留下了自动启动接口。如果在kde桌面环境下自动启动应用程序,只需要把应用程序名字加入/root/.kde/Autostart/目录下即可(这里注意不同用户的根目录可能不同,如用户zyx的根目录可能为/home/zyx)。如果在gnome桌面环境下自动启动应用程序,只需把应用程序的名字加入/主菜单/程序/设置/会话/会话特性及启动程序的startup programs属性页中即可。
 楼主| admin 发表于 2006-3-25 20:30 | 显示全部楼层
对光驱、软驱实现AutoMount
软件环境:Redhat Linux 6.0
目 的:在使用Linux的过程中,我们经常需要使用光盘和软盘,每次使用时都要mount,用完还要umount非常麻烦,可以使这些工作变得自动化。

实现方法:

1. 安装完Redhat Linux 6.0之后,运行ntsysv,选中服务后台程序autofs.autofs的两个配置文件在/etc/auto.misc 和 /etc/auto.master

2. /etc/auto.master定义了mount目录和mount所需的配置文件名及其空闲时自动umount的时间。 下面是默认配置。

[jephe@sh3 /etc]$ more auto.master
/misc /etc/auto.misc --timeout 60

3. 下面是我的/etc/auto.misc配置文件:

[jephe@sh3 /etc]$ more auto.misc
cdrom -fstype=iso9660,ro :/dev/cdrom
floppy -fstype=vfat :/dev/fd0
e2floppy -fstype=ext2 :/dev/fd0

注:
a.确保/dev/cdrom作为符号链接指向你的光驱所在的分区,作为我的情况:

[jephe@sh3 /dev]$ ls cdrom -l
lrwxrwxrwx 1 root root 3 Aug 26 08:44 cdrom -> hdd

b.当软盘为windows 95格化化的vfat分区类型时,设定了安装目录/misc/floppy
c.当软盘为Linux格式化过的ext2分区类型时,设定了安装目录/misc/e2floppy

4. 至此,若还未启动autofs,则运行/etc/rc.d/init.d/autofs start, 若对上述两个文件中做过任何更改,运行/etc/rc.d/init.d/autofs restart即可。

5. 放入一片光盘进入光驱后,不需任何动作,直接进入目录/misc/cdrom,autofs 将自动先为你mount光驱同样,若放入一张vfat格式的软盘,你可以
cd /misc/floppy,
若是ext2格式的软盘,则cd /misc/e2floppy. 在超过一分钟未使用它们,且当前目录不是自动mount目录/misc/cdrom,/misc/floppy,/misc/e2floppy,系统将自动umount它们。
 楼主| admin 发表于 2006-3-25 20:30 | 显示全部楼层
Linux下面光盘刻录
在linux下刻盘分四部曲:

1.编译内核(依系统情况可以略过).
2.加载相应驱动模块.
3.制作iso9660文件系统的映象文件
4.刻盘

缺省情况下,你的linux内核或许不支持SCSI设备,而现在的刻录机却许多接在一个scsi卡上的.因此,在这种情况下,需要从新编译内核,让它支持SCSI设备,并且要根据SCSI卡所采用的芯片,将其编译到内核或编译成模块.此外,为方便测试将要刻录的映象文件,还应该编译时在块设备里面选择支持"LOOPBACK DEVICE SUPPORT".最后,还要选择"SCSI generic support",将其编译成模块,这专门是为支持这种连接在一块SCSI卡上的刻录机刻录时用的.

然后,重新启动系统,启动过程中会检测SCSI设备,因为检测的特别快,可能看不清. 没有关系,登录后用"dmesg"命令来看系统查到了什么东西,比如屏幕上打印了这么一块信息:

sym53c8xx: at PCI bus 0, device 9, function 0
sym53c8xx: setting PCI_COMMAND_PARITY...(fix-up)

sym53c8xx: 53c810a detected
sym53c810a-0: rev=0x23, base=0xe6000000, io_port=0xe400, irq=11
sym53c810a-0: ID 7, Fast-10, Parity Checking
sym53c810a-0: restart (scsi reset).
scsi0 : sym53c8xx - version 1.3c
scsi : 1 host.
Vendor: MATSHITA Model: CD-R CW-7502 Rev: 4.17
Type: CD-ROM ANSI SCSI revision: 02

当然了,这是在我的系统启动时打印的信息,如果你没有看到类似的信息,说明你没有把SCSI卡所用芯片编译到内核或在系统启动时没有把自动加载相应的驱动模块(通过配制/etc/conf.modules在启动时加载相应模块).这时候,你可以手工加载模块.当模块加载到系统中后,就应该出现以上类似的信息了.在我用的SCSI卡上采用的芯片BIOS是"SYMBIOS 53C810AE",因此在编译内核时选择了"SYM53C8XX SCSI SUPPORT",并把它编译成模块.下面简单介绍一下以上信息:

首先它显示在PCI插槽上发现了SCSI卡,紧接着,发现了SCSI卡上连接的设备,它的ID号是7,在scsi0上.

当找到设备后,剩下的事情就简单了,现在需要找的就是一些制作ISO映象程序刻录时用的软件.我用的软件是cdrecord,软件很不错,本身可以在SCSI卡上检测所连接设备,也支持multi-session刻录(允许你一次刻不完下次再刻).制作ISO映象文件用的是mkisofs这个程序,一般的linux都带这个包,在redhat中包的名字和文件的名字一样.

假如我有一个整理好待刻的目录,里面有一堆很好的收藏.我首先把用下面的命令作成一个ISO格式的映象文件(这并不是刻录,只是在硬盘上按1:1的比例将要刻的东西作并不是刻录,只是在硬盘上按1:1的比例将要刻的东西作成一个映象):

mkisofs -r -o cd_image my_private/

"-r"指明将所有的文件属性变成对所有人是可读属性的,"-o"是输出, my_private是要刻东西所在的目录.

作完映象文件后,可以检测它是否正确,此时要加载曾经编译的loop模块,将此映象文件作为一个文件系统"mount"上来.

mount -t iso9660 -o ro,loop=/dev/loop0 cd_image /mnt/cdrom

进入/mnt/cdrom就可以查看文件是否正确.主意的是,用mkisofs可以制作带光盘启动的映象,这要通过"-b"参数,"-b"后面紧接着的是可以启动的内核文件,它的大小是有限制的,必须是1.2或1.44或2.88MB,它的路径也是相对于my_private目录而言的.

最后一步,"天下无盘",你可别刻费了吆.:-) 现在就开始真正动手了.用下载来的刻录软件进行刻录.

这里只对cdrecord进行简略介绍,还有一些图形界面的刻录工具,各位就自己找吧.关于cdrecord可以在 http://hkt.linuxberg.com这个网站找到.用

cdrecord -scanbus

可以显示出下列类似信息:

Cdrecord release 1.6.1 Copyright (C) 1995-1998 J鲵g Schilling
scsibus0:
0) *
1) *
2) *
3) *
3) *
4) *
5) *
6) 'MATSHITA' 'CD-R CW-7502 ' '4.17' Removable CD-ROM

ID号为7的一个刻录机找到,下面开始了.

cdrecord -v speed=2 dev=6,0 cd_image

"speed=2"指明刻盘速度为2倍速, "dev=6,0"指明关于刻录设备的一些信息,完整的形式是"dev=devicename:scsibus,target,lun",我们这里只有一个接在SCSI卡上的设备, 因此只些了简略形式"dev=target,lun",其中devicename是CD-R所对应的设备名,SCSIBUS是SCSI总线号,TARGET就是刚才检测出来的第六项,LUN指的是SCSI设备的逻辑单元号,一般的SCSI设备只支持一个LUN.

RSS|无图版|手机版|友声网 ( 鲁ICP备15020090号-1 )|网站地图 | 点击这里给我发消息 |

GMT+8, 2024-3-29 12:50 , Processed in 0.091395 second(s), 4 queries , MemCache On.

Powered by Discuz! X

© ys166.com

快速回复 返回顶部 返回列表