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 不播放声音
-fs -vm -zoom 全屏播放选项(fullscr,vidmode chg,softw.scale)
-x -y 设置播放的分辨率(用于改变vidmode或软件缩放)
-sub 指定使用的字幕文件(参见-subfps, -subdelay)
-playlist 指定使用播放列表文件
-vid x -aid y 选择用于播放的视频(x)和音频(y)流
-fps x -srate y 改变视频(x fps)和音频(y Hz)率
-pp 使用后期处理滤镜(详细内容参见manpage/docs)
-framedrop 使用 frame-dropping (用于慢机器)

基本控制键: (完整的列表参见manpage, 同时也要检查一下 input.conf)
<- or -> 向后/向前搜索10秒
up or down 向后/向前搜索1分钟
pgup or pgdown 向后/向前搜索10分钟
< or > 跳到播放列表中的前一首/下一首
p or SPACE 暂停播放(按任意键继续)
q or ESC 停止播放并推出
+ or - 调整音频延迟+/-0.1秒
o 循环OSD模式: none/seekbar/seekbar+timer
* or / 增加或减少pcm音量
z or x 调整字幕延迟+/-0.1秒
r or t 上/下调整字幕位置, 参见-vf expand!

例如以下命令播放~movies/hyj.rmvb文件:

/opt/feiy/player/MPlayer1.0/bin$mplayer ~movies/hyj.rmvb

当然也可以在KDE中,使用打开方式->其他,选择mplayer打开的方式打开。



[学习]让mplayer支持中文字幕的解决方案

apt-get install mplayer后,播放一些带中文字幕的电影老显示不了中文字,会出现诸如:"___Ants,_____"的玩意,看了不少文档,终于搞定,下面总结一番

