Google

星期四, 十一月 30, 2006

Install Chinese fonts support for Unbuntu

  • [Ubuntu] - Linux for human beings
    • 软件仓库分类:universe
    • 安装包文件名:xfonts-wqy
    • 安装方法:sudo apt-get install xfonts-wqy
    • 对应WQY版本:0.6.0
    • 维护人:Carlos Liu (carlosliu # users_sourceforge_net)
Original from:[ http://wqy.sourceforge.net/cgi-bin/index.cgi?SpreadWQY]

[学习]FVWM-Introduction to FvwmButtons

taviso

FvwmButtons, also known as GoodStuff, is sometimes overlooked by new
fvwm users, despite being the most powerful software for creating
desktop panels available today.

I've written this guide to introduce FvwmButtons to new users, and
take anyone interested step by step through creating a simple panel.
Hopefully this will help get you started a little quicker than the man
page alone :).

This is the panel I am going to create.

http://dev.gentoo.org/~taviso/goodstuff1.png

It's very simple, has a set of nine buttons that can be bound to
applications or window controls. It also has an xclock along the top.

Of course, FvwmButtons has many, many features I havn't mentioned
here, but this should be enough to get started :)

Step 1: Planning

Fvwm uses a flat text based configuration, which is not an intuitive
method for designing user interfaces. The solution is to use a
graphics package to create a template to work from. You can use any
package you like, The GIMP, xpaint, dia, or even xfig.

Here is a screenshot of me planning this panel in dia..

http://dev.gentoo.org/~taviso/goodstuff2.png

As you can see I have an outline and the approximate layout of the
buttons all plotted in dia. Don't worry about this template being
perfect, we are just going to use it to estimate the dimensions in the
next step.

Step 2: Dimensions

Now that you have a template to work from, you can calculate what the
minimum grid size you will need in order to contain your buttons.

This is a lot simpler than it sounds, we just need to know how many
rows and columns we should split our panel into. Each button can take
up any whole number of grid squares, so we just have to make sure we
have enough.

http://dev.gentoo.org/~taviso/goodstuff3.png

As you can see, we need a minimum grid of 7 rows and 3 columns so that
each button occupies a whole number of grid squares. The top button
requires one row and 3 columns, the other buttons need 2 rows and 1
columns.

Step 3: Create Buttons

Now that we have the dimensions needed, we can make an absolute
minimum FvwmButtons configuration to test the dimensions.

You can tweak the button geometries and grid size until everything looks right.

代码:
DestroyModuleConfig LaunchTime: *
*LaunchTime: Rows 7
*LaunchTime: Columns 3
*LaunchTime: (3x1)
*LaunchTime: (1x2)
*LaunchTime: (1x2)
*LaunchTime: (1x2)
*LaunchTime: (1x2)
*LaunchTime: (1x2)
*LaunchTime: (1x2)
*LaunchTime: (1x2)
*LaunchTime: (1x2)
*LaunchTime: (1x2)


As you can see, each configuration line for our panel starts with an
asterisk, then the panel alias. Lines that dont use brackets are
settings, lines that do are button definitons. The buttons defined
here only have one setting, how many rows and columns they need.

You can enter this in your fvwm2rc and restart, or paste it into an
FvwmConsole. I've used DestroyModuleConfig so that if you paste the
configuration into FvwmConsole twice, fvwm knows that you are not
trying to continue the same configuration.

Now lets try starting the panel, enter the following into your FvwmConsole

代码:
Module FvwmButtons -g 178x207 LaunchTime


The -g specifies the Geometry, it tells FvwmButtons how big you want
the panel to be (and also where you want it to appear).

Hopefully, you should see a window like this

http://dev.gentoo.org/~taviso/goodstuff4.png

Not very exciting yet, but don't worry, move on to the next step where
we will configure the buttons and add the bindings.

Step 4: Fill in the blanks

Swallowing is what FvwmButtons calls Reparenting, it basically means
any application window can be used as a button on your panel. So lets
use this concept to swallow an xclock into our new panel.

First lets find a command line for xclock that looks suitable for our panel.

代码:
xclock -bg '#31658c' -fg white -digital -face 'Aquafont:size=11'
-strftime '%a, %d %b %Y %H:%M'


This is what I have used. Now lets tell our panel how to start the clock.

代码:
*LaunchTime: (3x1, Swallow "xclock" `Exec xclock -bg '#31658c' -fg
white -digital -face 'Aquafont:size=11' -strftime '%a, %d %b %Y
%H:%M'`)


The first setting is the Rows and Columns we want, then the Swallow
command. the next argument is the name of the window FvwmButtons
should look out for, followed by the Fvwm command needed to start the
window.

Here is our new Panel:

代码:
DestroyModuleConfig LaunchTime: *
*LaunchTime: Rows 7
*LaunchTime: Columns 3
*LaunchTime: (3x1, Swallow "xclock" `Exec xclock -bg '#31658c' -fg
white -digital -face 'Aquafont:size=11' -strftime '%a, %d %b %Y
%H:%M'`)
*LaunchTime: (1x2)
*LaunchTime: (1x2)
*LaunchTime: (1x2)
*LaunchTime: (1x2)
*LaunchTime: (1x2)
*LaunchTime: (1x2)
*LaunchTime: (1x2)
*LaunchTime: (1x2)
*LaunchTime: (1x2)


Enter the configuration into your FvwmConsole, and start the panel to
make sure everything has worked, hopefully you will see a window like
this:

http://dev.gentoo.org/~taviso/goodstuff5.png

Now for the next button, Let's make it a launcher for The GIMP.

代码:
*LaunchTime: (1x2, Title "gimp", Icon graphics_paint_edit.png)


As you can see, we have the dimensions, a Title and an Icon. All we
need now is to define an Action. Actions are responses to Clicks, so
lets say we want the first mouse button to start the gimp.

代码:
Action(Mouse 1) `Exec gimp`


Lets enter this into the button definition.

代码:
*LaunchTime: (1x2, Title "gimp", Icon graphics_paint_edit.png,
Action(Mouse 1) `Exec gimp`)


The configuration should now look like this:

代码:
DestroyModuleConfig LaunchTime: *
*LaunchTime: Rows 7
*LaunchTime: Columns 3
*LaunchTime: (3x1, Swallow "xclock" `Exec xclock -bg '#31658c' -fg
white -digital -face 'Aquafont:size=11' -strftime '%a, %d %b %Y
%H:%M'`)
*LaunchTime: (1x2, Title "gimp", Icon graphics_paint_edit.png,
Action(Mouse 1) `Exec gimp`)
*LaunchTime: (1x2)
*LaunchTime: (1x2)
*LaunchTime: (1x2)
*LaunchTime: (1x2)
*LaunchTime: (1x2)
*LaunchTime: (1x2)
*LaunchTime: (1x2)
*LaunchTime: (1x2)


Test out the panel, if everything looks okay fill in the rest of the buttons.

代码:
DestroyModuleConfig LaunchTime: *
*LaunchTime: Rows 7
*LaunchTime: Columns 3
*LaunchTime: (3x1, Center, Swallow "xclock" `Exec xclock -bg '#31658c'
-fg white -digital -face 'Aquafont:size=11' -strftime '%a, %d %b %Y
%H:%M'`)
*LaunchTime: (1x2, Title "gimp", Icon graphics_paint_edit.png,
Action(Mouse 1) `Exec gimp`)
*LaunchTime: (1x2, Title "xmag", Icon telescope.png, Action(Mouse 1)
`Exec xmag`)
*LaunchTime: (1x2, Title "xcalc", Icon calculator.png, Action(Mouse 1)
`Exec xcalc`)
*LaunchTime: (1x2, Title "mozilla", Icon browser_ship-wheel.png,
Action(Mouse 1) `Exec mozilla`)
*LaunchTime: (1x2, Title "run", Icon gears.png, Action(Mouse 1) `Exec gmrun`)
*LaunchTime: (1x2, Title "gvim", Icon gvim.png, Action(Mouse 1) `Exec gvim`)
*LaunchTime: (1x2, Title "move", Icon hardware_mouse.png, Action(Mouse
1) `Pick Move`)
*LaunchTime: (1x2, Title "close", Icon bomb.png, Action(Mouse 1) `Pick Close`)
*LaunchTime: (1x2, Title "shade", Icon window.png, Action(Mouse 1)
`Pick WindowShade True`)


Start the panel and you should see something like:

http://dev.gentoo.org/~taviso/goodstuff6.png

Step 5: Finalise Panel

Test all your buttons, make sure everything is working, Hopefully it
is and you can setup Colorsets, Fonts, Frames, Padding and any other
setting you want!

代码:
Colorset 30 fg black, bg #c6c3c6, RootTransparent buffer, Tint #efebef 65

DestroyModuleConfig LaunchTime: *
*LaunchTime: Rows 7
*LaunchTime: Columns 3
*LaunchTime: Font "xft:Bitstream Vera Sans Mono:style=Roman:size=8"
*LaunchTime: Colorset 30
*LaunchTime: Frame 1
*LaunchTime: (3x1, Center, Swallow "xclock" `Exec xclock -bg '#31658c'
-fg white -digital -face 'Aquafont:size=11' -strftime '%a, %d %b %Y
%H:%M'`)
*LaunchTime: (1x2, Title "gimp", Icon graphics_paint_edit.png,
Action(Mouse 1) `Exec gimp`)
*LaunchTime: (1x2, Title "xmag", Icon telescope.png, Action(Mouse 1)
`Exec xmag`)
*LaunchTime: (1x2, Title "xcalc", Icon calculator.png, Action(Mouse 1)
`Exec xcalc`)
*LaunchTime: (1x2, Title "mozilla", Icon browser_ship-wheel.png,
Action(Mouse 1) `Exec mozilla`)
*LaunchTime: (1x2, Title "run", Icon gears.png, Action(Mouse 1) `Exec gmrun`)
*LaunchTime: (1x2, Title "gvim", Icon gvim.png, Action(Mouse 1) `Exec
"gvim" gvim`)
*LaunchTime: (1x2, Title "move", Icon hardware_mouse.png, Action(Mouse
1) `Pick Move`)
*LaunchTime: (1x2, Title "close", Icon bomb.png, Action(Mouse 1) `Pick Close`)
*LaunchTime: (1x2, Title "shade", Icon window.png, Action(Mouse 1)
`Pick WindowShade True`)


