嵌入式技术
BSD和SYSV是世上最正统的UNIX操作系统,在LINUX出现之前,他们统治了整个UNIX世界。也正因为此,这两个最正统的UNIX核心流派都在实践中积累丰富的经验。SYSV偏向于商业,BSD更偏向于自由和实用。
现在,本文只讨论BSD流派最活跃的发行版FreeBSD。FreeBSD作为最重要的一个BSD发行版,它保持了BSD自由和实用的原则。但亦因为此而忽略很多商业的考虑的相应的功能。凭藉我自己多年UNIX的使用经验,列出一些BSD的优势与不足,希望以此作为读者的参考。
网络:
FreeBSD 的网络性能非常好,可以同时处理海量的网络请求,这使 BSD 非常适合作为防火墙的环境。另外,在网络聊天服务器,如 IM 这种应用上,FreeBSD 也是很合适的选择。网易的 POPO 聊天软件服务器端就是在 FreeBSD 下开发并投入到实际环境中使用的,通过对内核的修改,可以轻松支持数以万计的用户连接,要注意,是永久性的连接,除非用户点击注销按钮。
内存:
你 会发现你服务器上的内存会被 FreeBSD 很好地利用,以使你的服务达至最佳的状态。FreeBSD 不会因为将过多的内存用于磁盘 CACHE 而使更重要的程序获取不到物理内存而让系统使用 SWAP。在实际的环境中,我就遇到过 LINUX 为保持磁盘的 CACHE,而让新任务使用 SWAP,导致新任务执行时间大大拉长。在执行 swapoff -a 操作后,运行同样的新任务只需要原来时间的一半。而系统并没有因为关闭 SWAP 而停机,表示物理内存并没有因为新任务而被耗尽。
一个例子:
Memcached 是一个非常出众的基于内存的缓存服务器。它可以为被其支持的程序语言提供串行化数据保存的功能,这样可以让同一份数据被多台服务器共享,而更重要的是,它的速度非常快。
我 可以利用 PHP 或 JAVA 从数据库中获取数据结果集,然后将结果集的内容保存进 Memcached,其他服务器上的程序同样可以相应的 key 从 Memcached 中获得相同的拷贝。在分布式的环境,这种需求非常明显。我自己也尝试当 SESSION 数据保存至 Memcached 而无需为共享 SESSION 数据而专门架设一台 MYSQL 数据库。
在利用 Memcached 作为数据的中心点,网络的流量会非常大,内存的使用会非常频繁,基本上不与磁盘打交道,而且整个系统的稳健性要求非常高。在这种应用需求下,FreeBSD 自然地成为首选。因为它为高效的网络性能,更合理的内存利用率,和稳健的系统基础。
文件系统:
FreeBSD的文件系统属于中上水平,但未达至企业级的应用需求。主要体现于文件系统本身存在的脆弱性。在高负载的情况下,文件系统存在有崩溃的可能性。需要注意的是,导致这样的结果,也有可能由于磁盘控制器(SCSI,RAID等等)驱动程序本身导致的。没有原厂设备驱动程序是个比较大的问题。
网络:
FreeBSD的网络性能是无用置疑的!但是网卡驱动(是的,设备驱动是个很重要的因素)不完善会导致性能和稳定性大打节扣。虽然这与FreeBSD的核心没有关系,但对于一个可提供服务的整体来说,驱动程序却是一个很重要的组成部份。
另外,由于一个网卡接口上的线的松动,有可能导致网络中断。而一些商业化的UNIX操作系统可以在当主网卡不可用时将该网卡上的IP转移至可提供正确连接的网卡上。
多处理器(超线程)支持:
在6.0出版之前,FreeBSD对多处理器支持是不尽人意的。INTELCPU提供有HT(超线程)功能。FreeBSD在HT开启的状态下会比在关闭的状态下差。我忘记了超线程的原理,只记得拥有超线程功能的CPU在过多的切换情况下性能就会降低,不过在什么时候切换和切换些什么我忘记了。FreeBSD在开启HT后性能会变差,可能与这个有关。
系统是刚装的FreeBSD8.0Release,athlon3000+处理器,Nvidia6100集成显卡,明基FP71G显示器,USB鼠标,PS2键盘
首先当然是Xorg的安装,可以用下面的命令安装
pkg_add -r xorg
我输入上面命令后提示xorg已经安装,应该是在装系统时已经安装了
然后输入
startx
发现可以成功的启动X,不过不能响应键盘鼠标的输入,使用Xorg -configure产生的xorg.conf文件反倒不能启动X(启动X后可以用ctrl+alt+backspace退出图形界面)
安装kde4
pkg_add_r kde4
同样的,系统提示已经安装kde4
然后告诉X server 启动这个应用程序来代替默认的窗口管理器,这可以通过编辑.xinitrc来完成:
echo “exec /usr/local/kde4/bin/startkde” 》 ~/.xinitrc
现在,输入startx就可以启动kde桌面环境了,不过分辨率还不够,另外,我的USB鼠标还是不能用
为了使每个用户都能正常进入kde4桌面环境,需要对每个用户都进行上面的配置(.xinitrc文件)
为了提供图形化的登录界面,还需要编辑/etc/ttys文件,修改其中的ttyv8项,将其改为下面的样子:
ttyv8 “/usr/local/kde4/bin/kdm -nodaemon” xterm on secure
然后输入reboot重启,就能自动出现图形登录界面了,不过郁闷的是似乎不接受我的鼠标键盘输入,
这个问题手册上没写,GOOGLE了一下,改了一堆乱七八糟的配置,其中被改动的文件有:
1)/etc/rc.conf,改到最后是这个样子:
# -- sysinstall generated deltas -- # Sat Dec 12 06:09:48 2009
# Created: Sat Dec 12 06:09:48 2009
# Enable network daemons for user convenience.
# Please make all changes to this file, not to /etc/defaults/rc.conf.
# This file now contains just the overrides from /etc/defaults/rc.conf.
hostname=“FreeBSD.domain”
ifconfig_rl0=“DHCP”
inetd_enable=“YES”
keymap=“us.iso” # 《=键鼠配置可能是从这里开始的
moused_enable=“NO”
#moused_port=“/dev/psm0”
moused_port=“dev/ums0”
usbd_enable=“YES”
usb_flags=“”
moused_type=“NO”
dbus_enable=“YES”
hald_enable=“YES” # 《=到这里结束
nfs_client_enable=“YES”
nfs_server_enable=“YES”
2)/etc/devd.conf,搜索moused找到下面的部分:
attach 100 {
device-name “ums[0-9]+”;
action “/etc/rc.d/moused quietstart $device-name”;
};
detach 100 {
device-name “ums[0-9]+”;
action “/etc/rc.d/moused stop $device-name”;
};
将其修改为:
attach 100 {
device-name “ums[0-9]+”;
#action “/etc/rc.d/moused quietstart $device-name”;
action “/usr/sbin/moused -p /dev/ums0 -t auto -I /var/run/moused.pid”;
};
detach 100 {
device-name “ums[0-9]+”;
#action “/etc/rc.d/moused stop $device-name”;
action “echo ‘(unplug)’ 》 /var/run/moused.pid”;
};
到这里,已经可以响应键鼠的输入了,但是分辨率太低的问题还是没解决,关键是按照我前面的步骤,我的/etc/X11/下还没有xorg.conf呢
只好回到前面,开始修改/root/xorg.conf.new,修改其中的Section “Screen”部分为如下的样子
Section “Screen”
Identifier “Screen0”
Device “Card0”
DefaultDepth 24
Monitor “Monitor0”
SubSection “Display”
Viewport 0 0
Depth 24
Modes “1280x1024” “800x600” “640x480”
EndSubSection
EndSection
其中1280x1024是我的显示器的分辨率
然后startx,很不幸,系统提示只能启动一个X server,怒了,修改/etc/ttys中的ttyv8项:
ttyv8 “/usr/libexec/getty Pc” cons25 on secure
#ttyv8 “/usr/local/kde4/bin/kdm -nodaemon” xterm on secure
重启。
开始重新捣腾X配置
运行Xorg -config xorg.conf.new,不行,于是
cp xorg.conf.new xorg.conf.test
vi xorg.conf.test
将其余部分全部删除,只保留Section “Screen”部分
还是不能启动X,报以下错误:
(EE) Failed to load module “fbdev” (module does not exist, 0)
上网求助,在
http://www.linuxquestions.org/questions/bsd-17/x-not-starting-on-freebsd-6.1-release-504004/
找到建议
#cd /usr/ports/x11/nvidia-driver/ && make install clean
但是郁闷的是ports中的驱动只支持32位系统,而我装的是amd64版,上官方网站下驱动吧
官方下载的驱动还不支持8.0系统,哎……
寻找直接安装32位软件的办法无果后,直接装了个xf86-video-nv
cd /usr/ports/x11-drivers/xf86-video-nv
make install clean
完成后继续运行
Xorg -config xorg.conf.new
还是不行
重新运行Xorg -configure之后尝试,继续失败
不管了,直接将xorg.conf.new复制到/etc/X11
cp ~/xorg.conf.new /etc/X11/xorg.conf
然后对其中相应的配置做了改动,比如刷新率,分辨率等
输入startx,终于把分辨率调好了,但是新问题又来了,我的鼠标呢?鼠标移动的时候倒是可以看到偶尔有地方变量,并且可以点击,说明鼠标输入还是有的,但是指针不见了
这个问题我以前遇见过,修改xorg.conf中的 Section “Device”部分,在下面增加一句:Option “HWCursor” “false”,重启x window 就可以看见了
最后将/etc/ttys中ttyv8项修改回来,reboot一下,一切都是那么美好,唯一有点瑕疵的是任务栏右侧没有顶到屏幕边沿,这个直接拖一下就好了
明天继续整中文显示
附:最后我的xorg.conf
Section “ServerLayout”
Identifier “X.org Configured”
Screen 0 “Screen0” 0 0
InputDevice “Mouse0” “CorePointer”
InputDevice “Keyboard0” “CoreKeyboard”
EndSection
Section “Files”
ModulePath “/usr/local/lib/xorg/modules”
FontPath “/usr/local/lib/X11/fonts/misc/”
FontPath “/usr/local/lib/X11/fonts/TTF/”
FontPath “/usr/local/lib/X11/fonts/OTF”
FontPath “/usr/local/lib/X11/fonts/Type1/”
FontPath “/usr/local/lib/X11/fonts/100dpi/”
FontPath “/usr/local/lib/X11/fonts/75dpi/”
EndSection
Section “Module”
Load “dbe”
Load “dri”
Load “dri2”
Load “extmod”
Load “glx”
Load “record”
EndSection
Section “InputDevice”
Identifier “Keyboard0”
Driver “kbd”
EndSection
Section “InputDevice”
Identifier “Mouse0”
Driver “mouse”
Option “Protocol” “auto”
Option “Device” “/dev/sysmouse”
Option “ZAxisMapping” “4 5 6 7”
EndSection
Section “Monitor”
Identifier “Monitor0”
VendorName “Monitor Vendor”
ModelName “Monitor Model”
HorizSync 31.5-64.0
VertRefresh 56.0-65.0
Option “dpms”
EndSection
Section “Device”
### Available Driver options are:-
### Values: : integer, : float, : “True”/“False”,
### : “String”, : “ Hz/kHz/MHz”
### [arg]: arg optional
#Option “SWcursor” # []
#Option “HWcursor” # []
#Option “NoAccel” # []
#Option “ShadowFB” # []
#Option “UseFBDev” # []
#Option “Rotate” # []
#Option “VideoKey” #
#Option “FlatPanel” # []
#Option “FPDither” # []
#Option “CrtcNumber” #
#Option “FPScale” # []
#Option “FPTweak” #
#Option “DualHead” # []
Identifier “Card0”
Driver “nv”
VendorName “nVidia Corporation”
BoardName “C51G [GeForce 6100]”
BusID “PCI:0:5:0”
Option “HWCursor” “false”
EndSection
Section “Screen”
Identifier “Screen0”
Device “Card0”
Monitor “Monitor0”
DefaultDepth 24
SubSection “Display”
Viewport 0 0
Depth 1
Modes “1280x1024”
EndSubSection
EndSection
Section “ServerLayout”
Identifier “X.org Configured”
Screen 0 “Screen0” 0 0
InputDevice “Mouse0” “CorePointer”
InputDevice “Keyboard0” “CoreKeyboard”
EndSection
Section “Files”
ModulePath “/usr/local/lib/xorg/modules”
FontPath “/usr/local/lib/X11/fonts/misc/”
FontPath “/usr/local/lib/X11/fonts/TTF/”
FontPath “/usr/local/lib/X11/fonts/OTF”
FontPath “/usr/local/lib/X11/fonts/Type1/”
FontPath “/usr/local/lib/X11/fonts/100dpi/”
FontPath “/usr/local/lib/X11/fonts/75dpi/”
EndSection
Section “Module”
Load “dbe”
Load “dri”
Load “dri2”
Load “extmod”
Load “glx”
Load “record”
EndSection
Section “InputDevice”
Identifier “Keyboard0”
Driver “kbd”
EndSection
Section “InputDevice”
Identifier “Mouse0”
Driver “mouse”
Option “Protocol” “auto”
Option “Device” “/dev/sysmouse”
Option “ZAxisMapping” “4 5 6 7”
EndSection
Section “Monitor”
Identifier “Monitor0”
VendorName “Monitor Vendor”
ModelName “Monitor Model”
HorizSync 31.5-64.0
VertRefresh 56.0-65.0
Option “dpms”
EndSection
Section “Device”
### Available Driver options are:-
### Values: : integer, : float, : “True”/“False”,
### : “String”, : “ Hz/kHz/MHz”
### [arg]: arg optional
#Option “SWcursor” # []
#Option “HWcursor” # []
#Option “NoAccel” # []
#Option “ShadowFB” # []
#Option “UseFBDev” # []
#Option “Rotate” # []
#Option “VideoKey” #
#Option “FlatPanel” # []
#Option “FPDither” # []
#Option “CrtcNumber” #
#Option “FPScale” # []
#Option “FPTweak” #
#Option “DualHead” # []
Identifier “Card0”
Driver “nv”
VendorName “nVidia Corporation”
BoardName “C51G [GeForce 6100]”
BusID “PCI:0:5:0”
Option “HWCursor” “false”
EndSection
Section “Screen”
Identifier “Screen0”
Device “Card0”
Monitor “Monitor0”
DefaultDepth 24
SubSection “Display”
Viewport 0 0
Depth 1
Modes “1280x1024”
EndSubSection
EndSection
Section “ServerLayout”
Identifier “X.org Configured”
Screen 0 “Screen0” 0 0
InputDevice “Mouse0” “CorePointer”
InputDevice “Keyboard0” “CoreKeyboard”
EndSection
Section “Files”
ModulePath “/usr/local/lib/xorg/modules”
FontPath “/usr/local/lib/X11/fonts/misc/”
FontPath “/usr/local/lib/X11/fonts/TTF/”
FontPath “/usr/local/lib/X11/fonts/OTF”
FontPath “/usr/local/lib/X11/fonts/Type1/”
FontPath “/usr/local/lib/X11/fonts/100dpi/”
FontPath “/usr/local/lib/X11/fonts/75dpi/”
EndSection
Section “Module”
Load “dbe”
Load “dri”
Load “dri2”
Load “extmod”
Load “glx”
Load “record”
EndSection
Section “InputDevice”
Identifier “Keyboard0”
Driver “kbd”
EndSection
Section “InputDevice”
Identifier “Mouse0”
Driver “mouse”
Option “Protocol” “auto”
Option “Device” “/dev/sysmouse”
Option “ZAxisMapping” “4 5 6 7”
EndSection
Section “Monitor”
Identifier “Monitor0”
VendorName “Monitor Vendor”
ModelName “Monitor Model”
HorizSync 31.5-64.0
VertRefresh 56.0-65.0
Option “dpms”
EndSection
Section “Device”
### Available Driver options are:-
### Values: : integer, : float, : “True”/“False”,
### : “String”, : “ Hz/kHz/MHz”
### [arg]: arg optional
#Option “SWcursor” # []
#Option “HWcursor” # []
#Option “NoAccel” # []
#Option “ShadowFB” # []
#Option “UseFBDev” # []
#Option “Rotate” # []
#Option “VideoKey” #
#Option “FlatPanel” # []
#Option “FPDither” # []
#Option “CrtcNumber” #
#Option “FPScale” # []
#Option “FPTweak” #
#Option “DualHead” # []
Identifier “Card0”
Driver “nv”
VendorName “nVidia Corporation”
BoardName “C51G [GeForce 6100]”
BusID “PCI:0:5:0”
Option “HWCursor” “false”
EndSection
Section “Screen”
Identifier “Screen0”
Device “Card0”
Monitor “Monitor0”
DefaultDepth 24
SubSection “Display”
Viewport 0 0
Depth 1
Modes “1280x1024”
EndSubSection
EndSection
全部0条评论
快来发表一下你的评论吧 !