A~命令行方式播放:
这是我的~/.mplayer/config
[code]
# Write your default config options here!
font=/usr/share/fonts/truetype/hiweed/simsun.ttf
subcp=cp936
subfont-autoscale=2
subfont-text-scale=5
vo=xv
[/code]
然后,命令行输入mplayer aaa.avi,(前提是同目录下有同名字幕文件)。就OK了。
======================================
B~至于窗口模式,我采用以下方法也解决:
1.rm -rf /usr/share/mplayer/font/*
2.rm -rf ~/.mplayer/font/*
上面两步让gmplayer找不到那些英文字体,呵呵,就让它乖乖地用我们指定的字体:
3.ln -s /YOUR/PATH/TO/CHINESEFONT.ttf subfont.ttf
4.修改~/.mplayer/gui.conf如下项目:
[code]
sub_auto_load = "yes"
sub_unicode = "yes"
sub_pos = "100"
sub_overlap = "no"
sub_cp = "cp936"
font_factor = "0.750000"
font_name = "/home/badants/.mplayer/subfont.ttf"
font_encoding = "unicode"
[/code]
然后,打开gmplayer,试试看,能不能成功。

~~BadAnts~~

未经验证,备查
[http://linux.hiweed.com/node/1425]

[学习]如何安装多媒体解码器

如何安装多媒体解码器
* 参考 #概述
yum -y install gstreamer-plugins*
yum -y install lame
yum -y install ffmpeg
yum -y install mjpegtools
yum --enablerepo=atrpms install w32codec
gst-register-0.8
如何具有 DVD 播放能力
* 参考 #概述
* 参考 #如何添加extra 仓库
wget -c http://download.videolan.org/pub/libdvdcss/1.2.9/rpm/libdvdcss2-1.2.9-1.i386.rpm   
rpm -i libdvdcss2-1.2.9-1.i386.rpm
如何安装多媒体播放器 (MPlayer) 及其Mozilla Firefox 插件
* 参考 #概述
* 参考 #如何添加extra 仓库
* 参考 #如何安装多媒体解码器
* 参考 #如何具有DVD播放能力
yum -y install mplayer-gui  
yum -y install mplayerplug-in
* 应用程序 -> 影音 -> MPlayer
* 重启 Mozilla Firefox
如何安装多媒体播放器 (VLC)
* 参考 #概述
* 参考 #如何添加 extra 仓库
* 参考 #如何安装多媒体解码器
* 参考 #如何具有DVD播放能力
yum -y install videolan-client
* 应用程序 -> 影音 -> VLC
如何安装多媒体播放器 (XMMS)
* 参考 #概述
* 参考 #如何添加extra仓库
* 参考 #如何安装多媒体解码器
yum -y install xmms  
yum -y install xmms-mp3  
yum -y install xmms-skins  
yum -y install xmms-wma
注意:上述命令可以在一行完成,yum -y install xmms xmms-mp3 xmms-skins xmms-wma ...,分行是为了显得清楚。
* 应用程序 -> 影音 -> XMMS
如何安装多媒体播放器 (amaroK)
* 参考 #概述
* 参考 #如何添加extra仓库
* 参考 #如何安装多媒体解码器
yum -y install amarok
* 应用程序 -> 影音 -> amaroK
如何安装多媒体播放器 (RealPlayer 10)
    * 参考 #概述
    * 参考 #如何添加extra仓库
yum -y install compat-libstdc++-33
    * 安装
假定rpm包已经下载到桌面,因为默认情况下FireFox保存下载的文件到桌面。
rpm -ivh Desktop/RealPlayer10GOLD.rpm  
yum remove HelixPlayer
* 应用程序 -> 影音 -> RealPlayer 10
如何安装流媒体目录浏览器 (streamtuner)
    * 参考 #概述
wget -c ftp://ftp.freshrpms.net/pub/dag/dries/packages/streamtuner/fc4-i386/streamtuner-0.99.99-1.2.fc4.rf.i386.rpm
rpm -ivh streamtuner-0.99.99-1.2.fc4.rf.i386.rpm
rm -f streamtuner-0.99.99-1.2.fc4.rf.i386.rpm
* 应用程序 -> 影音 -> streamtuner
如何安装 ID3 标签编辑器 (EasyTAG)
    * 参考 #概述
   * 参考 #如何添加extra仓库
yum --enablerepo=freshrpms install easytag
* 应用程序 -> 影音 -> EasyTAG
如何安装视频编辑器 (Kino)
    * 参考 #概述
    * 参考 #如何添加extra仓库
    * 参考 #如何安装多媒体解码器
yum -y install kino
* 应用程序 -> 影音 -> Kino
如何安装音频编辑器 (Audacity)
   * 参考 #概述
   * 参考 #如何添加extra仓库
    * 参考 #如何安装多媒体解码器
yum -y install audacity
* 应用程序 -> 影音 -> Audacity
如何安装 DVD Ripper (dvd::rip)
    * 参考 #概述
    * 参考 #如何添加extra仓库
    * 参考 #如何安装多媒体解码器
    * 参考 #如何安装 DVD playback capability
    * 参考 #如何安装多媒体播放器 (MPlayer) with Plug-in for Mozilla Firefox
    * 参考 #如何安装 RAR Archiver (rar)
yum -y install perl-Video-DVDRip
yum --enablerepo=freshrpms install vcdimager
yum -y install cdrdao
yum --enablerepo=freshrpms install subtitleripper
ln -fs /usr/bin/rar /usr/bin/rar-2.80
gedit /usr/share/applications/dvdrip.desktop
* 插入如下内容到新文件
[Desktop Entry]
Name=dvd::rip  
Comment=dvd::rip
Exec=dvdrip
Icon=/usr/share/perl5/Video/DVDRip/icon.xpm
Terminal=false
Type=Application
Categories=Application;AudioVideo;
* 保存文件
    * 应用程序 -> 影音 -> dvd::rip
[ http://linux.ccidnet.com/art/3089/20060721/649685_1.html]

星期四, 十一月 23, 2006

[学习]有办法在使用XMMS的时候显示歌词的吗?

打开xmms后,鼠标右键-选项-首选项-通用插件。在选项中选择Lyrics plugin并激活,然后选择配置选项,里面可以选择歌词所在的路径,还有字体。我所用的是simsun字体。可以自己编辑歌词也可以从网站上下载歌词文 件。用gedit打出歌词后保存为字符编码为GB18030的文件,通过编辑窗口加上时间后。保存为*.lrc文件,一定要与mp3歌曲名相同。(使用中 文名常常会造成歌词与歌曲不匹配的情况,可以把歌曲名和歌词文件保存为相同的英文名称)。

安装步骤:
rpm -ivh xmms-lyrics-cvs20000821-5.i686.rpm
cp /usr/X11R6/lib/xmms/General/liblyrics.so /usr/lib/xmms/General/

测试环境:
fc1 xmms-1.2.10

[http://bbs.chinaunix.net/viewthread.php?tid=847178&extra=page%3D2]

[学习]MplayerFC5下最简易安装方法

刚才自己装也遇到一点问题,上论坛来搜搜,大段大段的编译……实在是不喜欢。我是懒透了……
下面的也是很懒的方法,保证你在20分钟内搞定。

rpm -ivh http://rpm.livna.org/livna-release-5.rpm
yum install mplayer
yum install mplayer-gui
yum install mplayer-skins

好了 搞定 fonts已经在安装 mplayer的时候自动need了。

yum默认地址建议替换成�x守大学的地址,那个比较快。
[http://bbs.chinaunix.net/viewthread.php?tid=807855&extra=page%3D2]
如果上述地址不能浏览请注册CU帐户,[ CU]中国人自己的Unix论坛

[学习]在fedora中使用yum简化rpm包管理

说明:为了大家学习方便,重新编排,并就应用的部分做了补充,如使用yum来安装mplayer,xmms-mp3等,希望能节约大家的时间

一. yum是什么
yum = Yellow dog Updater, Modified
主要功能是更方便的添加/删除/更新RPM包.
它能自动解决包的倚赖性问题.
它能便于管理大量系统的更新问题
注:为什么要使用yum而不用apt,最简单的原因,Fedora自带

二. yum特点
*可以同时配置多个资源库(Repository)
*简洁的配置文件(/etc/yum.conf)
*自动解决增加或删除rpm包时遇到的倚赖性问题
*使用方便
*保持与RPM数据库的一致性

三. yum安装
Fedora自带
#rpm -ivh yum-2.0.4-2.noarch.rpm

四. yum配置
注:修改和增加配置文件中的资源库,加快下载速度和拥有更多可更新的rpm包
将/etc/yum.conf的内容全部替换为
[main]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
pkgpolicy=newest
distroverpkg=fedora-release
tolerant=1
exactarch=1

[fedora-us-1]
name=Fedora Core 1 -- Fedora US mirror
baseurl=ftp://mirrors.kernel.org/fedora.us/fedora/fedora/1/i386/yum/os

[fedora-us-1-updates]
name=Fedora Core 1 updates -- Fedora US mirror
baseurl=ftp://mirrors.kernel.org/fedora.us/fedora/fedora/1/i386/yum/updates

[fedora-us-1-stable]
name=Fedora Linux (stable) for Fedora Core 1 -- Fedora US mirror
baseurl=ftp://mirrors.kernel.org/fedora.us/fedora/fedora/1/i386/yum/stable

[freshrpms]
name=Fedora Linux $releasever - $basearch - freshrpms
baseurl=http://ayo.freshrpms.net/fedora/linux/$releasever/$basearch/freshrpms



五. yum应用
注:当第一次使用yum或yum资源库有更新时,yum会自动下载所有所需的headers放置于/var/cache/yum目录下,所需时间可能较长.
//检查有哪些可更新的rpm包
#yum check-update
//安装rpm包,使xmms可以播放mp3
#yum install xmms-mp3
//安装mplayer,同时自动安装相关的软件
#yum install mplayer
//删除licq包,同时删除与该包有倚赖性的包
#yum remove licq
注:同时会提示删除licq-gnome,licq-qt,licq-text,非常方便
//系统更新(更新所有可以升级的rpm包,包括kernel)
#yum -y update
//每天定期执行系统更新
#chkconfig yum on
#service yum start


六. yum指令详解
*rpm包的更新
//检查可更新的rpm包
#yum check-update
//更新所有的rpm包
#yum update
//更新指定的rpm包,如更新kernel和kernel source
#yum update kernel kernel-source
//大规模的版本升级,与yum update不同的是,连旧的淘汰的包也升级
#yum upgrade
*rpm包的安装和删除
//安装rpm包,如xmms-mp3
#yum install xmms-mp3
//删除rpm包,包括与该包有倚赖性的包
#yum remove licq
注:同时会提示删除licq-gnome,licq-qt,licq-text
*yum暂存(/var/cache/yum/)的相关参数
//清除暂存中rpm包文件
#yum clean packages
//清除暂存中rpm头文件
#yum clearn headers
//清除暂存中旧的rpm头文件
#yum clean oldheaders
//清除暂存中旧的rpm头文件和包文件
#yum clearn 或#yum clearn all
注:相当于yum clean packages + yum clean oldheaders
*rpm包列表
//列出资源库中所有可以安装或更新的rpm包
#yum list
//列出资源库中特定的可以安装或更新以及已经安装的rpm包
#yum list mozilla
#yum list mozilla*
注:可以在rpm包名中使用匹配符,如列出所有以mozilla开头的rpm包
//列出资源库中所有可以更新的rpm包
#yum list updates
//列出已经安装的所有的rpm包
#yum list installed
//列出已经安装的但是不包含在资源库中的rpm包
#yum list extras
注:通过其它网站下载安装的rpm包
*rpm包信息显示(info参数同list)
//列出资源库中所有可以安装或更新的rpm包的信息
#yum info
//列出资源库中特定的可以安装或更新以及已经安装的rpm包的信息
#yum info mozilla
#yum info mozilla*
注:可以在rpm包名中使用匹配符,如列出所有以mozilla开头的rpm包的信息
//列出资源库中所有可以更新的rpm包的信息
#yum info updates
//列出已经安装的所有的rpm包的信息
#yum info installed
//列出已经安装的但是不包含在资源库中的rpm包的信息
#yum info extras
注:通过其它网站下载安装的rpm包的信息
*搜索rpm包
//搜索匹配特定字符的rpm包
#yum search mozilla
注:在rpm包名,包描述等中搜索
//搜索有包含特定文件名的rpm包
#yum provides realplay

七. 安全的更新freshrpms.net的rpm包
//安装freshrpms.net的GPG key
#rpm --import http://freshrpms.net/packages/build...G-KEY.freshrpms
//编辑/etc/yum.conf,增加以下信息到尾部
[freshrpms]
name=Fedora Linux $releasever - $basearch - freshrpms
baseurl= http://ayo.freshrpms.net/fedora/linux/$releasever/$basearch/freshrpms
gpgcheck=1

注: //检查GPG Key
# rpm -qa gpg-pubkey*
//显示Key信息
#rpm -qi gpg-pubkey-e42d547b-3960bdf1
//删除Key
#rpm -e gpg-pubkey-e42d547b-3960bdf1


参考文章: Yum使用
http://pukiwiki.kandix.idv.tw/index...yum#content_1_6

[ http://www.chinaitpower.com/2005September/2005-09-13/200102.html]

[学习]Linux2.6 内核的 Initrd 机制解析

级别: 初级
李 大治 ( dazhi.li@gmail.com), 软件工程师

2006 年 5 月 23 日

Linux 的 initrd 技术是一个非常普遍使用的机制,linux2.6 内核的 initrd 的文件格式由原来的文件系统镜像文件转变成了 cpio 格式,变化不仅反映在文件格式上, linux 内核对这两种格式的 initrd 的处理有着截然的不同。本文首先介绍了什么是 initrd 技术,然后分别介绍了 Linux2.4 内核和 2.6 内核的 initrd 的处理流程。最后通过对 Linux2.6 内核的 initrd 处理部分代码的分析,使读者可以对 initrd 技术有一个全面的认识。为了更好的阅读本文,要求读者对 Linux 的 VFS 以及 initrd 有一个初步的了解。

全文:http://www-128.ibm.com/developerworks/cn/linux/l-k26initrd/index.html

[学习]如何实现自动登录Linux

级别: 初级

郑彦兴国防科大计算机学院

2002 年 9 月 15 日

开机自动登录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来完成。

  1. Xinit 用来启动X window系统服务器以及系统上的第一个客户程序,可以通过为xinit传递命令行参数的形式指定要启动的服务器及客户程序。如果不传递参数给 xinit,它将在用户的根目录下寻找并运行 .xinitrc脚本来启动客户程序;在用户的根目录下寻找并运行 .xserverrc脚本来启动服务器。如果xinit在用户的根目录下找不到.xinitrc、.xserverrc,xinit将使用缺省的X :0。
  2. 实际上,用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之前,还有工作要做。







三、自动登录后,保持用户原来的配置(桌面、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应用程序
  1. 如果重新启动后系统进入了kde,而用户需要进入gnome,只需运行switchdesk gnome在重新启动系统即可,以后每次启动时会自动进入gnome;反之亦然。
  2. 一 般系统自动登录的目的是启动X window 后自动运行某个X window程序。如果系统默认的启动级别为3,那么如果要在系统启动后自动运行某些应用程序,只需要在某些脚本中加入相应命令即可,不再详述。在X window启动后自动运行应用程序要复杂一些,幸好,kde和gnome都为此留下了自动启动接口。如果在kde桌面环境下自动启动应用程序,只需要把 应用程序名字加入/root/.kde/Autostart/目录下即可(这里注意不同用户的根目录可能不同,如用户zyx的根目录可能为 /home/zyx)。如果在gnome桌面环境下自动启动应用程序,只需把应用程序的名字加入/主菜单/程序/设置/会话/会话特性及启动程序的 startup programs属性页中即可。






关于作者


郑彦兴,男,现攻读国防科大计算机学院网络方向博士学位。您可以通过电子邮件 mlinux@163.com和他联系。


星期三, 十一月 22, 2006

上不了google的解决方法

DNS设置修改其中一个到:

211.94.33.194

[学习]谚语大全 3

I cannot be your friend and your flatterer too.朋友不能阿谀奉承。
If a man deceives me once, shame on him, if he deceives me twice, shame on me.
上当一回头,再多就可耻。
If you make yourself an ass, don't complain if people ride you.
人善被人欺,马善被人骑。
If your ears glow, someone is talking of you.耳朵发烧,有人念叨。
If you run after two hares, you will catch neither.脚踏两条船,必定落空。
If you sell the cow, you sell her milk too.杀鸡取卵。
If you venture nothing, you will have nothing.不入虎穴,焉得虎子。
If you want knowledge, you must toil for it.要想求知,就得吃苦。
Industry is the parent of success.勤奋是成功之母。
It is better to die when life is a disgrace.宁为玉碎,不为瓦全。
It is easier to get money than to keep it.挣钱容易攒钱难。
It is easy to be wise after the event.事后诸葛亮好当。
It is easy to open a shop but hard to keep it always open.创业容易守业难。
It is hard to please all.众口难调It is never too old to learn.活到老,学到老。
It is no use crying over spilt milk.覆水难收。
It is the first step that costs troublesome.万事开头难。
It is the unforeseen that always happens.天有不测风云,人有旦夕祸福。
It is too late to grieve when the chance is past.坐失良机,后悔已迟。
It never rains but it pours.不鸣则已, 一鸣惊人。
It takes three generations to make a gentleman.十年树木,百年树人。
Jack of all trades and master of none.门门精通,样样稀松。
Judge not from appearances.人不可貌相,海不可斗量。
Justice has long arms.天网恢恢,疏而不漏。
Keep good men company and you shall be of the number.近朱者赤近墨黑。
Kill two birds with one stone.一箭双雕。
Kings go mad, and the people suffer for it君王发狂,百姓遭殃。
Kings have long arms.普天之下,莫非王土。
Knowledge is power.知识就是力量。
Knowledge makes humble, ignorance makes proud.
博学使人谦逊,无知使人骄傲。 Learn and live.活着,为了学习。
Learning makes a good man better and ill man worse.
好人越学越好,坏人越学越坏。
Learn not and know not.不学无术。Let sleeping dogs lie.别惹麻烦
Learn to walk before you run.先学走,再学跑。
Let bygones be bygones.过去的就让它过去吧。
Let the cat out of the bag.泄漏天机。Life is but a span.人生苦短。
Lies can never changes fact.谎言终究是谎言。
Lies have short legs.谎言站不长。
Life is half spent before we know what it is.人过半生, 方知天命。
Life is not all roses.人生并不是康庄大道。
Life without a friend is death.没有朋友,虽生犹死。
Like a rat in a hole.瓮中之鳖。
Like author, like book.文如其人。
Like father, like son.有其父必有其子。
Like for like.一报还一报。 Like knows like.惺惺相惜。
Like mother, like daughter.有其母必有其女。
Like teacher, like pupil.什么样的老师教什么样的学生。
Like tree, like fruit.羊毛出在羊身上。
Little things amuse little minds.小人无大志。
Look before you leap.摸清情况再行动。
Lookers-on see more than players.当局者迷,旁观者清。
Losers are always in the wrong.胜者为王,败者为寇。
Lost time is never found again.岁月既往,一去不回。
Love at first sight.一见钟情。 Love cannot be compelled.爱情不能强求。
Love is blind.爱情是盲目的。 Love is full of trouble.爱情充满烦恼 。
Love is never without jealousy.没有妒忌就没有爱情。
Love me, love my dog.爱屋及乌Make hay while the sun shines.良机勿失。
Make your enemy your friend.化敌为友。
Man is the soul of the universe.人是万物之灵。
Man proposes, God disposes.谋事在人, 成事在天。
Many hands make light work.众人拾柴火焰高。
Many heads are better than one.三个臭皮匠,赛过诸葛亮。
Many things grow in the garden that were never sown there.
有心栽花花不发,无心插柳柳成荫。
Measure for measure.针锋相对。
Misfortunes never come alone.祸不单行。
Misfortune tests the sincerity of friends.患难见真情。
Money isn't everything.钱不是万能的。 Murder will out. 纸包不住火。
My son is my son till he has got him a wife, but my daughter is my daughter all the days of her life.
儿子婚前是儿子,女儿终生是女儿。
Nature is the true law.天行有常,不为尧存,不为桀亡。
Necessity is the mother of invention.需要是发明的动力。
Never fish in trouble water.不要混水摸鱼。
Never judge from appearances.不可以貌取人。 Never say die.永不言败。
Never too old to learn, never too late to turn.亡羊补牢,为时未晚。
New wine in old bottles.旧瓶装新酒。 No cross, no crown.不经历风雨,怎么见彩虹。
No garden without its weeds.没有不长草的园子。
No living man all things can.世上没有万事通。
No man can do two things at once.一心不可二用。
No man is born wise or learned.没有生而知之者。 No man is content.人心不足蛇吞象
No man is wise at all times.聪明一世,糊涂一时。
None are so blind as those who won't see.视而不见。
None are so deaf as those who won't hear.充耳不闻。
No news is good news.没有消息就是好消息 。
No one can call back yesterday.昨日不会重现。
No pains, no gains.没有付出就没有收获。
No pleasure without pain.没有苦就没有乐。
No rose without a thorn.没有不带刺的玫瑰。
No sweet without sweat.先苦后甜。 No smoke without fire.无风不起浪。
Nothing brave, nothing have.不入虎穴,焉得虎子。
Nothing dries sooner than a tear.眼泪干得最快。
Nothing in the world is difficult for one who sets his mind to it.
世上无难事,只怕有心人。
Nothing is difficult to the man who will try.世上无难事, 只要肯登攀。
Nothing seek, nothing find.没有追求就没有收获。
Nothing is so necessary for travelers as languages.外出旅行语言最要紧。
Nothing is to be got without pains but poverty.
世上唯有贫穷可以不劳而获。
Not to advance is to go back.不进则退 。
Not to know what happened before one was born is always to be a child.
不懂世故,幼稚可笑。
No way is impossible to courage.勇者无惧。

[学习]DIY:自己动手做一个迷你 Linux 系统

级别: 初级

赵蔚, 自由职业者, Author company

2002 年 9 月 18 日

本文将带领大家构建一个迷你型的 Linux 系统。它占用的硬盘空间远小于 16M 字节,但是却包括了 XFree86 的 X Window 窗口系统。

目标

本 文要构建的这个迷你型的 Linux 系统只能在一台特定的单机上运行,如果读者朋友们有兴趣的话,在这个系统的基础上加以改进,是可以构建出通用的、可以在大多数常规 PC 机上即插即用的系统来的。但是这已经不在本文的话题之内了,读者朋友们如果有兴趣,可以通过我的电子邮件和我讨论其中的细节问题。

我 们的目标 Linux 系统运行在一台普通的 Intel 386 PC 机上,可以有硬盘,也可以不要硬盘,而用 Flash Disk 来代替。如果是用 Flash 盘的话,需要能够支持从 Flash 盘启动,而且 Flash 盘的大小要在 16M 字节或者以上。我们希望用户一开机启动,就直接进入 X Window 图形界面,运行事先指定好的程序。不需要用户输入用户名和密码进行登录。

我们设定的这个目标有点像一个 X Terminal 终端工作站。稍加改进,还可以做成干脆无盘的形式,也就是说,连 16M 的 Flash 盘也不要了。不过,这也超出了本文的话题了。读者朋友们如果有兴趣,可以来信和我进行讨论。

系统启动

因 为我们要考虑从 Flash 盘进行启动,所以我们选择用 LILO 作为我们的 Boot Loader,而不选用 GRUB。这是考虑到 GRUB 有较强的对硬盘和文件系统的识别能力,而 Flash 盘到底不是标准的硬盘,并且我们选用的文件系统 GRUB 又不一定认识,搞不好的话 GRUB 反 会弄巧成拙。而 LILO 就简单的多了,它在硬盘开始的 MBR 写入一个小程序,这个小程序不经过文件系统,直接从硬盘扇区号,读出 Kernel Image 装入内存。这样,保险系数就大大增加。并且也给了我们自由选用文件系统的余地。那么,我们要如何安装 LILO 呢?

首 先,我们要找一块普通的 800M 左右的 IDE 硬盘,连在目标机器的 IDE 线上。这样在我们的目标机器上,IDE1 上挂的是 Flash 盘,IDE2 上挂的是一块工作硬盘。我们用标准的步骤在 IDE2 的标准硬盘上装上一个 Debian GNU/Linux 系统。当然,如果读者朋友们手头没有 Debian,也可以装 Red Hat 系统。装好工作系统之后,要首先做一些裁减工作,把不必要的 Service 和 X Window 等等东西都删掉。这样做的目的是增进系统启动速度,因为我们在后面的工作中,肯定要不停的重新启动机器,所以启动速度对我们的工作效率是很关键的。

装 好工作系统之后,在 Falsh 盘上做一个 Ext2 文件系统,这个用 mke2fs 这个命令就可以完成。由于 Flash 盘是接在 IDE1 上的,所以在 Linux 里面,它的身份是 /dev/hda。本文作者在操作的时候,把整个 Flash 盘划分了一个整个的分区,所以,调用 mke2fs 的时候,处理的是 /dev/hda1。读者朋友们应该可以直接在 /dev/hda 上做一个 Ext2 文件系统,而不用事先分区。

在 Flash 盘上做好了文件系统之后,就可以把一个编译好的内核映像文件 vmlinuz 拷贝到 Flash 盘上了。注意,必须要先把这个 vmlinuz 映像文件拷贝到 Flash 盘上,然后才能在 Flash 盘上安装 LILO。不然的话,LILO 到时候可是会 LILILILI 打结巴的,因为它会找不到 Kernel Image 在 Flash 盘上的位置的,那样的话 Flash 盘也就启动不起来了。还有,如果读者朋友们在 Flash 盘上用的是一个压缩的文件系统的话,到时候 LILO 也会出问题,它虽然能正确的找到 Kernel Image 在硬盘上的起始位置,但是它却没有办法处理被文件系统重新压缩过的这个 Kernel Image,不知道该如何把它展开到内存中去。

把 Kernel Image 拷贝过去以后,我们就可以动手编辑一份 lilo.conf 文件,这份文件可以就放在工作系统上就行了。但是注意在 lilo.conf 中索引的文件名的路径可要写对。这些路径名都是在工作系统上看上去的路径名。比如,如果 Flash 盘 Mount 在 /mnt 目录下面,那么,在 lilo.conf 中,vmlinuz 的路径名就是 /mnt/vmlinuz。注意这一点千万不要搞错。不然的话,如果一不小心把工作系统的 LILO 给破坏掉了,那就麻烦了。编辑好了 lilo.conf,然后再运行 lilo 命令,注意,要告诉它用这个新的 lilo.conf 文件,而不要用 /etc/lilo.conf。

安 装好 LILO 之后,我们可以立即重新启动,测试一下。首先在 BIOS 里面,设置成从 IDE1 开始启动,如果我们看到 LILO 的提示符,按回车后还能看到 Kernel 输出的消息,这就算是 LILO 的安装成功了。记得这个操作的方法,以后每次我们更新 Flash 盘上的 Kernel Image,都记得要更新 LILO。也就是说,要重新运行一遍 lilo 命令。





回页首


编译内核

试 验成功 LILO 的安装以后,我们开始考虑编译一个新的内核。当然,要编译新的内核,我们首先要进入我们的工作系统。这里有两个办法进入工作系统,一是在 BIOS 里面设置从 IDE2 启动,当然,这就要求当初安装工作系统的时候,要把 LILO 安装在 /dev/hdb 上;另一个办法是还是从 IDE1 启动,不改变 BIOS 的设置,但是在看到 LILO 的提示符的时候,要键入 linux root=/dev/hdb1,最前面的 linux 是在 lilo.conf 里面定义的一个 entry,我们只采用这个 entry 所指定的 Kernel Image,但是用 /dev/hdb1 作为 root 文件系统。两个办法可能有的时候一个比另一个好,更方便一些。这就要看具体的情况了。不过,它们的设置并不是互相冲突的。

在 编译内核的时候,由于我们的内核是只有一台机器使用的,所以我们应该对它的情况了如指掌;另外一方面,为了减低不必要的复杂性,我们决定不用 kernel module 的支持,而把所有需要的东西直接编译到内核的里面。这样编译出来的内核,在一台普通的 586 主板上,把所有必要的功能都加进去,一般也不到 800K 字节。所以,这个办法是可行的。而且减低了 init scripts 的复杂程度。从运行方面来考虑,由于需要的 kernel 代码反正是要装载到内存中的,所以并不会引起内存的浪费。

在 我们的目标平台上,我们希望使用 USB 存储设备。还有一点要注意的,就是对 Frame buffer 的支持。这主要是为了支持 XFree86。一般说来,如果我们的显卡是 XFree86 直接支持的,那当然最好,也就不需要 frame buffer 的内核支持。但是如果 XFree86 不支持我们的显卡,我们可以考虑用 VESA 模式。但是 XFree86 的 VESA 卡支持运行起来不太漂亮,还有安全方面的问题,有时在启动和退出 X Window 的时候会出现花屏。所以我们可以采用 kernel 的 vesa 模式的 frame buffer,然后用 xfree86 的 linux frame buffer 的驱动程序。这样一般就看不到花屏的现象了,而且安全方面也没有任何问题。

devfs 也是我们感兴趣的话题。如果 kernel 不使用 devfs,那么系统上的 root 文件系统就要有 /dev 目录下面的所有内容。这些内容可以用 /dev/MAKEDEV 脚本来建立,也可以用 mknod 手工一个一个来建。这个方法有其自身的好处。但是它的缺点是麻烦,而且和 kernel 的状态又并不一致。相反的,如果使用了 devfs,我们就再也不用担心 /dev 目录下面的任何事情了。/dev 目录下面的项目会有 kernel 的代码自己负责。实际使用起来的效果,对内存的消耗并不明显。所以我们选择 devfs。





回页首


busybox

有 了 LILO 和 kernel image 之后,接下来,我们要安排 root 文件系统。由于 flash 盘的空间只有 16M 字节,可以说,这是对我们最大的挑战。这里首先要向大家介绍小型嵌入式 Linux 系统安排 root 文件系统时的一个常用的利器:BusyBox。

Busybox 是 Debian GNU/Linux 的大名鼎鼎的 Bruce Perens 首先开发,使用在 Debian 的安装程序中。后来又有许多 Debian developers 贡献力量,这其中尤推 busybox 目前的维护者 Erik Andersen,他患有癌症,可是却是一名优秀的自由软件开发者。

Busybox 编译出一个单个的独立执行程序,就叫做 busybox。但是它可以根据配置,执行 ash shell 的功能,以及几十个各种小应用程序的功能。这其中包括有一个迷你的 vi 编辑器,系统不可或缺的 /sbin/init 程序,以及其他诸如 sed, ifconfig, halt, reboot, mkdir, mount, ln, ls, echo, cat ... 等等这些都是一个正常的系统上必不可少的,但是如果我们把这些程序的原件拿过来的话,它们的体积加在一起,让人吃不消。可是 busybox 有全部的这么多功能,大小也不过 100K 左右。而且,用户还可以根据自己的需要,决定到底要在 busybox 中编译进哪几个应用程序的功能。这样的话,busybox 的体积就可以进一步缩小了。

使用 busybox 也很简单。只要建一个符号链接,比方 ln -s /bin/busybox /bin/ls,那么,执行 /bin/ls 的时候,busybox 就会执行 ls 的功能,也会按照 ls 的方式处理命令行参数。又比如 ln -s /bin/busybox /sbin/init,这样我们就有了系统运行不可或缺的 /sbin/init 程序了。当然,这里的前提是,你在 busybox 中编译进去了这两个程序的功能。

这里面要提出注意的一点是,busybox 的 init 程序所认识的 /etc/inittab 的格式非常简单,而且和常规的 inittab 文件的格式不一样。所以读者朋友们在为这个 busybox 的 init 写 inittab 的时候,要注意一下不同的语法。至于细节,就不在我们这里多说了,请大家参考 Busybox 的用户手册。





回页首


从启动到进入 shell

busybox 安装好以后,我们就可以考虑重新启动,一直到进入 shell 提示符了。这之前,我们要准备一下 /etc 目录下的几个重要的文件,而且要把 busybox 用到的 library 也拷贝过来。

用 ldd 命令,后面跟要分析的二进制程序的路径名,就可以知道一个二进制程序,或者是一个 library 文件之间的互相依赖关系,比如 busybox 就依赖于 libc.so 和 ld-linux.so ,我们有了这些知识,就可把动手把所有需要的 library 拷贝到 flash 盘上。由于我们的 flash 盘说大不大,说小倒也不小,有 16M 字节之多。我们直接就用 Glibc 的文件也没有太多问题。如果读者朋友们有特殊的需要,觉得 Glibc 太庞大了的话,可以考虑用 uClibc,这是一个非常小巧的 libc 库,功能当然没有 Glibc 全,但是足够一个嵌入式系统使用了。本文就不再介绍 uClibc 了。

库程序拷 贝过来以后,我们就可以考虑系统启动的步骤了。启动的时候,先是 lilo,接下来就是 kernel,kernel 初始化之后,就调用 /sbin/init,然后由 init 解释 /etc/inittab 运行各种各样的东西。inittab 会指导 init 去调用一个最重要的系统初始化程序 /etc/init.d/rcS,我们将要在 rcS 中完成各个文件系统的 mount,此外,还有在 rcS 中调用 dhcp 程序,把网络架起来。rcS 执行完了以后,init 就会在一个 console 上,按照 inittab 的指示开一个 shell,或者是开 getty + login,这样用户就会看到提示输入用户名的提示符。我们这里为了简单起见,先直接进入 shell,然后等到调试成功以后,再改成直接进入 X Window。

关于 inittab 的语法,我们上面已经提到过了,希望读者朋友们去查权威的 busybox 的用户手册。这里,我们先要讲一下文件系统的构成情况。





回页首


安排文件系统

大 家已经看到,我们的 root 文件系统为了避免麻烦,用的是标准的 ext2 文件系统。由于我们的硬盘空间很小,只有不到 16M,而且我们还要在上面放上 X Window,所以,如果我们全部用 ext2 的话,Flash 盘的有限空间会很快耗尽。我们唯一的选择是采用一个适当的压缩文件系统。考虑到 /usr 目录下面的内容在系统运行的时候,是不需要被改写的。我们决定选择只读的压缩文件系统 cramfs 来容纳 /usr 目录下面的全部内容。

cramfs 是 Linus Torvalds 本人开发的一个适用于嵌入式系统的小文件系统。由于它是只读的,所以,虽然它采取了 zlib 做压缩,但是它还是可以做到高效的随机读取。既然 cramfs 不会影响系统读取文件的速度,又是一个高度压缩的文件系统,对于我们,它就是一个相当不错的选择了。

我们首先把 /usr 目录下的全部内容制成一个 cramfs 的 image 文件。这可以用 mkcramfs 命令完成。得到了这个 usr.img 文件之后,我们还要考虑怎样才能在系统运行的时候,把这个 image 文件 mount 上来,成为一个可用的文件系统。由于这个 image 文件不是一个通常意义上的 block 设备,我们必须采用 loopback 设备来完成这一任务。具体说来,就是在前面提到的 /etc/init.d/rcS 脚本的前面部分,加上一行 mount 命令:


mount -o loop -t cramfs /usr.img /usr

这样,就可以经由 loopback 设备,把 usr.img 这个 cramfs 的 image 文件 mount 到 /usr 目录上去了。哦,对了,由于要用到 loopback 设备,读者朋友们在编译内核的时候,别忘了加入内核对这个设备的支持。对于系统今后的运行来说,这个 mount 的效果是透明的。cramfs 的压缩效率一般都能达到将近 50%,而我们的系统上绝大部分的内容是位于 /usr 目录下面,这样一来,原本可能要用到 18M 的 Flash 盘,现在可能只需要 11M 就可以了。一个 14M 的 /usr 目录,给压缩成了仅仅 7M。

上面考虑了压 缩问题,下面还要考虑到,Flash 盘毕竟不像普通硬盘,多次的擦写毕竟不太好,所以我们考虑,在需要多次擦写的地方,使用内存来做。这个任务,我们考虑用 tmpfs 来完成。至于 tmpfs 和经典的 ramdisk 的比较,我们这里就不多说了。一般说来,tmpfs 更加灵活一些,tmpfs 的大小不像 ramdisk,可以顺着用户的需要增长或者缩小。我们选择把 /tmp、/var 等几个目录做成 tmpfs。这只需要我们在 /etc/fstab 里面加上两行类似下面的文字就可以了:


none /var tmpfs default 0 0

然后别忘了在 /etc/init.d/rcS 里面靠近开头的地方,加上 mount -a。这样,就可以把 /etc/fstab 里面指定的所有的文件系统都 mount 上来了。





回页首


X Window

进 行到这里,读者朋友们可能会以为,X Window 的安装可能会很复杂。其实不然,由于我们上面的架子搭好了,X Window 的安装非常简单,只需要把几个关键的程序拷贝过来就可以了。一般说来,只需要 /usr/X11R6 目录下面的 bin 和 lib 两个目录。然后,根据用户各自的需要,还可以做大幅的裁减。比如,如果你的局域网上有一个开放的 xfs 字体服务器的话,你可以把所有本地的字体都删掉,而使用远端的字体服务器。如果只需要运行有限的程序,别忘了把没有用的 library 都删掉。此外,还可以把多余的 X Window 的 driver 都删掉,只保留本机的显示卡所需要的 driver 就可以了。

当然,这一关免不了要做多次测试。





回页首


其它技巧

如果你的工作系统式在另外一台机器上,通过局域网和本机互联的话,ssh 是一个不错的工具。此外,ssh 中带的 scp 用起来和普通的 cp 拷贝程序差不多,非常方便。用 ssh 和 scp 来共享文件,远程试验,你就可以不需要在办公室里跑来跑去的了。

如果你需要一个 MS Windows 上运行的 X Server 和 xfs 字体服务器,可以考虑包括在 Red Hat 的 Cygwin 工具箱中的 XFree86 系统。





回页首


参考资料





回页首


关于作者


赵蔚,自由职业者。我的网络日记位于 http://www.advogato.org/person/zhaoway/。上面列有我在网络上发表的其它的文章。欢迎读者朋友们来信和我讨论问题。



http://www-128.ibm.com/developerworks/cn/linux/embed/diy/

 

New job

New job is on Linux. Fedora Core 4, not the newest version. We need to install:
1. MPlayer for multimedia
2. ePDFViewer for PDF documents viewing
3.OpenOffice, although I do think this is no use for the customer....But, he insist

gmail发布blogger测试

现在集中精力搞Linux Kernel,感觉真是不错。~~~~
辽ICP备05003652号
流风洄雪听天籁,轻云蔽日看落花

Powered by Blogger