Try out the new Panel!

代码:
Module FvwmButtons -g 178x207 LaunchTime


Hopefully you should see something similar to this:

http://dev.gentoo.org/~taviso/goodstuff7.png

Now all you have to do is set any Style options you want, and decide
how to start your panel. Did you notice the extra argument to Exec on
the gvim button? Try pressing it, notice the button will stay down
until a window called gvim appears! You can do this for all the
buttons, if you like it.

Maybe you would like LaunchTime to always be visible?

代码:
Style LaunchTime StaysOnTop


And lets start it everytime we login

代码:
AddToFunc StartFunction
+ I Module FvwmButtons -g 178x207 LaunchTime

And finally, lets add it to a menu:
代码:
AddToMenu MyRootMenu
+ "Start LaunchTime" Module FvwmButtons -g 178x207 LaunchTime

edit: 21/05/2004 changed wording of planning section, using dia instead.

原文:[http://forums.gentoo.org/viewtopic.php?t=162177]

[学习]FVWM初学者手册

http://www.zensites.net/fvwm/guide/index.html

在线制作Logo的工具

http://cooltext.com

[学习]在linux下安装javabridge和clucene

最近在linux下安装php的扩展clucene和javabridge时,总结出几点经验:
一、安装clucene(转自sohotx.com)
1.在clucene.sourceforge.net,下载clucene 0.9.10
2.编译clucene
tar xzvf clucene-0.9.10.tar.gz
cd clucene-0.9.10
./autogen.sh
./configure
make
3.为了让其它程序可以调用clucene,这里把编译好的lib放到系统lib目录下
cp src/.libs/libclucene.* /usr/local/lib
cp src/CLucene.h /usr/local/include/
cp -r src/CLucene /usr/local/include/
4.下载安装clucene php extension http://pecl.php.net/package/clucene
tar xzvf clucene-0.0.9.tgz
cd clucene-0.0.9
cp -r /usr/local/include/Clucene include/ #编译时要把clucene的include文件弄一份
cp -r /usr/local/include/Clucene.h include/
phpize
./configure
make
编译完成,这里会生成一个clucene.so,我们把它放在php的扩展目录下,然后修改php.ini
加入
extension=clucene.so
完成!
二、安装php-javabridge
php-javabridge比起pecl的java扩展有着多方面的优势,下面介绍一下在linux下安装javabridge的过程
1、首页要安装jdk
下载jdk-1_5_0_05-linux-i586.bin
复制到/usr/local目录
为jdk*.bin加上执行权限chmod +x jdk...*.bin
运行安装
./jdk-1_5_0_05-linux-i586.bin
建立符号连接
ln -s jdk-1_5_0_05-linux-i586 jdk
设置环境变量:
编辑/etc/profile
加入或修改:
JAVA_HOME=/usr/local/jdk
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib
修改原来的export语句为:
export JAVA_HOME CLASSPATH PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
2、安装javabridge(假设您的apache+php已经安装好)
在sf上下载javabridge的源码版,解压
tar -jxvf php-java-bridge_3.1.0devel4.tar.tar
cd php-java-bridge*xxx
/path-php-install/bin/phpize
./configure --with-java=$JAVA_HOME
--with-php-config=/path-php-install/bin/php-config
make && make install
完成后,会在php安装目录的lib/php/extensions下有一个目录(目录名可能有所不同),将该目录的下的所有文件复制到php.ini中指定的extension_dir,当然,您也可以以前为extension_dir
修改php.ini,加入
extension=java.so
[java]
java.java_home="/usr/local/jdk"
java.java="/usr/local/jdk/jre/bin/java"
java.log_file="/var/log/php-java-bridge.log"
java.classpath="/web/php/ext/JavaBridge.jar"
java.libpath="/web/php/ext/"
重启apache,看看是否成功了!(成功后,phpinfo中有java扩展,并且java status一栏的值为running
特别注意:
1、phpize需在解压后的源码包下执行,执行后生成configure脚本
2、运行./configure时,如果提示
configure: error: Cannot find php-config. Please use --with-php-config=PATH
请使用:
./configure --with-php-config=/php-install-path/bin/php-config #而不是使用php.ini
3、php.ini中
java.libpath="/web/php/ext/ 是指安装后包含有jar等全部文件的目录,
默认值类似:/php-install-path/lib/php/extensions/no-debug-non-zts-20050922

http://blog.chinaunix.net/u/14321/showart_119742.html

星期三, 十一月 29, 2006

Linux想来个仿真XP?

像不?
Click here!

Start menu showing the Programs menu

[http://www.xpde.com/]

星期二, 十一月 28, 2006

老版本的博客地址

原来的窝里还有一些东西,懒得转过来了。给个地址:[老鱼常游而忘飞]

[学习][!]Linux内核管理基础知识概述

一、什么是内核;

内核官方:http://www.kernel.org

内核洋文用 kernel,我刚才翻了一下词典,kernel 中文意思是内核、核心、中心、精髓的意思;也是果仁、果核的意思。从字面理解,kernel 是一事物的中心,植物的果实最重要的也是果仁和果核;:) 由此我们可以推断内核是操作系统的中心。

我们知道Linus Torvalds 开发了Linux ,其实他开发的就是内核,按内核官方主页的理解,这个内核就是Linux ;其它的扩展和应用都是围绕内核而展开的。所有Linux应用程序都会和内核发生直接或者间接的接触;比如硬件需要内核支持,网络的通信也需要内核支持; 文件系统更需要内核支持... ...

直言我的能力的不行,如果您想了解和学习解操作系统,我写的教程只是初级应用,理论性的东西不是一言两语能说的清楚的,更不是应用者能说的清楚的。

二、为什么需要编译内核和管理内核

硬件是需要内核支持才行,有些硬件的支持没有被编入内核,这也需要我们重编内核;内核的包含的不仅仅是设备的驱动,还有其它的内容,比如网络协议的支持, 防火墙的支持... ... 比如iptables的实现,有些功能是需要内核支持的,如果内核与iptables相关的内容没有被编入,iptables 相关的功能就无法实现;

三、内核编译方法

请参考:《编译内核操作流程 ──为新手指南》

四、管理内核模块的相关命令

1、lsmod 列加以挂载的内核模块;

lsmod 是列出目前系统中已加载的模块的名称及大小等;另外我们还可以查看 /proc/modules ,我们一样可以知道系统已经加载的模块;

[root@localhost beinan]# lsmod

2、modinfo 查看模块信息;

modinfo 可以查看模块的信息,通过查看模块信息来判定这个模块的用途;

[root@localhost beinan]# moinfo 模块名

举例:

[root@localhost beinan]# modinfo ne2k-pci
filename: /lib/modules/2.6.11-1.1369_FC4/kernel/drivers/net/ne2k-pci.ko
author: Donald Becker / Paul Gortmaker
description: PCI NE2000 clone driver
license: GPL
parmtype: debug:int
parmtype: options:array of int
parmtype: full_duplex:array of int
parm: debug:debug level (1-2)
parm: options:Bit 5: full duplex
parm: full_duplex:full duplex setting(s) (1)
vermagic: 2.6.11-1.1369_FC4 686 REGPARM 4KSTACKS gcc-4.0
depends: 8390
alias: pci:v000010ECd00008029sv*sd*bc*sc*i*
alias: pci:v00001050d00000940sv*sd*bc*sc*i*
alias: pci:v000011F6d00001401sv*sd*bc*sc*i*
alias: pci:v00008E2Ed00003000sv*sd*bc*sc*i*
alias: pci:v00004A14d00005000sv*sd*bc*sc*i*
alias: pci:v00001106d00000926sv*sd*bc*sc*i*
alias: pci:v000010BDd00000E34sv*sd*bc*sc*i*
alias: pci:v00001050d00005A5Asv*sd*bc*sc*i*
alias: pci:v000012C3d00000058sv*sd*bc*sc*i*
alias: pci:v000012C3d00005598sv*sd*bc*sc*i*
alias: pci:v00008C4Ad00001980sv*sd*bc*sc*i*
srcversion: 6ACE95F441CD26DF9DC31C2

上面的例子是我们查看 ne2k-pci 这个模块的信息,通过查看,我们知道ne2k-pci 模块是8029网卡(PCI NE2000 clone driver)的驱动;模块是位于 /lib/modules/2.6.11-1.1369_FC4/kernel/drivers/net/ 中ne2k-pci.ko

我们现在常用的网卡也有8139的,8139网卡所用的驱动是 8139too ;查查看?

[root@localhost beinan]# modinfo 8139too

我们再查查vfat 和ntfs 的模块信息;

[root@localhost beinan]# modinfo vfat
[root@localhost beinan]# modinfo ntfs

自己尝试一下;

注意: 模块名是不能带有后缀的,我们通过modprobe -l 所看到的模块,都是带有.ko 或.o后缀;

3、modprobe 挂载新模块以及新模块相依赖的模块

modprobe 我们常用的功能就是挂载模块,在挂载某个内核模块的同时,这个模块所依赖的模块也被同时挂载;当然modprobe 也有列出内核所有模块,还有移除模块的功能;下在我们举个例子说一说咱们常用的功能和参数;

modprobe [-v] [-V] [-C config-file] [-n] [-i] [-q] [-o ] [parameters...]
modprobe -r [-n] [-i] [-v] ...
modprobe -l -t [ -a ...]

上面是modprobe 的用法,具体更为详细的帮助,我们可以查看 man modprobe ;

[root@localhost beinan]# modprobe -c

modprobe -c 可以查看modules 的配置文件,比如模块的别名是什么等;

[root@localhost beinan]# modprobe -l

modprobe -l 是列出内核中所有的模块,包括已挂载和未挂载的;通过modprobe -l ,我们能查看到我们所需要的模块,然后根据我们的需要来挂载;其实modprobe -l 读取的模块列表就位于 /lib/modules/'uname -r' 目录中;其中uname -r 是内核的版本;

[root@localhost beinan]# uname -r
2.6.11-1.1369_FC4
[root@localhost beinan]# ls /lib/modules/2.6.11-1.1369_FC4/

通过上面的命令,自己试试看?

[root@localhost beinan]# modprobe 模块名 注:挂载一个模块;

举例:

[root@localhost beinan]# modprobe ne2k-pci 注:挂载 ne2k-pci 模块;
[root@localhost beinan]# modprobe vfat 注:挂载vfat 模块
[root@localhost beinan]# modprobe ntfs 注:挂载ntfs 模块
[root@localhost beinan]# lsmod 注:列出已挂载模块, 我们会看到ne2k-pci ,vfat ,ntfs的模块 ;

注意: 模块名是不能带有后缀的,我们通过modprobe -l 所看到的模块,都是带有.ko 或.o后缀;

[root@localhost beinan]# modprobe -r 模块名 注:移除已加载的模块,和rmmod 功能相同;

注意: 模块名是不能带有后缀的,我们通过modprobe -l 所看到的模块,都是带有.ko 或.o后缀;

[root@localhost beinan]# modprobe -r 模块名

举例:

[root@localhost beinan]# modprobe -r ne2k-pci

就说这么多吧,更为详细的还是用 man modprobe 来查看和尝试;

4、rmmod 移除已挂载模块;

命令格式:

rmmod 模块名

注意: 模块名是不能带有后缀的,我们通过modprobe -l 所看到的模块,都是带有.ko 或.o后缀;

举例:

[root@localhost beinan]# rmmod vfat 注:移除已挂载的模块vfat

5、depmod 创建模块依赖关系的列表

这个模块管理工具是创建模块依赖关系的列表,有几个参数我们注意一下就行了,目前的的Linux 发行版所用的内核是2.6x版本,是自动解决依赖关系,所以这个命令知道就行了;模块之前也有依赖关系,比如我们想驱动USB 移动硬盘,目前有两种驱动,一种是udev ,在内核中有,但目前不太稳定;另一种办法是用usb-storage驱动,而usb-storage 依赖的模块是scsi 模块,所以我们要用usb-storage 的模块,也得把scsi 编译安装;

再举个例子:sata的硬盘,在Linux中的设备表示的是/dev/sd* ,比如 /dev/sda,/dev/sdb 等... 系统要驱动 sata硬盘,则需要把sata在内核中选中,或编译成模块,或内置于内核之中,在此同时,还需要在内核中选中ide ,scsi 的支持等;

depmod 工具的洋文原意:depmod ― program to generate modules.dep and map files.(我译的:为modules.dep 文件或映射文件创建依赖关系)

[root@localhost beinan]# depmod -a 注:为所有列在/etc/modprobe.conf 或/etc/modules.conf 中的所有模块创建依赖关系,并且写入到modules.dep文件;
[root@localhost beinan]# depmod -e 注:列出已挂载但不可用的模块;
[root@localhost beinan]# depmod -n 注:列出所有模块的依赖关系,但仅仅是输出出来 (Write the dependency file on stdout only)

注:modules.dep 位于 /lib/modules/内核版本 目录

比如 Fedora Core 4.0 中,系统默认的内核:

[root@localhost beinan]# ls /lib/modules/2.6.11-1.1369_FC4/modules.dep
/lib/modules/2.6.11-1.1369_FC4/modules.dep

6、insmod 挂载模块;

insmod 这个工具,和modprobe 有点类似,但功能上没有modprobe 强,modprobe 在挂载模块是不用指定模块文件的路径,也不用带文件的后缀.o 或.ko ;而insmod 需要的是模块的所在目录的绝对路径,并且一定要带有模块文件名后缀的(modulefile.o 或modulesfile.ko );

对于这个工具,我们只是介绍一下, 并不推荐使用。因为模块有依赖关系,对于新手来说,可能不知道这个模块依赖和哪个模块依赖;

举例:

[root@localhost beinan]# insmod /lib/modules/2.6.11-1.1369_FC4/kernel/drivers/net/tg3.ko

我们要到 /lib/modules/内核版本 uname -r 的命令输出/kernel/drivers 中找相对应的模块才行,要有绝对路径,而且必须要用到文件名的全称,不能把文件名的后缀省略;

五、与内核模块加载相关的配置文件;

1、模块的配置文件 modules.conf 或 modprobe.conf

内核模块的开机自动挂载模块一般是位于一个配置文件,一般的Linux发行版本都有 /etc/modules.conf 或 /etc/modprobe.conf 。比如Fedora Core 4.0 内核模块开机自动加载文件是 /etc/modprobe.conf ;在这个文件中,一般是写入模块的加载命令或模块的别名的定义等;比如我们在modules.conf 中可能会发行类似的一行 ;

alias eth0 8139too

而8029的网卡应该是

alias eth0 ne2k-pci

这样系统启动的时候,首先会modprobe 8139too ,然后再为8139too 指定别名为 eth0,然后我们在登录的时候,用 ifconfig 就会查看到网卡的IP 等情况,当然您得为网卡设置IP 才行;

一般的情况下,modproe.conf 或modules.conf的内容 是我们用相应的硬件配置工具而生成的;如果您的硬件驱动是没有被内核支持,您自己到硬件的厂商下载而来的驱动。一般的情况下都有安装和帮助文件。他们的驱 动在配置时,他会写入硬件的支持到modules.conf 或modprobe.conf 文件中。

再比如我们的声卡在modules.conf 或modprobe.conf 中也有相应的内容,这是由alsaconf 配置工具生成的,明白了吧;同理网卡在modprobe.conf 或modules.conf中的内容也是由网卡的配置工具而来的。

有些硬件是以内核模块的方式驱动的,模块一旦加载上就能用,也没有什么配置工具,比如vfat 和ntfs 的支持;如果是硬件驱动不以模块的方式支持,而是直接编入内核,也不会用在modprobe.conf 或 modules.conf 中加入什么内容;

如果您有些模块不能开机加载,您想让一些模块加机自动加载,就可以把modprobe 模块 直接写入配置文件;

2、内核模块其它配置文件

内核模块的其它配置文件还是需要了解的,比如 /lib/modules/内核版本目录下的几个文件;了解一下就行;比如:

[root@localhost beinan]# uname -r
2.6.11-1.1369_FC4
[root@localhost beinan]# ls /lib/modules/2.6.11-1.1369_FC4/
build misc modules.ccwmap modules.ieee1394map modules.isapnpmap modules.symbols source
kernel modules.alias modules.dep modules.inputmap modules.pcimap modules.usbmap

六、硬件驱动在系统中的目录;

硬件驱动在内核中以模块支持的目录;

硬件驱动是必须由内核支持的,无论是我们自己安装驱动,还是内核自带的驱动都是如此。硬件驱动如果是以内核模块支持的,驱动目录位于: /lib/modules/内核版本/kernel/目录 或 /lib/modules/内核版本/kernel/drivers 目录中;

[root@localhost beinan]# uname -r
2.6.11-1.1369_FC4
[root@localhost beinan]# ls /lib/modules/2.6.11-1.1369_FC4/kernel
arch crypto drivers fs lib net sound

注:只有驱动在内核中以模块的方法支持,驱动才位于 /lib/modules/相应的目录;如果是直接置入内核的,不会出现在/lib/modules驱动相关的目录;

七、自己编译驱动的办法;

如果是硬件厂商或者开源社区提供的驱动(没有集成在内核源码中的),编译驱动过程一般是./configure ;make;make install ,有时程序不提供./configure ,我们可以make或make install ,或者执行make;make install ;如果不能make install ,则需要我们自己复制.o或者.ko文件到 /lib/modules/内核版本/kernel/目录 或 /lib/modules/内核版本/kernel/drivers 目录中相应的驱动目录;

这个还是自己尝试吧,说也说不清楚,遇到问题后就知道怎么弄了;具体的还是驱动的REAME和INSTALL为准;

现在大多驱动都是在编译安装时,都自动复制.o或.ko 文件到内核模块目录,大多不用我们自己动手复制过去。如果您尝试编译安装声卡驱动 alsa-drivers 就会明白我所说的意思;

如果是我们通过重编内核来解决驱动问题,可以查看/usr/src/目录中的内核源码目录中的 Documentation 的REAME ;所有的帮助文件都在那里;

后记:

内核编译对新手来说是有点困难,我写过类似的文档也有好多篇,但是不是新手弟兄从中能学到点什么,我不太知道;毕竟我写的文档在内核文件告诉一些基本的流程和注意的事项;内核的配置只有多实践才能学会,在配置内核时,要多看看帮助;

内核模块管理方面我在本文中已经写了一些,大体上就这些,如果想要知道更为详细的,只能是自己看man 和--help了,我写文档也无非是查看这些东西,然后实践再写给大家;我能写出来,我想您的能力并不一定比我差,应该超出我才对;

原文:[http://www.xxlinux.com/linux/article/development/kernel/20051228/775_2.html ]

[学习]Linux操作系统内核编译详解

内核简介 
  内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。 
   Linux的一个重要的特点就是其源代码的公开性,所有的内核源程序都可以在/usr/src/linux下找到,大部分应用软件也都是遵循GPL而设 计的,你都可以获取相应的源程序代码。全世界任何一个软件工程师都可以将自己认为优秀的代码加入到其中,由此引发的一个明显的好处就是Linux修补漏洞 的快速以及对最新软件技术的利用。而Linux的内核则是这些特点的最直接的代表。 
  想象一下,拥有了内核的源程序对你来说意味着什么? 首先,我们可以了解系统是如何工作的。通过通读源代码,我们就可以了解系统的工作原理,这在Windows下简直是天方夜谭。其次,我们可以针对自己的情 况,量体裁衣,定制适合自己的系统,这样就需要重新编译内核。在Windows下是什么情况呢?相信很多人都被越来越庞大的Windows整得莫名其妙 过。再次,我们可以对内核进行修改,以符合自己的需要。这意味着什么?没错,相当于自己开发了一个操作系统,但是大部分的工作已经做好了,你所要做的就是 要增加并实现自己需要的功能。在Windows下,除非你是微软的核心技术人员,否则就不用痴心妄想了。 
  内核版本号 
  由 于Linux的源程序是完全公开的,任何人只要遵循GPL,就可以对内核加以修改并发布给他人使用。Linux的开发采用的是集市模型(bazaar,与 cathedral--教堂模型--对应),为了确保这些无序的开发过程能够有序地进行,Linux采用了双树系统。一个树是稳定树 (stable tree),另一个树是非稳定树(unstable tree)或者开发树(development tree)。一些新特性、实验性改 进等都将首先在开发树中进行。如果在开发树中所做的改进也可以应用于稳定树,那么在开发树中经过测试以后,在稳定树中将进行相同的改进。一旦开发树经过了 足够的发展,开发树就会成为新的稳定树。开发数就体现在源程序的版本号中;源程序版本号的形式为x.y.z:对于稳定树来说,y是偶数;对于开发树来说, y比相应的稳定树大一(因此,是奇数)。到目前为止,稳定树的最高版本是2.2.16,最新发布的Redhat7.0所采用的就是2.2.16的内核;开 发树的最新版本是2.3.99。也许你已经发现和多网站上都有2.4.0-test9-pre7之类的内核,但是这并不是正式版本。内核版本的更新可以访 问http://www.kernel.org。 
  为什么重新编译内核 
  Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译内核。 
  通常,更新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快、 更稳定,并且一般会修复老版本中发现的许多漏洞等,经常性地选择升级更新的系统内核是Linux使用者的必要操作内容。 
  为了正确的合理地设置内核编译配置选项,从而只编译系统需要的功能的代码,一般主要有下面四个考虑: 
  自己定制编译的内核运行更快(具有更少的代码) 
  系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中) 
  不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞 
  将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些 内核编译模式  

   要增加对某部分功能的支持,比如网络之类,可以把相应部分编译到内核中(build-in),也可以把该部分编译成模块(module),动态调用。如 果编译到内核中,在内核启动时就可以自动支持相应部分的功能,这样的优点是方便、速度快,机器一启动,你就可以使用这部分功能了;缺点是会使内核变得庞大 起来,不管你是否需要这部分功能,它都会存在,这就是Windows惯用的招数,建议经常使用的部分直接编译到内核中,比如网卡。如果编译成模块,就会生 成对应的.o文件,在使用的时候可以动态加载,优点是不会使内核过分庞大,缺点是你得自己来调用这些模块。  

  内核编译详解  

  新版本内核的获取和更新  

   Linux内核版本发布的官方网站是http://www.kernel.org,国内各大ftp上一般都可以找到某些版本的内核。新版本的内核的发布 有两种形式,一种是完整的内核版本,另外一种是patch文件,即补丁。完整的内核版本比较大,比如linux-2.4.0-test8.tar.bz2 就有18M之多,网速快的用户可以下载使用。完整内核版本一般是.tar.gz(.tgz)文件或者是.bz2文件,二者分别是使用gzip或者 bzip2进行压缩的文件,使用时需要解压缩。patch文件则比较小,一般只有几十K到几百K,极少的会超过1M,网速慢的用户可以使用patch文件 来升级内核。但是patch文件是针对于特定的版本的,你需要找到自己对应的版本才能使用。  

  编译内核需要root权限,以下操作都假定你是root用户。请把你需要升级的内核拷贝到/usr/src/下(下文中以2.4.0test8的内核的linux-2.4.0test8.tar.gz为例),命令为  

  #cp linux-2.4.0test8.tar.gz /usr/src  

  让我们先来查看一下当前/usr/src的内容,注意到有一个linux的符号链接, 它指向一个类似于linux-2.2.14(对应于你现在使用的内核版本号)的目录。首先删除这个链接:  

  #cd /usr/src  
  #rm -f linux  

  现在解压我们下载的源程序文件。如果所下载的是.tar.gz(.tgz)文件,请使用下面的命令:  

  #tar -xzvf linux-2.4.0test8.tar.gz  

  如果你所下载的是.bz2文件, 例如linux-2.4.0test8.tar.bz2,请使用下面的命令  

  #bzip2 -d linux-2.4.0test8.tar.bz2  
  #tar -xvf linux.2.4.0.test8.tar  

   现在让我们再来看一下/usr/src下的内容,你会发现现在有了一个名为linux的目录,里面就是我们需要升级到的版本的内核的源程序。还记得那个 名为linux的链接么?之所以使用那个链接就是防止在升级内核的时候会不慎把原来版本内核的源程序给覆盖掉了。我们也需要同样处理:  

  #mv linux linux-2.4.0test8  
  #ln -s linux-2.4.0test8 linux  

   这样我们也有了一个名为linux的符号链接,就不用担心以后会把它覆盖掉了(也许你会觉得重新建立linux的符号链接没有必要,但实际上这是必不可 少的,下文中会有介绍)。如果你还下载了patch文件,比如patch-2.4.0test8,你就可以进行patch操作(下面假设patch- 2.4.0test8已经位于/usr/src目录下了,否则你需要先把该文件拷贝到/usr/src下):  

  #patch -p0 < patch-2.4.0test8  

  现在,我们已经把内核源程序升级到最新版本了,下面就让我们开始内核编译的旅程吧。 
准备工作  

  通常要运行的第一个命令是:  

  #cd /usr/src/linux;make mrproper  

  该命令确保源代码目录下没有不正确的.o文件以及文件的互相依赖。由于我们使用刚下载的完整的源程序包进行编译,所以本步可以省略。而如果你多次使用了这些源程序编译内核,那么最好要先运行一下这个命令。  
   确保/usr/include/目录下的asm、linux和scsi等链接是指向要升级的内核源代码的。它们分别链向源代码目录下的真正的、该计算机 体系结构(对于PC机来说,使用的体系结构是i386)所需要的真正的include子目录。如:asm指向 /usr/src/linux/include/asm-i386等。若没有这些链接,就需要手工创建,按照下面的步骤进行:  

# cd /usr/include/  
# rm -r asm linux scsi  
# ln -s /usr/src/linux/include/asm-i386 asm  
# ln -s /usr/src/linux/include/linux linux  
# ln -s /usr/src/linux/include/scsi scsi  

   这是配置非常重要的一部分。删除掉/usr/include下的asm、linux和scsi链接后,再创建新的链接指向新内核源代码目录下的同名的目 录。这些头文件目录包含着保证内核在系统上正确编译所需要的重要的头文件。现在你应该明白为什么我们上面又在/usr/src下"多余"地创建了个名为 linux的链接了吧?  
配置  

  接下来的内核配置过程比较烦琐,但是配置的适当与否与日后Linux的运行直接相关,有必要了解一下一些主要的且经常用到的选项的设置。  
  配置内核可以根据需要与爱好使用下面命令中的一个:  

#make config(基于文本的最为传统的配置界面,不推荐使用)  
#make menuconfig(基于文本选单的配置界面,字符终端下推荐使用)  
#make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用)  
#make oldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)  

  这三个命令中,make xconfig的界面最为友好,如果你可以使用Xwindow,那么就推荐你使用这个命令。  

  如果你不能使用Xwindow,那么就使用make menuconfig好了。界面虽然比上面一个差点,总比make config的要好多了。 

  选择相应的配置时,有三种选择,它们分别代表的含义如下:  

  Y--将该功能编译进内核  
  N--不将该功能编译进内核  
  M--将该功能编译成可以在需要时动态插入到内核中的模块  

   如果使用的是make xconfig,使用鼠标就可以选择对应的选项。如果使用的是make menuconfig,则需要使用空格键进行选取。你会 发现在每一个选项前都有个括号, 但有的是中括号有的是尖括号,还有一种圆括号。 用空格键选择时可以发现,中括号里要么是空,要么是"*",而尖括号里 可以是空,"*"和"M"这表示前者对应的项要么不要,要么编译到内核里;后者则多一样选择,可以编译成模块。而圆括号的内容是要你在所提供的几个选项中 选择一项。  

  在编译内核的过程中,最烦杂的事情就是这步配置工作了,很多新手都不清楚到底该如何选取这些选项。实际上在配置 时,大部分选项可以使用其缺省值,只有小部分需要根据用户不同的需要选择。选择的原则是将与内核其它部分关系较远且不经常使用的部分功能代码编译成为可加 载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响;不需要的功能就不要选;与内核关心紧密而且经常使用的部分 功能代码直接编译到内核中。下面就让我们对常用的选项分别加以介绍。  

  1. Code maturity level options  
   代码成熟等级。此处只有一项:prompt for development and/or incomplete code/drivers,如果你 要试验现在仍处于实验阶段的功能,比如khttpd、IPv6等,就必须把该项选择为Y了;否则可以把它选择为N。  

  2. Loadable module support  
  对模块的支持。这里面有三项:  

  Enable loadable module support:除非你准备把所有需要的内容都编译到内核里面,否则该项应该是必选的。  
  Set version information on all module symbols:可以不选它。  
  Kernel module loader:让内核在启动时有自己装入必需模块的能力,建议选上
3. Processor type and features  
  CPU类型。内容蛮多的,不一一介绍了,有关的几个如下:  

  Processor family:根据你自己的情况选择CPU类型。  
  High Memory Support:大容量内存的支持。可以支持到4G、64G,一般可以不选。  
  Math emulation:协处理器仿真。协处理器是在386时代的宠儿,现在早已不用了。  
  MTTR support:MTTR支持。可不选。  
  Symmetric multi-processing support:对称多处理支持。除非你富到有多个CPU,否则就不用选了。  

  4. General setup  
  这里是对最普通的一些属性进行设置。这部分内容非常多,一般使用缺省设置就可以了。下面介绍一下经常使用的一些选项:  

  Networking support:网络支持。必须,没有网卡也建议你选上。  
  PCI support:PCI支持。如果使用了PCI的卡,当然必选。  
  PCI access mode:PCI存取模式。可供选择的有BIOS、Direct和Any,选Any吧。  
  Support for hot-pluggabel devices:热插拔设备支持。支持的不是太好,可不选。  
  PCMCIA/CardBus support:PCMCIA/CardBus支持。有PCMCIA就必选了。  
  System V IPC  
  BSD Process Accounting  
  Sysctl support:以上三项是有关进程处理/IPC调用的,主要就是System V和BSD两种风格。如果你不是使用BSD,就按照缺省吧。  
  Power Management support:电源管理支持。  
  Advanced Power Management BIOS support:高级电源管理BIOD支持。  

  5. Memory Technology Device(MTD)  
  MTD设备支持。可不选。  

  6. Parallel port support  
  串口支持。如果不打算使用串口,就别选了。  

  7. Plug and Play configuration  
  即插即用支持。虽然Linux对即插即用目前支持的不如Windows好,但是还是选上吧,这样你可以拔下鼠标之类的体验一下Linux下即插即用的感觉。  

  8. Block devices  
  块设备支持。这个就得针对自己的情况来选了,简单说明一下吧:  

  Normal PC floppy disk support:普通PC软盘支持。这个应该必选。  
  XT hard disk support:  
  Compaq SMART2 support:  
  Mulex DAC960/DAC1100 PCI RAID Controller support:RAID镜像用的。  
  Loopback device support:  
  Network block device support:网络块设备支持。如果想访问网上邻居的东西,就选上。  
  Logical volume manager(LVM)support:逻辑卷管理支持。  
  Multiple devices driver support:多设备驱动支持。  
  RAM disk support:RAM盘支持。  

  9. Networking options  
   网络选项。这里配置的是网络协议。内容太多了,不一一介绍了,自己看吧,如果你对网络协议有所了解的话,应该可以看懂的。如果懒得看,使用缺省选项(肯 定要选中TCP/IP networking哦)就可以了。让我们看看,TCP/IP、ATM、IPX、DECnet、Appletalk……支持的协议 好多哦,IPv6也支持了,Qos and/or fair queueing(服务质量公平调度)也支持了,还有kHTTPd,不过这些都还在实验阶 段。  

  10. Telephony Support  
  电话支持。这个是什么东东?让我查查帮助,原来是Linux下可以支持电话卡,这样你就可以在IP上使用普通的电话提供语音服务了。记住,电话卡可和modem没有任何关系哦。  

  11. ATA/IDE/MFM/RLL support  
  这个是有关各种接口的硬盘/光驱/磁带/软盘支持的,内容太多了,使用缺省的选项吧,如果你使用了比较特殊的设备,比如PCMCIA等,就到里面自己找相应的选项吧。  
12. SCSI support  
  SCSI设备的支持。我没有SCSI的设备,所以根本就不用选,如果你用了SCSI的硬盘/光驱/磁带等设备,自己找好了。  

  13. IEEE 1394(FireWire)support  
  这个是什么?低版本的没有见过,看看帮助再说。原来是要Fireware硬件来提高串行总线的性能,我没有,不选了。  

  14. I2O device support  
  这个也不清楚,帮助里说是这个需要I2O接口适配器才能支持的,在智能Input/Output(I2O)体系接口中使用,又是要硬件,不选了。  

  15. Network device support  
   网络设备支持。上面选好协议了,现在该选设备了,可想而知,内容肯定多得很。还好还好,里面大概分类了,有ARCnet设备、Ethernet (10 or 100 Mbit)、Ethernet(1000Mbit)、Wireless LAN(non-hamradio)、 Token Ring device、Wan interfaces、PCMCIA network device support几大类。我用的是 10/100M的以太网,看来只需要选则这个了。还是10/100M的以太网设备熟悉,内容虽然多,一眼就可以看到我所用的RealTeck RTL- 8139 PCI Fast Ethernet Adapter support,为了免得麻烦,编译到内核里面好了,不选M了,选Y。耐心点,一般说来 你都能找到自己用的网卡。如果没有,你只好自己到厂商那里去要驱动了。  

  16. Amateur Radio support  
  又一个不懂的,应该是配置业余无线广播的吧,没有,不要了。  

  17. IrDA(infrared)support  
  这个要红外支持,免了。  

  18. ISDN subsystem  
  如果你使用ISDN上网,这个就必不可少了。自己看着办好了。  

  19. Old CD-ROM drivers(not SCSI、not IDE)  
  做的可真周到,原来那些非SCSI/IDE口的光驱谁还在用啊,自己选吧,反正我是用的IDE的CD-ROM,不选这个。  

  20. Character devices  
  字符设备。这个内容又太多了,先使用缺省设置,需要的话自己就修改。把大类介绍一下吧:  

  I2C support:I2C是Philips极力推动的微控制应用中使用的低速串行总线协议。如果你要选择下面的Video For Linux,该项必选。  
  Mice:鼠标。现在可以支持总线、串口、PS/2、C&T 82C710 mouse port、PC110 digitizer pad,自己根据需要选择。  
  Joysticks:手柄。即使在Linux下把手柄驱动起来意义也不是太大,游戏太少了。  
   Watchdog Cards:虽然称为Cards,这个可以用纯软件来实现,当然也有硬件的。如果你把这个选中,那么就会在你的/dev下创建一个名 为watchdog的文件,它可以记录你的系统的运行情况,一直到系统重新启动的1分钟左右。有了这个文件,你就可以恢复系统到重启前的状态了。  
  Video For Linux:支持有关的音频/视频卡。  
  Ftape, the floppy tape device driver:  
  PCMCIA character device support:  

  21. File systems  
  文件系统。内容又太多了,老法子,在缺省选项的基础上进行修改。介绍以下几项:  

  Quota support:Quota可以限制每个用户可以使用的硬盘空间的上限,在多用户共同使用一台主机的情况中十分有效。  
  DOS FAT fs support:DOS FAT文件格式的支持,可以支持FAT16、FAT32。  
  ISO 9660 CD-ROM file system support:光盘使用的就是ISO 9660的文件格式。  
  NTFS file system support:ntfs是NT使用的文件格式。  
  /proc file system support:/proc文件系统是Linux提供给用户和系统进行交互的通道,建议选上,否则有些功能没法正确执行。  

   还有另外三个大类都规到这儿了:Network File Systems(网络文件系统)、Partition Types(分区类型)、 Native Language Support(本地语言支持)。值得一提的是Network File Systems里面的两种:NFS和SMB分 别是Linux和Windows相互以网络邻居的形式访问对方所使用的文件系统,根据需要加以选择。  

  22. Console drivers  
  控制台驱动。一般使用VGA text console就可以了,标准的80*25的文本控制台。  

  23. Sound  
  声卡驱动。如果你能在列表中找到声卡驱动那自然最好,否则就试试OSS了。  

  24. USB supprot  
  USB支持。很多USB设备,比如鼠标、调制解调器、打印机、扫描仪等,在Linux都可以得到支持,根据需要自行选择。  

  25. Kernel hacking  
  配置了这个,即使在系统崩溃时,你也可以进行一定的工作了。普通用户是用不着这个功能的。  

  总算配置完了,现在存盘退出,当然你也可以把现在的配置文件保存起来,这样下次再配置的时候就省力气了。  


编译  

  在繁杂的配置工作完成以后,下面你就可以自己到杯茶耐心等候了。与编译有关的命令有如下几个:  

#make dep  
#make clean  
#make zImage  
#make bzImage  
#make modules  
#make modules_install  
#depmod -a  
   第一个命令make dep实际上读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译而那些不需要;第二命令 make clean完成删除前面步骤留下的文件,以避免出现一些错误;第三个命令make zImage和第四个命令make bzImage实现完全 编译内核,二者生成的内核都是使用gzip压缩的,只要使用一个就够了,它们的区别在于使用make bzImage可以生成大一点的内核,比如在编译 2.4.0版本的内核时如果使用make zImage命令,那么就会出现system too big的错误提示。建议大家使用 make bzImage命令。  
  后面三个命令只有在你进行配置的过程中,在回答 Enable loadable module support (CONFIG_MODULES)时选了"Yes"才是必要的, make modules和make modules_install分别生成相应的模块和把模块拷贝到需要的目录中。  
  严格说来,第七个命令和编译过程并没有关系,它是生成模块间的依赖关系,这样你启动新内核之后,使用modprobe命令加载模块时就能正确地定位模块
更新 

  经过以上的步骤,我们终于得到了新版本的内核。为了能够使用新版本的内核,我们还需要做一些改动: 

#cp /usr/src/linux/System.map /boot/System.map- 2.4.0test8 
#cp /usr/src/linux/arch/i386/bzImage /boot/vmlinuz-2.4.0test8 

  以上这两个文件是我们刚才编译时新生成的。下面修改/boot下的两个链接System.map和vmlinuz,使其指向新内核的文件: 

#cd /boot;rm -f System.map vmlinuz 
#ln -s vmlinuz-2.4.0test8 vmlinuz 
#ln -s System.map-2.4.0test8 System.map 
  然后修改/etc/lilo.conf: 
#vi /etc/lilo.conf
  增加如下一段: 
image=/boot/vmlinuz-2.4.0test8 
label=linux240 
read-only 
root=/dev/hda2 
  其中root=/dev/hda2一行要根据需要自行加以修改。 
  运行: 
#/sbin/lilo -v 
  确认对/etc/lilo.conf的编辑无误,现在重新启动系统: 
#shutdown -r now 
  在机器重启后出现LILO时按TAB键,输入linux240,我们的新内核发挥作用了,好好享受吧。
原文:[ http://www.xxlinux.com/linux/article/development/kernel/20051201/432_3.html]

[学习]Linux内核结构详解

    Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。
    1. 进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的 进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。
    2. 内存管理(MM)允许多个进程安全的共享主内存区域。Linux的内存管理支持虚拟内存,即在计算机中运行的程序,其代码,数据,堆栈的总量可以超过实际 内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序块则保留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。内存管理从逻辑 上分为硬件无关部分和硬件有关部分。硬件无关部分提供了进程的映射和逻辑内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。
    3. 虚拟文件系统(VirtualFileSystem,VFS)隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文 件系统。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬 件控制器所编写的设备驱动程序模块。
    4.网络接口(NET)提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。
    5.进程间通讯(IPC) 支持进程间各种通信机制。
    处于中心位置的进程调度,所有其它的子系统都依赖它,因为每个子系统都需要挂起或恢复进程。一般情况下,当一个进程等待硬件操作完成时,它被挂起;当操作 真正完成时,进程被恢复执行。例如,当一个进程通过网络发送一条消息时,网络接口需要挂起发送进程,直到硬件成功地完成消息的发送,当消息被成功的发送出 去以后,网络接口给进程返回一个代码,表示操作的成功或失败。其他子系统以相似的理由依赖于进程调度。
各个子系统之间的依赖关系如下:
    进程调度与内存管理之间的关系:这两个子系统互相依赖。在多道程序环境下,程序要运行必须为之创建进程,而创建进程的第一件事情,就是将程序和数据装入内存。
    进程间通信与内存管理的关系:进程间通信子系统要依赖内存管理支持共享内存通信机制,这种机制允许两个进程除了拥有自己的私有空间,还可以存取共同的内存区域。
    虚拟文件系统与网络接口之间的关系:虚拟文件系统利用网络接口支持网络文件系统(NFS),也利用内存管理支持RAMDISK设备。
    内存管理与虚拟文件系统之间的关系:内存管理利用虚拟文件系统支持交换,交换进程(swapd)定期由调度程序调度,这也是内存管理依赖于进程调度的唯一原因。当一个进程存取的内存映射被换出时,内存管理向文件系统发出请求,同时,挂起当前正在运行的进程。
    除了这些依赖关系外,内核中的所有子系统还要依赖于一些共同的资源。这些资源包括所有子系统都用到的过程。例如:分配和释放内存空间的过程,打印警告或错误信息的过程,还有系统的调试例程等等。
系统数据结构
    在linux的内核的实现中,有一些数据结构使用频度较高,他们是:
    task_struct.
    Linux 内核利用一个数据结构(task_struct)代表一个进程,代表进程的数据结构指针形成了一个task数组(Linux中,任务和进程是相同的术 语),这种指针数组有时也称为指针向量。这个数组的大小由NR_TASKS(默认为512),表明Linux系统中最多能同时运行的进程数目。当建立新进 程的时候,Linux为新进程分配一个task_struct结构,然后将指针保存在task数组中。调度程序一直维护着一个current指针,他指向 当前正在运行的进程。
    Mm_struct
    每个进程的虚拟内存由一个mm_struct结构来代表,该结构实际上包含了当前执行映像的有关信息,并且包含了一组指向vm_area_struct结构的指针,vm_area_struct结构描述了虚拟内存的一个区域。
    Inode
     虚拟文件系统(VFS)中的文件、目录等均由对应的索引节点(inode)代表。每个VFS索引节点中的内容由文件系统专属的例程提供。VFS索引节点只 存在于内核内存中,实际保存于VFS的索引节点高速缓存中。如果两个进程用相同的进程打开,则可以共享inade的数据结构,这种共享是通过两个进程中数 据块指向相同的inode完成。
Linux的具体结构
    所谓具体结构是指系统实现的结构。
    Linux的具体结构类似于抽象结构,这种对应性是因为抽象结构来源于具体结构,我们的划分没有严格依照源代码的目录结构,且和子系统的分组也不完全匹配,但是,它很接近源代码的目录结构。
    尽管前面的讨论的抽象结构显示了各个子系统之间只有很少的依赖关系,但是具体结构的5个子系统之间有高度的依赖关系。我们可以看出,具体结构中的很多依赖关系并没有在抽象结构中出现。
Linux内核源代码
     目前,较新而又稳定的内核版本是2.0.x和2.2.x,因为版本不同稍有差别,因此如果你想让一个新的驱动程序既支持2.0.x,又支持2.2.x,就 需要根据内核版本进行条件编译,要作到这一点,就要支持宏LINUX_VERSION_CODE,假如内核的版本用a.b.c来表示,这个宏的值就是 216a+28b+c。要用到指定内核版本的值,我们可以用KERNEL_VERSION宏,我们也可以自己去定义它。
    对内核的修改用补丁文件的方式发布的。Patch实用程序用来用来对内核源文件进行一系列的修改。例如:你有2.2.9的源代码,但想移到2.2.10。就可以获得2.2.10的补丁文件,应用patch来修改2.2.9源文件。例如:
    $ cd /usr/src/linux
    $ patch �Cpl < patch-2.2.10

Linux 内核源代码的结构

    Linux内核源代码位于/usr/src/linux目录下。

    /include子目录包含了建立内核代码时所需的大部分包含文件,这个模块利用其他模块重建内核。
    /init 子目录包含了内核的初始化代码,这是内核工作的开始的起点。
    /arch子目录包含了所有硬件结构特定的内核代码。如:i386,alpha
    /drivers子目录包含了内核中所有的设备驱动程序,如块设备和SCSI设备。
    /fs子目录包含了所有的文件系统的代码。如:ext2,vfat等。
    /net子目录包含了内核的连网代码。
    /mm子目录包含了所有内存管理代码。
    /ipc子目录包含了进程间通信代码。
    /kernel子目录包含了主内核代码。

从何处开始阅读源代码?

    在Internet,有人制作了源代码导航器,为阅读源代码提供了良好的条件, 站点为lxr.linux.no/source
    下面给出阅读源代码的线索:
    系统的启动和初始化:
     在基于Intel的系统上,当loadlin.exe或LILO把内核装入到内存并把控制权传递给内核时,内核开始启动。关于这一部分请看, arch/i386/kernel/head.S,head.S进行特定结构的设置,然后跳转到init/main.c的main()例程。
    内存管理:
     内存管理的代码主要在/mm,但是特定结构的代码在arch/*/mm。缺页中断处理的代码在/mm/memory.c ,而内存映射和页高速缓存器的代码在/mm/filemap.c 。缓冲器高速缓存是在/mm/buffer.c 中实现,而交换高速缓存是在mm/swap_state.c和mm/swapfile.c。
    内核:
     内核中,特定结构的代码在arch/*/kernel,调度程序在kernel/sched.c,fork的代码在kernel/fork.c,内核例程 处理程序在include/linux/interrupt.h,task_struct数据结构在inlucde/linux/sched.h中。
    PCI:
    PCI伪驱动程序在drivers/pci/pci.c,其定义在inclulde/linux/pci.h。每一种结构都有一些特定的PCI BIOS代码,Intel的在arch/alpha/kernel/bios32.c中。
    进程间通信:
     所有的SystemVIPC对象权限都包含在ipc_perm数据结构中,这可以在include/linux/ipc.h中找到。SystemV消息是 在ipc/msg.c中实现。共享内存在ipc/shm.c中实现。信号量在ipc/sem.c中,管道在/ipc/pipe.c中实现。
    中断处理:
    内核的中断处理代码几乎所有的微处理器特有的。中断处理代码在arch/i386/kernel/irq.c中,其定义在include/asm-i386/irq.h中。


原文:[ http://www.xxlinux.com/linux/article/development/kernel/20051125/95.html]
注:原文地址为我发现此文地址,并不代表本文最初发表在此。

[学习]与平台无关的软件开发

By Michael Tschater

摘要:

几乎所有工业领域的设备都是通过网络控制的。 用户界面作为一个简单的终端程序运行在与主控程序不同的硬件上, 通过网络接收和发送数据, 并且对时间不是很敏感(比方说:初始化参数和显示测量结果)。 在下面的示意图中使用绿色的箭头显示:
[gui frontend]
软件项目经常需要回答这样一个问题:我们应该支持哪些操作系统? 本杂志的读者可能倾向于使用Linux, 而另一些人就可能需要其他的操作系统(通常是Windows)。 原则上,使用哪一种操作系统并不占应用程序的主要方面, 程序的使用者只要能够比较直观地看到执行结果就可以了。
下面本文就论证一个决策,在该决策中不需要特定的硬件平台, 因为写出可以在各种平台上编译运行的软件是可行的。 在本文中我们将仅限于运行Linux和Windows的PC, 使这些程序运行在Mac或MacOSX上也是可能的,但由于缺少硬件我们不能在这里进行演示。

原文: [http://www.linuxfocus.org/ChineseGB/October2004/article350.shtml

[学习]定制Linux内核学习资料收集

1. Red Hat Linux 定制指南
[http://doc.chinahtml.com/Manual/rhl-cg-zh_CN-9/s1-custom-kernel-modularized.html]

2. 如何定制Linux操作系统安装盘详解
[http://www.xxlinux.com/linux/article/accidence/install/20051128/138.html ]

3.自已定制软盘上的Linux系统

[ http://www.linuxwind.com/www/sys/01/52.shtml]

4.Customize Linux from the Bottom--Building Your Own Linux Base Systema
[http://www.linuxjournal.com/article/4287 ]

5.浅谈Linux优化及安全配置
[http://soft.yesky.com/SoftChannel/72350102785622016/20050406/1932072.shtml]

6.创建定制的核心
[http://linux.chinaitlab.com/manual/linuxschool/doc080.htm]

7.
哈密瓜大哥的Linux优化经验
[ http://www.pogolinux.com.cn/forum/showthread.php?t=127]

现在做的

信FreeBSD之美,雅F?VWM之貌,达Linux未至之境

[引用]DIY Linux home theater PC

LixSystems has introduced a low-cost Linux powered home theater PC (HTPC) packaged in a compact, consumer electronics-style enclosure. The Lx8100-MN, available "barebones" (sans CPU, memory, and hard drive) for around $300, offers quiet operation and is supplied with an easily-installed Fedora 5-based system image on DVD, according to the company.
原文:[http://www.linuxdevices.com/news/NS6365551074.html]

优点:Can do everything a Microsoft MediaCenter could do
缺点:The basic hardware is really expensive. We only need to buy a cool box to hold the hardware;)

FVWM的半透明补丁

据说十分难找:
[http://fvwm-themes.sourceforge.net/patch/]


透明菜单很简单, 再2.5中不需要加补丁,方法如下:
colorset n transparent,bg xxx,fg xxx
menustyle * menufacecolorset n


Taviso的[大师级FVWM界面配置]<img src="http://dev.gentoo.org/~taviso/screenshots/april-04-messy.png ">

FVWM启动检查配置文件次序

        ~/.fvwm/config
        /usr/local/share/fvwm/config
        ~/.fvwm/.fvwm2rc
        ~/.fvwm2rc
        /usr/local/share/fvwm/.fvwm2rc
        /usr/local/share/fvwm/system.fvwm2rc
        /usr/local/etc/system.fvwm2rc

星期一, 十一月 27, 2006

[学习]摩诃般若波罗蜜多心经

观 自在菩萨,行深般若波罗蜜多时,照见五蕴皆空,度一切苦厄。舍利子,色不异空,空不异色;色即是空,空即是色。受想行识,亦复如是。舍利子,是诸法空相, 不生不灭,不垢不净,不增不减。是故空中无色,无受想行识,无眼耳鼻舌身意,无色声香味触法,无眼界,乃至无意识界,无无明,亦无无明尽,乃至无老死,亦 无老死尽。无苦寂灭道,无智亦无得。以无所得故,菩提萨�省R腊闳舨�罗蜜多故,心无挂碍,无挂碍故,无有恐怖。远离颠倒梦想,究竟涅��,三世诸佛,依般若 波罗蜜多故,得阿耨多罗三藐三菩提。故知般若波罗蜜多,是大神咒,是大明咒,是无上咒,是无等等咒,能除一切苦,真实不虚。故说般若波罗蜜多咒,即说咒 曰:揭谛,揭谛!波罗揭谛,波罗僧揭谛!菩提萨婆诃!
 
小说中第十九回"云栈洞悟空收八戒 浮屠山玄奘受心经"中,乌巢禅师传玄奘此经,小说中简称此经为"多心经"。但"般若波罗蜜多"是一句梵语,意译作"慧到彼岸,即彻见诸法实相,度生死此岸 至涅��彼岸之菩萨妙慧",有完整的意义,不应该被拆开的,理应断句作"般若波罗蜜多 心经",后世也多称此经文为"心经"。想是吴老先生搞错了,断句为"般若波罗蜜 多心经"。

原文:[http://gamedragon85.spaces.live.com/blog/cns!C3F083E48BD06DA0!272.entry]

[学习FVWM中配置半透明效果

未经验证,谨慎阅读

其中用到了menu.fvwmrc style.fvwmrc key.fvwmrc mouse.fvwmrc 看后面的文章
#######################################
# .fvwm2rc
# changed by shanlimin 2005-10-20
#######################################
## ==================================================================
## 图示路径设定
ImagePath +:/usr/share/icons/Bluecurve
ImagePath +:/usr/share/icons/Bluecurve/16x16/apps
ImagePath +:/usr/share/icons/Bluecurve/32x32/apps
ImagePath +:/usr/share/icons/kdeclassic
ImagePath +:/usr/share/icons/kdeclassic/16x16/apps
ImagePath +:/usr/share/icons/kdeclassic/48x48/apps
ImagePath +:/usr/share/icons/kids
ImagePath +:/usr/share/icons
ImagePath +:/usr/local/share/ icons/
ImagePath +:/usr/local/share/icons/16x16
ImagePath +:/usr/share/pixmaps
ImagePath +:/usr/share/icons/hicolor/48x48/apps
ImagePath +:/usr/local/share/fvwm/icons
ImagePath +:$HOME/.fvwm/xp/xpm/
ImagePath +:$HOME/.fvwm/xp/window /
ImagePath +:$HOME/.fvwm/xp/myicons/

## ==================================================================
##环境变量
SetEnv fvwm_wallpaper_dir $[HOME]/background
SetEnv fvwm_wallpaper $[fvwm_wallpaper_dir]/bg0.jpg
SetEnv fvwm_icon_size 128
## ==================================================================
## 桌面设定
#EdgeResistance 250 10
EdgeScroll 100 100
ClickTime 300
DeskTopSize 2x1
## ==================================================================
## 初始化设定
DestroyFunc InitFunction
AddToFunc InitFunction
+ I Exec exec xscreensaver -no-splash
+ I exec fcitx &
#+ I Exec exec gkrellm
+ I Exec exec konsole --nomenubar --noscrollbar --tn xterm
#+ I Wait "konsole"
+ I All ("konsole") State 0
## ^^^^^^^ 载入中文输入法,启动屏幕保护程序,该函数只在第一次运行fvwm时调用,
## fvwm重启时不在调用,fvwm重启时调用的是ReStartFunction。
## 而启动和重启时都调用StartFunction
## ==================================================================
## 基本鼠标设定
## I = Immediate 即刻生效
## M = On Mouse Motion 鼠标动时
## C = On Click 按一下
## D = On Double Click 按两下
## H = On Button Held Down 按下不放

##关闭窗口---------------------------
DestroyFunc DestroyOnHold
AddToFunc DestroyOnHold I Raise
+ C Schedule 100 Close
#+ H Destroy
+ H Beep
+ I Next Raise
+ I $0 FlipFocus

AddToFunc Move-or-Raise-or-Shade
+ H Move
+ M Move
#+ C Raise
#用C感觉有延迟,用I就很好了
+ I Raise
+ D WindowShade

AddToFunc Maximize-Func
+ M Maximize 80 0
+ C Maximize 100 96
+ D Maximize 100 100

AddToFunc Move-or-Raise-or-Iconify
+ I Raise
+ M Move
+ D Iconify

AddToFunc Resize-or-Raise-or-Shade
+ H Resize
+ M Resize
#+ C Raise
+ I Raise
+ D WindowShade

AddToFunc Resize-or-Raise2
+ M Raise
+ M Resize
+ C RaiseLower

AddToFunc Iconify-and-Raise
+ I Iconify
+ I Raise

#------增加移动图标功能----------
DestroyFunc Move-or-DeIconify
AddToFunc Move-or-DeIconify I Raise
+ "M" Move
+ "D" Iconify
##
AddToFunc FuncFvwmSetTitleBindings
+ I Mouse 1 $0 A Move-or-Raise-or-Shade

AddToFunc FuncFvwmUnsetTitleBindings
+ I Mouse 1 $0 A -FuncFvwmSetTitleBindings TSF
Mouse 1 SF A Resize-or-Raise-or-Shade
## ^^^^^^^ 以上设定可使窗口缩起来。 参看了 fvwm-themes 包里面的设定方
## 法。
## 颜色设定
Colorset 0 Transparent, bg blue, fg white
## ^^^^^^^ 如果要用透明背色,就用上面的设定。
Style * MiniIcon xapp_mini.png
Style * Icon xapp_36x36.png, Color #2B5E78/#E7E7EF
## ^^^^^^^ 非使用窗口的图示及色彩。
Style * HilightFore black, HilightBack #E7E7EF
## ^^^^^^^ 使用窗口的色彩。

[http://kyxk.net/pc/pccon.php?id=93&nid=2084&pid=0&tag=0&tid=79]

Fedora Core 4安装补遗

FC4中有许多软件都过时了,第2个源里有一些更新了的东西,嫌自己编译费时间,去下了安装吧。

FC4安装源:

[http://download.fedora.redhat.com/pub/fedora/linux/core/updates/4/i386/ ]
[http://fedora-club.zpmag.com/download/FC4/i686/]


[学习]用 Laptop Mode Tools 配置 Linux 下的电源管理属性

Linux 作为一个偏重 server side 的操作系统,它效仿的对象主要是传统的 Unix。加上早期 Linus 等开发者使用的电脑一般都比较老旧,因此 Linux 一开始其目标主机就不是普通用户使用的台式机或者笔电,对硬件的向后兼容性也比较重视,而对个人电脑硬件上的新特性则支持不是那么优雅――当然,这也和不 少硬件厂商既不愿意为 Linux 自行开发驱动程序也不愿意为 Linux 开发者提供足够技术资料的做法有关。一个对于个人电脑用户比较明显的影响,就是 Linux 对计算机的电源管理支持一直都不如 Windows,即算是经过个人电脑业中的老战士 Apple 基于 BSD 改造出来的 OS X,在自家的 iBook/PowerBook 上,表现出来的电源管理能力也不如采用 Windows 的笔电(而例如 Panasonic 的笔电,甚至可以提供最长15个小时的续航能力)。

我 的笔电,Toshiba SS LX/190DK,因为采用了素来发热就难以控制的 Nvidia 的显卡芯片,加上过于追求机身的轻薄使得散热不佳,导致在热量控制方面确实相当差强人意。在使用的过程,我发现这台笔电在使用外接电源供电的时候,发热量 往往在开机后几分钟即迅速上升。但如果是使用电池供电的话,则发热的控制相对于采用外接电源时的情况要好得多。估计是因为采用不同供电系统的时候,操作系 统对电脑使用了不同的电源管理模式。

在 网上调查了一番,发现 Linux 有一个叫做 laptop_mode 的命令,这个命令即可以启用或者禁止"Laptop Mode"。所谓 Laptop Mode,是 Linux Kernel 2.4.23 和 2.6.6 以及更高版本中加入的一个特性,其目的主要是通过降低硬盘的转速来延长电池的续航时间。当然 Laptop Mode 不止这么一点功能,它还能几乎可以对笔电所有的电源管理特性进行调节。如果希望在 AC 供电的情况下也打开 Laptop Mode,首先需要编辑 /etc/laptop-mode/laptop-mode.conf,设置
    ENABLE_LAPTOP_MODE_ON_AC=1
保存修改后,运行
    sudo laptop_mode start force
为了验证笔电是否确实进入 Laptop Mode,可以输入命令
    cat /proc/sys/vm/laptop_mode
查看,如果返回值为0的话,表示系统还未进入 Laptop Mode,如果返回的是其他正数值则表示系统成功进入 Laptop Mode。也可以通过输入
    sudo laptop_mode stauts
查看 laptop_mode 报告的详细状态。有关于 Laptop Mode 的详细情况,可以用 man 命令查看 laptop_mode 和 laptop-mode.conf,其中包含了二者的详细参数说明。

BTW: Ubuntu 6.06 中的 laptop-mode-tools 是去年10月发布的1.11版,而且 dapper 的 apt source 中一直都没有更新,而实际上今年10月已经发布到了1.32版,所以如果有需要,可以在
    http://www.xs4all.nl/~bsamwel/laptop_mode/tools/downloads/debian/laptop-mode-tools_1.32-1_all.deb
下载最新 deb package。


原文请见:[ http://blog.csdn.net/holy_phoenix]

星期五, 十一月 24, 2006

FC4 MPlayer安装

最简便的办法当然是yum
下载http://rpm.greysector.net/yum/greysector.repo到/etc/yum.repos.d/中
#yum install mplayer-gui
直接搞掂,但是如果你十分不幸如我一直测试时所遇到的,用了一个非Intel的CPU,会提示signal 11错误,这时你就需要重新编译一下了,至少./configure时加入--disable-runtime-cpudetection

如果www.mplayerhq.hu不能正确打开,请采用如下网址进行下载:
http://www4.mplayerhq.hu/MPlayer/releases/

参阅:[ http://blog.eshangrao.com/index.php/2006/03/15/212-windowsmplayer-linux]
以下原文引用

好久没有更新Blog了,最近沉迷于Linux,Blog荒于打理,实在不该,由今天开始,我们将开始"挣脱Windows的枷锁"系列文章的书写,主要的目的是帮助大家在Linux下搭建一个完整的,替代windows并好于windows的linux桌面环境。

很多人不使用linux桌面,其中一个很大的原因就是离不开Windows下的软件,其实linux的开源社区里有得的好用的工具,关键是看您会不会用而已,所以就有了我们的这个"挣脱Windows的枷锁"这一系列文章的开始。

网络上,linux的资料非常的丰富,我们这系列的文章基本上在网络上都可以找到类似的文章,我们基本做的就是将这些散落网络各处的文章收集整理的工作而已,应了一句活,世界上不缺少美,只是缺少发现美的眼睛而已,linux的桌面应用也是如此。

一直都想看《霍元甲》,但直到前几天才下载了部,所以,今天,我们现来从Linux下的电影播放来开始我们"挣脱"之旅。

相信对于Windows下的电影播放软件,用得最多、最方便的就是暴风影音(包括其他基于MPC的实现)了,那么在Linux下是否也有类似的软件的,答案就是 MPlayer

MPlayer是Linux下最优秀的多媒体播放器之一,播放速度是最快的,支持的文件格式也是最多的。 一下是官方的介绍:

MPlayer是Linux 上的电影播放器(也能跑在许多其它Unices上,甚至非x86CPU上,参见移植部分)。它能使用众多的本地的,XAnim,RealPlayer,和 Win32 DLL编解码器,播放大多数MPEG,VOB,AVI,OGG,VIVO,ASF/WMV,QT/MOV,FLI,RM,NuppelVideo, yuv4mpeg,FILM,RoQ文件。你还能观看VideoCD,SVCD,DVD,3ivx,RealMedia,和DivX格式的电影(你根本不 需要avifile库)。mplayer的另一个大的特色是广泛的输出设备支持。它可以在X11,Xv,DGA, OpenGL,SVGAlib,fbdev,AAlib,DirectFB下工作,而且你也能使用GGI和SDL(由此可以使用他们支持的各种驱动模式) 和一些低级的硬件相关的驱动模式(比如Matrox,3Dfx和Radeon,Mach64,Permedia3)!他们大多数支持软件或者硬件缩放,因 此你能在全屏下观赏电影。MPlayer还支持通过硬件MPEG解码卡显示,诸如DVB 和DXR3与Hollywood+。可以使用European/ISO 8859-1,2(匈牙利语,英语,捷克语等等),西里尔语,韩语的字体的清晰放大并且反锯齿的字幕(支持10种格式),和on screen display(OSD)你又觉得如何?

这个播放器能够稳如泰山的播放被破坏的MPEG文件(对一些VCD有用),而它能播放著名的windows media player 都打不开的的坏的AVI文件。甚至,没有索引部分的AVI文件可播放,你能暂时由重建他们的索引-idx选择,或者用MEncoder永久重建,使你能够 在影片中搜索!如你所见,稳定和质量是最重要的事情,而且他的速度是也惊人的。

是否已经动心了,废话少说,我们现在开始安装,和linux下的其他软件一样,MPlayer有两种安装方式,一种是直接的二进制rpm包的安装方式,另外的就是通过源码自己编译了。

二进制rpm包的安装方式很简单,直接到这里下载Suse Mplayer RPM安装包: MPlayer-1.0pre7try3-1.i586.rpm,使用rpm -ivf MPlayer-1.0pre7try3-1.i586.rpm安装就可以了。

我们今天的重点是源代码编译安装的方式,二进制RPM安装的方式比较方便,但是因为是通用的安装,所以并没有特殊的优化,而源代码编译安装的方式可以根据我们自己的PC配置进行相应的优化,对于电影播放器来说,特定的优化来实现性能的提高是非常有益的。

首先到这里下载MPlayer的源代码:

$wget http://www4.mplayerhq.hu/MPlayer/releases/MPlayer-1.0pre7try2.tar.bz2
$bzip2 -d MPlayer-1.0pre7try2.tar.bz2
$tar xvf MPlayer-1.0pre7try2.tar
$cd MPlayer-1.0pre7try2
##添加中文支持##
MPlayer-1.0pre7try2$echo "gb18030"> help/help_mp-zh_CN.h.charset

因为MPlayer的源代码要求的Gcc环境还是gcc-2.95.3,不支持现在高版本的Gcc-4.X,所以我们需要对源代码打个Gcc-4x的补丁: mplayer-1.0_pre7-gcc4.patch,将该文件保存在MPlayer-1.0pre7try2目录下,然后使用一下命令打补丁:

MPlayer-1.0pre7try2$patch -p1 < mplayer-1.0_pre7-gcc4.patch

另外,为了免除字体安装的麻烦,我们再打一个Gtk2的补丁,让mplayer使用Gtk2,这样就支持utf-8的编码了。到这里下载补丁: mplayer-1.0_pre7-gtk2.patch,同样保存到MPlayer-1.0pre7try2目录下,执行一下命令:

MPlayer-1.0pre7try2$patch -p1 < mplayer-1.0_pre7-gtk2.patch

最后我们在编译前,我们需要现下载MPlayer解码器,到这里下载: all-20050412.tar.bz2

MPlayer-1.0pre7try2$wget http://www4.mplayerhq.hu/MPlayer/releases/codecs/all-20050412.tar.bz2
MPlayer-1.0pre7try2$ bzip2 -d all-20050412.tar.bz2
MPlayer-1.0pre7try2$tar xvf all-20050412.tar

创建一个目录用来存放,我们的编码器,目录位置及名称任意。

MPlayer-1.0pre7try2$mv  all-20050412 /usr/lib/codecs

OK,准备工作做完,可以开始编译了。

配置,带GUI界面的MPlayer,解码器存放位置/usr/lib/codecs,支持zh_CN和en语言,utf-8编码,mplayer将安装在/opt/feiy/player/MPlayer1.0下:

MPlayer-1.0pre7try2$./configure --enable-gui with-codecsdir=/usr/lib/codecs \

--with-win32libdir=/usr/lib/codecs with-reallibdir=/usr/lib/codecs \
--with-xanimlibdir=/usr/lib/codecs disable-inet6 --language=zh_CN,en \
--prefix=/opt/feiy/player/MPlayer1.0 charset=utf8
MPlayer-1.0pre7try2$make MPlayer-1.0pre7try2$make install

因为我们是从源代码安装的,源码中并没有带MPlayer皮肤,所以我们还需要安装一下MPlayer的皮肤,到这里下载MPlayer皮肤,官方提供好多款皮肤下载,我们这里下载默认的皮肤 Blue Skin

$wget http://www1.mplayerhq.hu/MPlayer/Skin/Blue-1.5.tar.bz2
$bzip -d Blue-1.5.tar.bz2
$tar xvf Blue-1.5.tar
$mv Blue $MPlayer1.0_install_path/share/mplayer/Skin/default/skin

然后将其移动到,MPlayer安装目录下的share/mplayer/Skin/default/skin 以上就安装好了MPlayer,在/opt/feiy/player/MPlayer1.0/bin目录下,就可以看到我们的mplayer,其中 mplayer是命令行方式的MPlayer播放器,gmplayer是GUI方式的MPlayer播放器,而mencoder是解码器。

MPlayer用法:

用法:   mplayer [options] [url|path/]filename

基本选项: (包括所有选项的详细列表参见manpage!)
-vo 选择视频输出模式和设备(用'-vo help'查看列表)
-ao 选择音频输出模式和设备(用'-ao help'查看列表)
vcd:// 从设备而不是普通文件上播放VCD(video cd)track
dvd:// 从设备而不是普通文件上播放DVD title/track
-alang/-slang 选择DVD音轨/字幕的语言(使用两位的国家代码)
-ss 寻找指定的(多少秒或hh:mm:ss)位置
-nosound 不播放声音