分类归档: Linux

[转]摄像头在Linux操作系统中的驱动方法v0.1b

作者:北南南北
来自:LinuxSir.Org
摘要:本文主要内容是摄像头(WebCam)在Linux操作系统中的驱动方法;本文是以源码码编译的方法来安装驱动程序的;虽然能把摄像驱动起来,但缺少好的视频聊天程序。看来只能一步一步的来了。希望就在眼前; 本文正在修正中…..请指点,谢谢~~

目录



+++++++++++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++++++++++


1、摄像头(Webcam)驱动说明;

摄像头在Windows的驱动极为容易,最多是点几下鼠标,没有什么太大的难度。但在Linux中,驱动起来是有点困难,这并不是说Linux多高雅。只能说开发商唯利是图,没有好处的事,他们的确不怎么积极。Linux 的用户比较少,所以他们也不把用户当回事。

目前看来摄像头(Webcam)在 Linux 中驱动基本成熟,缺少的是应用程序的支持,比如即时通讯工具支持视频的好程序比较少。有些芯片组是没有任何问题,在国内,大多摄像头的芯片组是Z- Star,也有显示为Vimmicro(和Z-Star是同样的芯片)的。在Fedora 5.0或SuSE 10.x中,已经支持了很多摄像头,应该说即插即用。对于我们来说,是不是即插即用,那是另一回事,只有幸运儿才有这个的福气。如果您的摄像头接上还是用不了,那您就有必要看一下我写的这个文档了。

本文操作环境: Fedora Core 5.0 。由于大部份是用源码包编译 ,所以还是有通用性的;


1.1 摄像头在Linux中是如何支持的;

在 Linux中,硬件的驱动程序,都是由内核支持的;目前比较新内核版本也集成了一些的摄像头驱动。就是Fedora、SuSE最新版本所支持的内核也是来自由 kernel.org 。所以支持也是极为正常的。内核对硬件的支持分为内置于和外挂模块两种方便。对于摄像头来说,大多是模块支持的;


1.2 摄像头(Webcam)驱动网址;

http://mxhaard.free.fr

目前最新版本的摄像头驱动,已经到了 spca5xx-20060501.tar.gz 版本;您可以在上面的地址下载;


2、驱动摄像头详细过程;


2.1 查看摄像头型号;

我们用用到 lshal 工具,在老版本的Linux是没有这个工具的。在最新版本的Linux都有这个工具;

[root@localhost ~]# lshal |grep WebCam
   info.product = 'ZC0303 WebCam' (string)
   usb_device.product = 'ZC0303 WebCam' (string)

上面这个命令是列出系统硬件设备,然后从输出中,提取WebCam字样的信息。这说明这个摄像头是ZC0303芯片组的;如果想更详细的,就用下面的命令,找到带有ZC0303 WebCam设备的详细信息,就把所有USB设备都列出来;

[root@localhost ~]# lshal |grep usb

然后就找 ZC0303字样的设备 ,那一大段都要仔细的看;

也可以这样的方法;

[root@localhost ~]# lshal  -s |grep usb
usb_device_0_0_0000_00_1d_0
usb_device_0_0_0000_00_1d_0_if0
usb_device_4fc_3_noserial
usb_device_4fc_3_noserial_if0
usb_device_4fc_3_noserial_if0_logicaldev_input
usb_device_4fc_3_noserial_usbraw
usb_device_0_0_0000_00_1d_0_usbraw
usb_device_0_0_0000_00_1d_1
usb_device_0_0_0000_00_1d_1_if0

usb_device_ac8_303b_noserial
usb_device_ac8_303b_noserial_if0
usb_device_ac8_303b_noserial_usbraw
usb_device_ac8_303b_noserial_video4linux

usb_device_0_0_0000_00_1d_1_usbraw
usb_device_0_0_0000_00_1d_2
usb_device_0_0_0000_00_1d_2_if0
usb_device_0_0_0000_00_1d_2_usbraw
usb_device_0_0_0000_00_1d_7
usb_device_0_0_0000_00_1d_7_if0
usb_device_0_0_0000_00_1d_7_usbraw

我们看到带有video4linux字样的,他的设备号是 usb_device_ac8_303b_noserial_video4linux字样的,在其前面还有几个差不多的编号的设备。比如 usb_device_ac8_303b_noserial。我们就先查这个设备,大多数这样的一组相似的设备号,查第一个就能知道是什么设备。于是用。。

[root@localhost ~]# lshal -l -u usb_device_ac8_303b_noserial
udi = '/org/freedesktop/Hal/devices/usb_device_ac8_303b_noserial'
   info.udi = '/org/freedesktop/Hal/devices/usb_device_ac8_303b_noserial' (string)
   linux.subsystem = 'usb' (string)
   linux.hotplug_type = 1 (0x1) (int)
   usb_device.bus_number = 3 (0x3) (int)
   usb_device.can_wake_up = false (bool)
   usb_device.is_self_powered = false (bool)
   usb_device.version_bcd = 272 (0x110) (int)
   usb_device.speed_bcd = 4608 (0x1200) (int)
   usb_device.linux.device_number = 2 (0x2) (int)
   usb_device.num_ports = 0 (0x0) (int)
   usb_device.max_power = 160 (0xa0) (int)
   usb_device.device_revision_bcd = 256 (0x100) (int)
   info.product = 'ZC0303 WebCam' (string)
   usb_device.product = 'ZC0303 WebCam' (string)
   info.vendor = 'Z-Star Microelectronics Corp.' (string)
   usb_device.vendor = 'Z-Star Microelectronics Corp.' (string)
   usb_device.product_id = 12347 (0x303b) (int)
   usb_device.vendor_id = 2760 (0xac8) (int)
   usb_device.device_protocol = 0 (0x0) (int)
   usb_device.device_subclass = 0 (0x0) (int)
   usb_device.device_class = 255 (0xff) (int)
   usb_device.num_interfaces = 1 (0x1) (int)
   usb_device.num_configurations = 1 (0x1) (int)
   usb_device.configuration_value = 1 (0x1) (int)
   usb_device.linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1d.1/usb3/3-1' (string)
   info.linux.driver = 'usb' (string)
   info.bus = 'usb_device' (string)
   info.parent = '/org/freedesktop/Hal/devices/usb_device_0_0_0000_00_1d_1' (string)
   linux.sysfs_path_device = '/sys/devices/pci0000:00/0000:00:1d.1/usb3/3-1' (string)
   linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1d.1/usb3/3-1' (string)


这回应该详细了吧。看上面的设备是哪个厂出品的?

usb_device.vendor_id = 2760 (0xac8) (int)
usb_device.product_id = 12347 (0x303b) (int)
info.product = ‘ZC0303 WebCam’ (string)
info.vendor = ‘Z-Star Microelectronics Corp.’ (string)
usb_device.product_id = 12347 (0x303b) (int)

在Gnome桌面环境下,还用hal-gnome软件包工具可用;您可以通过下面的方式来安装此软件包

[root@localhost ~]# yum install hal-gnome

然后运行hal-device-manager工具;

[root@localhost ~]# hal-device-manager

点鼠标查看摄像头的详细信息还是没有问题吧。

关于hal的相关知识:《Fedora Core 4.0 HAL配置即插即用移动存储(USB及1394)的实践》


2.2 根据摄像头信息到驱动网站对号入座;

请参见: http://mxhaard.free.fr/spca5xx.html

请注意:这两个最重要的信息,也驱动网址摄像头芯片所对应地址对号入座,如果这张列表上没有摄像头,可能您得等一等了。不过也不是绝对的,给开发者捐赠一个不被支持的摄像头,肯定能解决。驱动开发者有捐赠主页,不妨捐一个看看。

usb_device.vendor_id = 2760 (0xac8) (int)
usb_device.product_id = 12347 (0x303b) (int)

比如我的这款摄像头,在其网站上,显示为支持。


2.3 摄像头驱动的选择;

spca5xx-20060501.tar.gz


对于Fedora Core 5.0 4.0 摄像头驱动RPM包:

其实在Fedora Core 5.0 中已经有这款驱动的RPM包了,但我尝试后发现根本不能用。如果您也想尝试RPM包,请到下面的网址去下载;或用YUM在线安装也行,不过得设置YUM的源;请参考:《关于Fedora Core 5.0 通过Yum在线升级说明》

http://mirrors.ircam.fr/pub/atrpms/fc5-i386/atrpms/RPMS.testing

如果是Fedora 4.0的,就到下面的地址去下载;

http://mirrors.ircam.fr/pub/atrpms/fc4-i386/atrpms/RPMS.testing/

首先:要看自己的内核版本,然后再下载;

[root@localhost ~]# uname -r -i

其次:下载软件包选择;

下载spca5xx开头的,要安装两个包左右,一个是 spca5xx-kmdl,另一个是 video4linux-kmdl,还有一个是 video4linux-kernheaders。根据软件包的时间、版本、内核版本对照下载安装。这方面不能说的太多。自己试试看,我是没有成功。


2.4 下载并编译内核;

由于RPM包安装上也不可用,所以我采用的是源码包安装的方法,当然因为我用的是比较新的内核,2.6.16.19。所以这个文档就是通用性了。源码包安装大多都差不多。所以其它发行版本也可以做为参考。


2.41 下载内核;

我测试摄像头所用的内的内核版本是 2.6.16.19;

linux-2.6.16.19.tar.bz2

下载内核配置文件:

我从Slackware的FTP上,找到了2.6.16.19的配置文件。请到这里下载;kernel261619.txt


2.42 编译内核;

第一步:解压内核软件包;

[root@localhost ~]# tar jxvf linux-2.6.16.19.tar.bz2
[root@localhost ~]# mv linux-2.6.16.19 /usr/src

把下载下来的内核配置文件改名复制到 /usr/src/linux-2.6.16.19

[root@localhost ~]# cp kernel261619.txt /usr/src/linux-2.6.16.19/.config

第二步:编译内核;

[root@localhost ~]# cd /usr/src/linux-2.6.16.19/
[root@localhost linux-2.6.16.19]# make
[root@localhost linux-2.6.16.19]# make modules_install
[root@localhost linux-2.6.16.19]# make install

第三步:查看/boot/grub/menu.lst文件;

一般的情况下,make install 安装内核后,系统会把启动写入GRUB的配置文件。/boot/grub/menu.lst。您可以看到有类似如下的一段;

title Fedora Core (2.6.16.19)
         root (hd0,6)
         kernel /boot/vmlinuz-2.6.16.19 ro root=LABEL=/1 rhgb quiet
         initrd /boot/initrd-2.6.16.19.img

对于其它发行版本,您可以修改menu.lst文件。修改方法,请参见:《系统引导管理器GRUB,为初学者指南》


2.5 编译摄像头驱动程序;

在编译摄像头驱动的前题是,我们要用2.6.16.19这个内核来启动系统,然后在 2.6.16.19内核系统环境下编译摄像头驱动;


2.51 下载摄像头驱动;

http://mxhaard.free.fr

spca5xx-20060501.tar.gz


2.52 解压编译;

再说一点,可能在编译的过程中需要各种开发库和或开发工具之类的,比如gcc、make、automake等,您要懂得自己把这些东西安装上;少什么就安装什么吧。

[root@localhost ~]# tar zxvf spca5xx-20060501.tar.gz
[root@localhost ~]# cd spca5xx-20060501
[root@localhost spca5xx-20060501]# make
[root@localhost spca5xx-20060501]# make install
[root@localhost spca5xx-20060501]# depmod -a
[root@localhost spca5xx-20060501]# modprobe spca5xx

看看驱动模块挂载好了没有?

[root@localhost spca5xx-20060501]# lsmod |grep spca5xx
spca5xx 659920 0
videodev 7040 1 spca5xx

我们再查看一下设备/dev/video0是否存在?

[root@localhost spca5xx-20060501]# ls -lh /dev/video0
crw------- 1 beinan root 81, 0 06-08 09:33 /dev/video0


3、摄像头应用程序 SpcaView;


3.1 SpcaView 软件包,包括一组工具;

spcaview工具是用来纪录数据流,也能用来播放数据;
spcaserv 是流媒体服务器;
spcacat 简单图片的抓取工具;

SpcaView 下载和安装;

下载地址:

http://mxhaard.free.fr/spca50x/Download ,我下载的是目前这个版本:spcaview-20051212.tar.gz

依赖关系;

此软件依赖 libsdl,要先安装它才行,下载地址:http://www.libsdl.org ,我下载的是:SDL-1.2.10.tar.gz

http://www.libsdl.org/download-1.2.php

[root@localhost ~]# tar zxvf SDL-1.2.10.tar.gz
[root@localhost ~]# cd SDL-1.2.10
[root@localhost SDL-1.2.10]# ./configure ; make ;make install

安装SpcaView:

[root@localhost ~]# tar zxvf spcaview-20051212.tar.gz
[root@localhost ~]# cd spcaview-20051212
[root@localhost spcaview-20051212]# make ; make install

配置可执行程序的路径:

可执行的工具被安装到 /usr/local/bin目录中,所以我们还要配置一下用户的环境变量PATH 。配置命令执行路径,在当前用户家目录下的.bashrc文件中加入下面的一行;

export PATH=".:/bin:/sbin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/X11R6/bin"

然后运行如下命令;

[root@localhost ~]# source .bashrc

关于路径的配置,请参考:《Linux 命令及可执行程序路径的设置》《关于Linux 文件系统中路径的理解》


3.2 通用spcaview来测试摄像头;

[root@localhost ~]# spcaview -d /dev/video0 -f jpg -s 320x240

如果您想看的图像分辨率,可以调整 -s后面的参数,比如 640×480

如果抓取数据流,尝试用下面的命令,比如我们把抓取的数据流存在一个linuxsir.org.avi文件中;如果想播放,就用mplayer就行,xine也可以。

[root@localhost ~]# spcaview -f yuv -o linuxsir.org.avi

看一下图吧:

更多的帮助: http://mxhaard.free.fr/sview.html


4 即时通讯工具;

即时通讯工具在 Linux 视频下比较少,其中有aMSN,不过aMSN虽然能简单的应用,但如果您的机器是接在路由器或防火墙之后,还要配置端口转发。由于我的路由器功能比较差,所以没有发现有哪块配端口转发。不过在公司内部局域网和同事聊天还是能用看到对方的。Mercury 也是MSN的客户端,需要Java虚拟机支持,安装起来有点麻烦。我在Fedora 5.0 Core 中没有安装成功。如果您想安装尝试,请自行安装一下。如果有问题,咱们再交流;


4.1 aMSN ;

主页:http://amsn.sourceforge.net

aMSN 支持视频,不过在路由器或防火墙后的计算机需要配置路由器。我和公司同事聊天测试,无需配置路由器。由于我的路由器功能比较简单,还没有找到相应的选项。看两张图吧;—— 2006.06.08 北南南北;

今天(2006.06.10),我换了一个路由器,总算把这个问题测试成功了;在路由器上找到 有ip forward 类似的选项,要把 6890 – 6900转发到您所用的计算机上上的端口上,协议是TCP/UDP。比如我用的计算机的IP地址是:192.168.1.3;我的路由器上有NAT 选项,我在NAT中的防火墙规则中设置的。也就是把 来自WAN的数据流,协议TCP/UDP ,端口 6890 – 6900,转发到 192.168.1.3 机器上的 6890 – 6900。—— 2006.06.08 北南南北;


4.2 Mercury (MSN客户端)

主页: http://www.mercury.to


4.3 Gaimvv ;

主页: http://gaim-vv.sourceforge.net

Gaim-vv 包含支持YahooMessager 视频功能;目前Gaimvv已停止开发,据说在未来的Gaim 2.x中要做为重点开发;Gaim-vv效果还是不错的,遗憾的是只支持 YahooMessager 视频。我测试了 Gaim-vv 的YahooMessager 视频,性能还比较不错,对系统资源占用相对来说较少。


5、未尽事宜;


6、关于本文;

前年为了测试在Linux下是否能用摄像头,买了一个摄像头,由于没有驱动,被迫放弃。那个摄像头也没用几次就报废了。白白费掉一百多RMB。这次又去电子城,顺便弄回一只,这次的运气应该比上次要好的多,毕竟能驱动起来。虽然在Linux 中支持摄像头的程序不太多,我感觉只所以出现这样的情况,就是因为摄像头的驱动程序太少了。这次一个法国的老兄出手了,据说能N多芯片的。。。。。。。这是一个开头,并不是结局。好事在后头呢;


7、更新日志;

2006.06.08 0.1b 完成正文;


8、参考文档;

http://mxhaard.free.fr


Read: 539

Linux系统环境变量

Linux是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。通常每个用户默认的环境都是相同的,这个默认环境实际上就是一组环境变量的定义。用户可以对自己的运行环境进行定制,其方法就是修改相应的系统环境变量。

Linux是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。通常每个用户默认的环境都是相同的,这个默认环境实际上就是一组环境变量的定义。用户可以对自己的运行环境进行定制,其方法就是修改相应的系统环境变量。

常见的环境变量

对于PATH和HOME等环境变量大家都不陌生。除此之外,还有下面一些常见环境变量。

◆ HISTSIZE是指保存历史命令记录的条数。

◆ LOGNAME是指当前用户的登录名。

◆ HOSTNAME是指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。

◆ SHELL是指当前用户用的是哪种Shell。

◆ LANG/LANGUGE是和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。

◆ MAIL是指当前用户的邮件存放目录。

◆ PS1是基本提示符,对于root用户是#,对于普通用户是$。PS2是附属提示符,默认是“>”。可以通过修改此环境变量来修改当前的命令符,比如下列命令会将提示符修改成字符串“Hello,My NewPrompt :) ”。
# PS1=" Hello,My NewPrompt :) "
Hello,My NewPrompt :)

除了这些常见的环境变量,许多应用程序在安装时也会增加一些环境变量,比如使用Java就要设置JAVA_HOME和CLASSPATH等,而安装五笔输入法会增加环境变量"XMODIFIERS=@im=fcitx"等。

定制环境变量

环境变量是和Shell紧密相关的,用户登录系统后就启动了一个Shell。对于Linux来说一般是bash,但也可以重新设定或切换到其它的 Shell。环境变量是通过Shell命令来设置的,设置好的环境变量又可以被所有当前用户所运行的程序所使用。对于bash这个Shell程序来说,可以通过变量名来访问相应的环境变量,通过export来设置环境变量。下面通过几个实例来说明。

1. 显示环境变量HOME
$ echo $HOME
/home/terry

2. 设置一个新的环境变量WELCOME
$ export WELCOME="Hello!"
$ echo $WELCOME
Hello!

3. 使用env命令显示所有的环境变量
$ env
HOSTNAME=terry.mykms.org
PVM_RSH=/usr/bin/rsh
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000

4. 使用set命令显示所有本地定义的Shell变量
$ set
BASH=/bin/bash
BASH_VERSINFO=([0]="2"[1]="05b"[2]="0"[3]="1"[4]="release"[5]="i386-redhat-linux-gnu")
BASH_VERSION=2.05b.0(1)-release
COLORS=/etc/DIR_COLORS.xterm
COLUMNS=80
DIRSTACK=()
DISPLAY=:0.0

5. 使用unset命令来清除环境变量

set可以设置某个环境变量的值。清除环境变量的值用unset命令。如果未指定值,则该变量值将被设为NULL。示例如下:
$ export TEST="Test…" #增加一个环境变量TEST
$ env|grep TEST #此命令有输入,证明环境变量TEST已经存在了
TEST=Test…
$ unset $TEST #删除环境变量TEST
$ env|grep TEST #此命令没有输出,证明环境变量TEST已经存在了

6. 使用readonly命令设置只读变量

如果使用了readonly命令的话,变量就不可以被修改或清除了。示例如下:
$ export TEST="Test…" #增加一个环境变量TEST
$ readonly TEST #将环境变量TEST设为只读
$ unset TEST #会发现此变量不能被删除
-bash: unset: TEST: cannot unset: readonly variable
$ TEST="New" #会发现此也变量不能被修改
-bash: TEST: readonly variable

7. 用C程序来访问和设置环境变量

对于C程序的用户来说,可以使用下列三个函数来设置或访问一个环境变量。

◆ getenv()访问一个环境变量。输入参数是需要访问的变量名字,返回值是一个字符串。如果所访问的环境变量不存在,则会返回NULL。

◆ setenv()在程序里面设置某个环境变量的函数。

◆ unsetenv()清除某个特定的环境变量的函数。

另外,还有一个指针变量environ,它指向的是包含所有的环境变量的一个列表。下面的程序可以打印出当前运行环境里面的所有环境变量:
#include <stdio.h>
extern char**environ;
int main ()
{
char**var;
for (var =environ;*var !=NULL;++var)
printf ("%s n ",*var);
return 0;
}

还可以通过修改一些相关的环境定义文件来修改环境变量,比如对于Red Hat等Linux发行版本,与环境相关的文件有/etc/profile和~/.bashrc等。修改完毕后重新登录一次就生效了。

Read: 650

编译内核操作流程 ──为新手指南

作者:北南南北
来自:LinuxSir.Org
提要: 编译内核主要是通过内核实现某些功能,比如iptables 需要内支持;所有的硬件的支持也是通过内核实现的;本文只是简单的给初学者讲一下编译内核的流程;


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
正文
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


一、为什么要编译内核;

有时我们为了实现某些功能,比如对iptables的防火墙有些需要内核支持;还有实现一些硬件的支持等,这时我们需要重编内核;


二、内核源码版本的选择;

如果发行版本提供内核源码,最好还是用发行版本提供的;比如Fedora 4.0 提供了很多版本的内核源码;我们安装好后,他自带的配置文件大多能满足我们的需要,对于新手来说,根据自带的内核的配置文件.config ,我们也能学到一点如何配置内核。也没有什么难的,熟能生巧罢了;

如果从 kernel.org 下载最新稳定版本的内核也是可以的;


三、内核源码安装或解压;

对于Fedora Core 4.0 来说,内核源码是放在 /usr/src/kernels 目录中;如果通过在线升级内核,也是放在这个目录中;如果您的系统中的 /usr/src/kernels/ 中没有内容,说明您没有安装内核的源码包 kernel-devel 软件包;

您可以通过软件包管理器来补装 ,请参考 《Fedora / Redhat 软件包管理指南》

如果您用Fedora Core 4.0 ,我建议您在保留老内核的基础上,在线下载最新版本的内核 kerenl-devel 和对应版本的 kernel 或者从 kernel.org 下载,有时可能新的kerenl 已经解决了您所面对的问题,这时就没有必要编译内核了;

如果您是通过在线安装的内核源码包 ,比如通过 apt+synaptic 或者yum 安装的,内核源码会被放到/usr/src/kernel 下的目录中,您要进入相对应的目录进行编译;

在线更新软件包,请参考 《Fedora / Redhat 软件包管理指南》,推荐 apt+synaptic 工具;

如果您是是下载kernel 和kernel-devel 的rpm 包,可以通过来安装;

[root@localhost beinan]# rpm -ivh kernel*.rpm

如果您是从kernel.org 下载的类似 linux-2.6.13.tar.bz2 或者 linux-2.6.13.tar.gz的,您要把下载下来的文件移到 /usr/src 目录中解压; 然后进入解压的目录中进行配置和编译;

[root@localhost beinan]# mv linux-2.6.13.tar.bz2
[root@localhost beinan]# cd /usr/src/
[root@localhost src]# tar jxvf linux-2.6.12.3.tar.bz2

提示:本文以linux-2.6.12.3为例,其实通过发行版的升级版的 kernel-devel 和从kernel.org 下载下来的差不多,大同小异;不同的是通过在线升级的rpm格式的内核源码包,有配置文件.config 可以参考;安装到的目的地是/usr/src/kernel 对FC 4.0来说;如果您要高编译和配置内核,


四、内核的配置;


1、进入目录执行 make mrproper ,对于从 kernel.org 下载而来的tar.bz格式的源码包;

[root@localhost src]# cd linux-2.6.12.3/
[root@localhost linux-2.6.12.3]#
[root@localhost src]# cd linux-2.6.12.3/
[root@localhost linux-2.6.12.3]# make mrproper
[root@localhost linux-2.6.12.3]# make menuconfig

对于Fedora Core 4.0 ,如果您是通过在线安装的 kernel和kernel-devel 新版本的包,比如是2.6.12-1.1398_FC4-i686,你可以直进入 /usr/src/kernel/相应的目录中直接执行 make menuconfig ;利用发行版本提供的 .config 来配置,这样方便点。不要make mrproper ,否则.config 就没有了;这也是为什么要用发行版本提供的内核源码升级包的原因;

其它配置和安装大同小异;模仿总可以吧;


2.简要的配置内核;

进入配置内核的配置模式后,我们可能一无所知,看下面;

内核配置有两种方法,一种是直接置入内核 * ;另一种是编成模块 M ;两种方法各有优点;直接编入内核的,比如设备的启动,不再需要加载模块的这一过程了;而编译成模块,则需要加载设备的内核支持的模块;但直接把所有的东西都编入内核也不是可行的,内核体积会变大,系统负载也会过重。我们编内核时最好把极为重要的编入内核;其它的如果您不明白的,最好用默认。


1)移动键盘上下左右键,按Enter 进入一个目录。把指针移动到Exit就退出当前目录到上级目录;

2)针对自己机器存在的问题进行修改,比如大内存的支持;

选择自己机器的CPU;

移动键盘到 Processor type and features —> ,然后按ENTER进入;
找到 Processor family (Pentium-Pro) —> 按ENTER进入;

进入后我们发现有好多CPU的型号可选;一般的情况下要根据
bash-3.00# cat /proc/cpuinfo 输出的信息来选,比如我们的是Celeron (P4)一代的,应该选如下的,当然默认的 486也是可以正常运行的,既然我们重编一次内核,就得选中对应型号的,也许性能有所提高呢;

Processor family (Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon)

对大内存支持;如果内存是1G或者1G以上,但小于4G的,就要选4G支持;如果超过4G的,要选64G的支持;

High Memory Support (4GB) --->
(X) 4GB
( ) 64GB

还有比如声卡等硬件,需要我们一步一步的查看;如果有不明之处,就要按 [shift]+?的组合键来查看说明。一般的情况下,2.6.x的内核会根据机器的情况自动配出一个文件,只需要我们来查看一下,把重要的地方改改就行了;

再举个例子:比如我现在所用的声卡是intel ac97的,我应该怎么配置呢?

首先要知道自己的声卡的芯片组,我们要通过lspci -v 来查看;

[root@localhost beinan]#lspci -v

只查看声卡的,应该用如下的方法:

[root@localhost beinan]# lspci -v |grep audio
00:1f.5 Multimedia audio controller: Intel Corp. 82801DB (ICH4) AC'97 Audio Controller (rev 03)

通过上面的输出,我们知道这台机器用的是intel AC97声卡;所以我们要特别注意AC97的配置;

找到 Device Drivers ---> Sound --->
<M> Sound card support 声卡的支持,这个是一定要选中的吧;
<M> Advanced Linux Sound Architecture 对声卡支持的ALSA驱动的支持;
下面有OSS驱动,只是一部份。如果想用OSS的驱动更全的,可以去买;其它的就看如下的选吧;
<M> Sequencer support
<M> Sequencer dummy client
<M> OSS Mixer API
<M> OSS PCM (digital audio) API[*] OSS Sequencer API
<M> RTC Timer support[*] Verbose printk
[ ] Debug

大多是默认的就好,如果您不知道是做什么用的,或者怎么用;

然后我们再向下看有

Generic devices ---> 进入里面
<M> Dummy (/dev/null) soundcard
<M> Virtual MIDI soundcard
<M> MOTU MidiTimePiece AV multiport MIDI
<M> UART16550 serial MIDI driver
<M> Generic MPU-401 UART driver
ISA devices ---> 如果您用ISA声卡就在这里面选;
PCI devices ---> 如果您用PCI声卡,就在这里面选,集成声卡也在这里;
USB devices ---> 这是USB声卡内核支持选项;我有一个这样的声卡,但没有试过;
PCMCIA devices ---> 这是PCMCIA声卡的选项,我还没有看过这样的声卡呢;如果您有,就在这里面动动手吧。

因为我用的是Intel 集成的声卡,所以要在PCI中选择,我们在 中可以看到有两个与INTEL有关的;

<M> Intel/SiS/nVidia/AMD/ALi AC97 Controller 这个才是Intel AC97声卡的;
< > Intel/SiS/nVidia/AMD MC97 Modem (EXPERIMENTAL) 这个是机器集成的INTEL猫的蜂鸣器的;

因为我发现如果把猫的蜂鸣器的驱动也选上,可能造成两个冲突。所以只能选上面的那个;

我们再回到 Open Sound System —> 中看看,与我用的声卡是不是有关的?

<M> Open Sound System (DEPRECATED)
<M> Intel ICH (i8xx) audio support
<M> OSS sound modules
<M> Loopback MIDI device support
<M> Microsoft Sound System support

我们也可以看到Open Sound System中也有好多的声卡驱动,大家根据前面的lspci -v 来选择吧。


3)对于操作系统所采用的文件系统的支持要编入内核,最好不要编成模块;(重要)

比如我的Fedora core 4.0 所采用的文件系统用的是ext3 ,所以我要把它直接编入内核;好处是不受模块丢失或者损坏而不能启动系统;而有时您把系统所采用的文件系统编译成模块,出现VFS错误,也有这方面的事,可能是您没有把ext3加入到相应的加载模块的配置文件中,所以我们为了减少麻烦,把风险降到最低,还是要直接置入内模的好;

File systems --->
<*> Ext3 journalling file system support
[*] Ext3 extended attributes
[*] Ext3 POSIX Access Control Lists
[*] Ext3 Security Labels

如果您还有其它的硬盘分区要读取,比如是reiserfs、ext2、fat、fat32、ntfs等,这样的可以编成模块来支持;

再举一例:如果您的的操作系统用的是reiserfs的文件系统,当然就要把reiserfs的直接编入内核,其它的可以编成模块来支持了;


4)对于硬盘及RAID的支持,要直接编入内核;

比如ATA、SATA、SCSI及RAID的支持直接内核支持;有时编完内核后,启动时不能识别硬盘和RAID,大多事情出在这里;Slackware中在这方面有的是模块支持,我们可以把它由模块M改成内核*来支持;如果您不明白,就按默认进行;SATA的硬盘的支持除了选中SATA的支持、IDE设备的支持以外,还要选中SCSI的支持;

5)对于咱们所没有的设备,可以在内核中不选,熟能生巧罢了;

比如我没有ISDN设备 ,所以就把ISDN去掉;

ISDN subsystem --->
< > Linux telephony support

如果您没有1394的设备 ,当然可以把1394的支持也去掉;等等。。。。。。。

如果您有USB的设备,要把USB方面好好看看;比如大家常用的移动硬盘;USB猫等,还有扫描仪等;

内核配置就说这么多吧,太多了,我也说不清楚,水平有限啊;

配置好后先要保存

Save Configuration to an Alternate File

出来一个

Enter a filename to which this configuration ,should be saved as an alternate. Leave blank to abort.
.config

按回车就行了,这样就保存住了;

然后退出 Exit ,这时也会出现保存 ;

如果你想把.config保存起来,可以再复制一份到安全一点的目录,以备后用;

五、编译内核;

[root@localhost linux-2.6.12.3]# make
[root@localhost linux-2.6.12.3]# make modules_install

这样就编译好了,并把模块也安装在了 /lib/modules目录中了,请看:

[root@localhost linux-2.6.12.3]# ls /lib/modules/
2.6.11-1.1369_FC4 2.6.12.3


六、安装内核及配置grub或lilo ;


1、复制bzImage等相关文件,并创建initrd文件;

[root@localhost linux-2.6.12.3]# cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.12.3
[root@localhost linux-2.6.12.3]# cp System.map /boot/System.map-2.6.12.3
[root@localhost linux-2.6.12.3]# cd /boot
[root@localhost linux-2.6.12.3]# /sbin/mkinitrd initrd-2.6.12.3.img 2.6.12.3

我们把 编译出来的bzImage,拷入到/boot目录,拷贝成 vmlinuz-2.6.12.3;
并且用 mkinitrd 来创建imitrd-xxx.img 文件,其中xxx为内核的版本号,是通过 查看 /lib/modules来版本来对应的,我们是编译出来的是 2.6.12.3,所以就运行上面的命令创建,创建的出来的是initrd-2.6.12.3.img ;不创建这个文件,有时是启动不起来的,比如提示VFS错误等;


2、查看系统引导管理器grub或者lilo的配置文件。

如果想要让新内核能让系统引导管理器grub和lilo的菜单上能看得到,必须改 grub.conf或者lilo.conf,但我们必须保留老内核的在grub和lilo的启动菜单,毕竟我们编内核不能百分百的成功,对不对??安全第一吧;

我只说grub的,我没有lilo,也不会用。所以咱们还是GRUB吧,FC 4 系统引导管理器是 GRUB,所以我们谈谈GRUB的设置;

查看 /etc/grub.conf;

比如我的grub.conf的内容是这样的;

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,7)
# kernel /boot/vmlinuz-version ro root=/dev/hda8
# initrd /boot/initrd-version.img
#boot=/dev/hda
default=0
timeout=5
#splashimage=(hd0,7)/boot/grub/splash.xpm.gz
#hiddenmenu
title Fedora Core (2.6.11-1.1369_FC4)
         root (hd0,7)
         kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/ rhgb quiet
         initrd /boot/initrd-2.6.11-1.1369_FC4.img
title WinXP
         rootnoverify (hd0,0)
         chainloader +1

我们要把老内核的启动保留下来,以防不测,我们只加入新的内核的启动;所以我加上这样一段;

title Fedora Core (2.6.12.3)
root (hd0,7)
kernel /boot/vmlinuz-2.6.12.3 ro root=LABEL=/ rhgb quiet
initrd /boot/initrd-2.6.12.3.img

咱们再来看一下改过后的配置文件;

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,7)
# kernel /boot/vmlinuz-version ro root=/dev/hda8
# initrd /boot/initrd-version.img
#boot=/dev/hda
default=0
timeout=5
#splashimage=(hd0,7)/boot/grub/splash.xpm.gz
#hiddenmenu
title Fedora Core (2.6.12.3)
         root (hd0,7)
         kernel /boot/vmlinuz-2.6.12.3 ro root=LABEL=/ rhgb quiet
         initrd /boot/initrd-2.6.12.3.img
title Fedora Core (2.6.11-1.1369_FC4)
         root (hd0,7)
         kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/ rhgb quiet
         initrd /boot/initrd-2.6.11-1.1369_FC4.img
title WinXP
         rootnoverify (hd0,0)
         chainloader +1

然后重新启动机器,如果出现VFS错误,可能就是我写重要的那个地方出了错误;

注意:如果重新启用内核后,原来安装的显示卡驱动,比如 NVIDIA和ATI的驱动还要重新安装;

后记:

为写声卡及其其它硬件设备的安装教程做准备,重写此文档;并更正一些错误;

附录:

1、《内核管理概述》
2、 《Fedora / Redhat 软件包管理指南》
3、内核主站:http://kernel.org

Read: 587

Linux 日常命令

NO 分类 PS1 命令名 用法及参数 功能注解      
1 文件管理 # ls ls -a 列出当前目录下的所有文件,包括以.头的隐含文件      
文件管理 # ls ls -l或ll 列出当前目录下文件的详细信息      
文件管理 # pwd pwd 查看当前所在目录的绝对路经      
文件管理 # cd cd .. 回当前目录的上一级目录      
文件管理 # cd cd – 回上一次所在的目录      
文件管理 # cd cd ~ 或 cd 回当前用户的宿主目录      
文件管理 # cd cd ~用户名 回指定用户的宿主目录      
2 文件管理 # mkdir mkdir 目录名 创建一个目录      
文件管理 # mkdir mkdir –p 递归式去创建一些嵌套目录      
文件管理 # rmdir Rmdir 空目录名 删除一个空目录      
3 文件管理 # rm rm 文件名 文件名 删除一个文件或多个文件      
文件管理 # rm rm -rf 非空目录名 递归删除一个非空目录下的一切,不让提式-f      
4 文件管理 # cat cat文件名 一屏查看文件内容      
5 文件管理 # more more文件名 分页查看文件内容      
6 文件管理 # less less 文件名 可控分页查看文件内容      
7 文件管理 # grep grep字符 文件名 根据字符匹配来查看文件部分内容      
8 文件管理 # mv mv 路经/文件 /经/文件 移动相对路经下的文件到绝对路经下      
文件管理 # mv mv 文件名 新名称 在当前目录下改名      
9 文件管理 # cp cp /路经/文件 ./ 移动绝对路经下的文件到当前目录下      
10 文件管理 # find find 路经 -name “字符串” 查找路经所在范围内满足字符串匹配的文件和目录      
11 文件管理 # ln ln 源文件 链接名 创建当前目录源文件的硬链接      
ln /home/test /usr/test1 在/usr下建立/home/test的硬链接      
12 文件管理 # ln Ln -s a b 创建当前目录下a的符号链接b   
13 文件管理 # touch touch file1 file2 创建两个空文件      
14 磁盘管理 # df df 用于报告文件系统的总容量,使用量,剩余容量。      
15 磁盘管理 # du du -b /home 查看目前/HOME目录的容量(k)及子目录的容量(k)。      
16 磁盘管理 # fdisk fdisk -l 查看系统分区信息   
17 磁盘管理 # fdisk fdisk /dev/sdb 为一块新的SCSI硬盘进行分区   
18 磁盘管理 # mkfs.ext3 Mkfs.ext3 /dev/sdb1
为第一块SCSI硬盘的第一主分区格式化成
ext3的文件系统   
      mkfs.ext2 Mkfs.ext2/dev/sdb2 格式化成ext2文件系统   
19 磁盘管理 # mount mount -t 文件系统类型 设备路经 访问路经      
磁盘管理 #    文件系统类型         
         Iso9660 光驱文件系统      
         vfat Fat文件系统(windows)      
挂载光驱 # mount –t iso9660 /dev/cdrom /mnt/cdrom      
挂载FAT # mount –t vfat /dev/hda5 /mnt/cdrom 挂第一个ide的第五个逻辑分区   
17 磁盘管理 # Umount /mnt/cdrom 卸载/mnt/cdrom为空   
18 文件权限 # chmod chmod u+s file 为file的属主加上特殊权限      
         chmod g+r file 为file的属组加上读权限      
         chmod o+w file 为file的其它用户加上写权限      
         chmod a-x file 为file的所有用户减去执行权限   
chmod 765 file 为file的属主设为完全权限,属组设成读写权,其它用户具有读和执心权限   
19 文件权限 # chown chown root /home 把/home的属主改成root用户   
20 文件权限 # chgrp chgrp root /home 把/home的属组改成root组   
21 打印管理 # redhat-config-printer-tui 进入安装打印机界面      
22 打印管理 # lp lp –d hptr file 打印file到hptr的打印机上      
23 打印管理 # lpq Lpq –P 打印机名 查看打印机的状态      
24 打印管理 # lprm Lprm –P 打印机名 a 删除打印机内的打印作业      
25 打印管理 # disable Disable –r “changing paper” HPtr 禁用打印机并提示原因   
26 打印管理 # enable Enable HPtr 重新启用被禁用的      
27 用户管理 # useradd Useradd 创建一个新的用户      
28 用户管理 # groupadd Groupadd 组名 创建一个新的组      
29 用户管理 # passwd Passwd 用户名 为用户创建密码      
30 用户管理 # Passwd -d Passwd -d用户名 删除用户密码也能登陆      
31 用户管理 # Passwd -l Passwd -l用户名 锁定账号密码      
32 用户管理 # Passwd -u Passwd -u用户名 解锁账号密码      
33 用户管理 # Passwd -S Passwd -S用户名 查询账号密码      
34 用户管理 # Usermod -l Usermod -l 新用户名 老用户名 为用户改名      
35 用户管理 # Usermod -L Usermod -L 要锁定用户名 锁定用户登陆      
36 用户管理 # Usermod -U Usermod –U解锁用户名 解锁用户登陆      
37 用户管理 # Usermod -u Usermod –u 501用户名 改变用户UID      
38 用户管理 # Userdel Userdel–r 用户名 删除用户一切      
39 用户管理 # Groupmod -n Groupmod –n新用户名 老用户名 为组改名      
40 用户管理 # Groupmod -g Groupmod –g 501 组名 改变组GID      
41 用户管理 # groupdel Groupdel组名 先应删它的用户 删除组      
42 用户管理 # gpasswd -a gpasswd -a 用户名 组名 增加用户到组      
43 用户管理 # Id id 用户名 查用户信息      
44 软件管理 # rpm -qa rpm –qa | less 查询已安装RPM      
45 软件管理 #    rpm –qa | grep ftp 查询指定RPM      
46 软件管理 # rpm -q rpm -q 已安装的RPM包 查是否安装      
47 软件管理 #    rpm -q telnet-server 查看telnet服务器包   
48 软件管理 # rpm -qi rpm –qi 软件包名称 查看软件的描述信息   
49 软件管理 # rpm -ql rpm –ql软件包名称 查询软件包的文件列表   
50 软件管理 # rpm -qf rpm –qf软件包名称 查询某个文件所属的软件包   
51 软件管理 # rpm -qp rpm –qp软件包全名 查询未安装的软件包信息   
52 软件管理 # rpm -e rpm –e 软件包名称 删除具体的软件包   
53 软件管理 # rpm -U rpm –Uvh软件包全名 升级软件包并显示过程   
54 软件管理 # rpm -ivh rpm –ivh 软件包全名 安装软件包并显示过程   
55 软件管理 # rpm -V rpm –V软件包名称 验证软件包的大小,类型等   
56 软件管理 # tar -c 创建包 –x 释放包 -v 显示命令过程 –z 代表压缩包   
57 软件管理 # tar -cf tar –cvf benet.tar /home/benet 把/home/benet目录打包   
58 软件管理 # tar -czf tar –zcvf benet.tar.gz /mnt 把目录打包并压缩   
59 软件管理 # tar –tf tar –tf benet.tar 看非压缩包的文件列表   
60 软件管理 # tar –tzf tar –tf benet.tar.gz 看压缩包的文件列表   
61 软件管理 # tar –xf tar –xf benet.tar 非压缩包的文件恢复   
62 软件管理 # tar –zxvf tar –zxvf benet.tar.gz 压缩包的文件解压恢复   
63 软件管理 # tar -jxvf tar –jxvf benet.tar.bz2      
64 软件管理 # diff diff file1 file2 > 补丁名.patch 为新旧文件生成补丁文件   
65 软件管理 # diff diff file1 file2 比较两个文件的区别   
66 软件管理 # Patch Patch file补丁名.patch 打补丁   
67 软件管理 # ./configure –prefix=/usr/local/ 编译前配置   
68 软件管理 # make 编译   
69 软件管理 # make install 安装编译好的源码包   
70 启动管理 # reboot Init 6 重启LINUX系统   
71 启动管理 # Halt Init 0 Shutdown –h now 关闭LINUX系统   
72 启动管理 # runlevel    显示系统运行级   
73 启动管理 # Init [0123456]    改变系统运行级,7种   
74 启动管理 # Chkconfig –-list [服务名称] 查看服务的状态   
75 启动管理 # Chkconfig –-level <运行级> <服务名> on|off|set 设置服务的启动状态   
76 启动管理 # Chkconfig <服务名> on|off|set 设置非独立服务启状态   
77 进程管理 # Top动态 Ps-aux静态 进程树pstree 查看系统进程   
78 进程管理 # 程序名 & 后台运行程序      
79 进程管理 # fg 把后台运行的进程调回前台      
80 进程管理 # bg 把前台运行进程调到后台      
81 进程管理 # renice Renice +1 180 把180号进程的优先级加1   
82 进程管理 # kill Kill PID 终止某个PID进程   
83 进程管理 # at at 5pm + 3 days
/bin/ls 指定三天后下午5:00执行/bin/ls   
84 进程管理 # crontab Crontab -e 用VI的形式来编辑自动周期性任务   
85 进程管理 # crontab Crontab -l 查看自动周期性任务   
86 进程管理 # crontab Crontab -r 删除自动周期性任务   
87 进程管理 # crond Service crond <start|stop|restart|status>   
马上启动自动周期性服务 Service crond <启动|停止|重启|状态>   
        
实现磁盘配额 (注安装LINUX时建立/home分区)
目标:对用户zhao在/home目录上实现soft limit为5k,hard limit 为10k的磁盘配额
实现步骤:
1. 修改包含/home的行, #vi /etc/fstab, 改为:defaults,usrquota。也就是增加usrquota项。然后保存退出。
2、卸载/home目录 #umount /home
3. 挂接/home目录 #mount /home
4、增加用户zhao #useradd zhao
5、修改密码 #passwd zhao
6、生成关于/home目录的quota信息 # quotacheck -cmug /home
#quotacheck -vu /home
7、查看所有用户的信息 #repquota -au
8、设置配额 #edquota -u zhao
将soft 和hard 分别改为5和10
9、保存并退出 #wq!
10、修改时间 #edquota -t
11、 #wq!
12.开启/home上的磁盘配额功能 #quotaon /home
13.查询配额 #quota -u zhao
14.验证配额 #su – zhao
$touch myfile

cat cd
chmod chown
cp cut

名称:cat
使用权限:所有使用者
使用方式:cat [-AbeEnstTuv] [–help] [–version] fileName
说明:把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案)
参数:
-n 或 –number 由 1 开始对所有输出的行数编号
-b 或 –number-nonblank 和 -n 相似,只不过对于空白行不编号
-s 或 –squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v 或 –show-nonprinting

范例:
cat -n textfile1 > textfile2 把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里
cat -b textfile1 textfile2 >> textfile3 把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3

名称 : cd
使用权限 : 所有使用者

使用方式 : cd [dirName]

说明 : 变换工作目录至 dirName。 其中 dirName 表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的 home directory (也就是刚 login 时所在的目录)。

另外,"~" 也表示为 home directory 的意思,"." 则是表示目前所在的目录,".." 则表示目前目录位置的上一层目录。

范例 : 跳到 /usr/bin/ :
cd /usr/bin

跳到自己的 home directory :
cd ~

跳到目前目录的上上两层 :
cd ../..

指令名称 : chmod
使用权限 : 所有使用者

使用方式 : chmod [-cfvR] [–help] [–version] mode file…

说明 : Linux/Unix 的档案存取权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所存取。

把计 :

mode : 权限设定字串,格式如下 : [ugoa…][[+-=][rwxX]…][,…],其中u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
-c : 若该档案权限确实已经更改,才显示其更改动作
-f : 若该档案权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
–help : 显示辅助说明
–version : 显示版本

范例 :将档案 file1.txt 设为所有人皆可读取 :
chmod ugo+r file1.txt

将档案 file1.txt 设为所有人皆可读取 :
chmod a+r file1.txt

将档案 file1.txt 与 file2.txt 设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
chmod ug+w,o-w file1.txt file2.txt

将 ex1.py 设定为只有该档案拥有者可以执行 :
chmod u+x ex1.py

将目前目录下的所有档案与子目录皆设为任何人可读取 :
chmod -R a+r *

此外chmod也可以用数字来表示权限如 chmod 777 file
语法为:chmod abc file

其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。

r=4,w=2,x=1
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=7。

范例:
chmod a=rwx file


chmod 777 file

效果相同
chmod ug=rwx,o=x file


chmod 771 file

效果相同

若用chmod 4755 filename可使此程式具有root的权限

指令名称 : chown
使用权限 : root

使用方式 : chmod [-cfhvR] [–help] [–version] user[:group] file…

说明 : Linux/Unix 是多人多工作业系统,所有的档案皆有拥有者。利用 chown 可以将档案的拥有者加以改变。一般来说,这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以改变别人的档案拥有者,也没有权限可以自己的档案拥有者改设为别人。只有系统管理者(root)才有这样的权限。

把计 :

user : 新的档案拥有者的使用者 IDgroup : 新的档案拥有者的使用者群体(group)-c : 若该档案拥有者确实已经更改,才显示其更改动作-f : 若该档案拥有者无法被更改也不要显示错误讯息-h : 只对于连结(link)进行变更,而非该 link 真正指向的档案-v : 显示拥有者变更的详细资料-R : 对目前目录下的所有档案与子目录进行相同的拥有者变更(即以递回的方式逐个变更)–help : 显示辅助说明–version : 显示版本

范例 :
将档案 file1.txt 的拥有者设为 users 群体的使用者 jessie :
chown jessie:users file1.txt

将目前目录下的所有档案与子目录的拥有者皆设为 users 群体的使用者 lamport :
chmod -R lamport:users *

名称:cp
使用权限:所有使用者

使用方式:

cp [options] source dest
cp [options] source… directory

说明:将一个档案拷贝至另一档案,或将数个档案拷贝至另一目录。

把计

-a 尽可能将档案状态、权限等资料都照原状予以复制。
-r 若 source 中含有目录名,则将目录下之档案亦皆依序拷贝至目的地。
-f 若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制。
范例:
将档案 aaa 复制(已存在),并命名为 bbb :
cp aaa bbb

将所有的C语言程式拷贝至 Finished 子目录中 :
cp *.c Finished

名称:cut

使用权限:所有使用者

用法:cut -cnum1-num2 filename

说明:显示每行从开头算起 num1 到 num2 的文字。

范例:

shell>> cat example
test2
this is test1
shell>> cut -c0-6 example ## print 开头算起前 6 个字元
test2
this i

名称 : find
用法 : find
使用说明 :

将档案系统内符合 expression 的档案列出来。你可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。

find 根据下列规则判断 path 和 expression,在命令列上第一个 – ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression

expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。

-mount, -xdev : 只检查和指定目录在同一个档案系统下的档案,避免列出其它档案系统中的档案
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比档案 file 更晚被读取过的档案
-atime n : 在过去 n 天过读取过的档案
-cmin n : 在过去 n 分钟内被修改过
-cnewer file :比档案 file 更新的档案
-ctime n : 在过去 n 天过修改过的档案
-empty : 空的档案-gid n or -group name : gid 是 n 或是 group 名称是 name
-ipath p, -path p : 路径名称符合 p 的档案,ipath 会忽略大小写
-name name, -iname name : 档案名称符合 name 的档案。iname 会忽略大小写
-size n : 档案大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。-type c : 档案类型是 c 的档案。
d: 目录
c: 字型装置档案
b: 区块装置档案
p: 具名贮列
f: 一般档案
l: 符号连结
s: socket
-pid n : process id 是 n 的档案

你可以使用 ( ) 将运算式分隔,并使用下列运算。
exp1 -and exp2
! expr
-not expr
exp1 -or exp2
exp1, exp2
范例:
将目前目录及其子目录下所有延伸档名是 c 的档案列出来。
# find . -name "*.c"

将目前目录其其下子目录中所有一般档案列出
# find . -ftype f

将目前目录及其子目录下所有最近 20 分钟内更新过的档案列出
# find . -ctime -20

名称:less

使用权限:所有使用者

使用方式:

less [Option] filename

说明:
less 的作用与 more 十分相似,都可以用来浏览文字档案的内容,不同的是 less 允许使用者往回卷动
以浏览已经看过的部份,同时因为 less 并未在一开始就读入整个档案,因此在遇上大型档案的开启时,会比一般的文书编辑器(如 vi)来的快速。

范例:

指令名称 : ln
使用权限 : 所有使用者

使用方式 : ln [options] source dist,其中 option 的格式为 :

[-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}]
[–help] [–version] [–]
说明 : Linux/Unix 档案系统中,有所谓的连结(link),我们可以将其视为档案的别名,而连结又可分为两种 : 硬连结(hard link)与软连结(symbolic link),硬连结的意思是一个档案可以有多个名称,而软连结的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬连结是存在同一个档案系统中,而软连结却可以跨越不同的档案系统。
ln source dist 是产生一个连结(dist)到 source,至于使用硬连结或软链结则由参数决定。

不论是硬连结或软链结都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。

-f : 链结时先将与 dist 同档名的档案删除-d : 允许系统管理者硬链结自己的目录-i : 在删除与 dist 同档名的档案时先进行询问-n : 在进行软连结时,将 dist 视为一般的档案-s : 进行软链结(symbolic link)-v : 在连结之前显示其档名-b : 将在链结时会被覆写或删除的档案进行备份-S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾-V METHOD : 指定备份的方式–help : 显示辅助说明–version : 显示版本
范例 :
将档案 yy 产生一个 symbolic link : zz
ln -s yy zz

将档案 yy 产生一个 hard link : zz
ln yy xx

名称:locate
使用权限:所有使用者
使用方式: locate [-q] [-d ] [–database=]
locate [-r ] [–regexp=]
locate [-qv] [-o ] [–output=]
locate [-e ] [-f ] <[-l ] [-c]
<[-U ] [-u]>
locate [-Vh] [–version] [–help]
说明:
locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的资料库,之后当寻找时就只需查询这个资料库,而不必实际深入档案系统之中了。

在一般的 distribution 之中,资料库的建立都被放在 contab 中自动执行。一般使用者在使用时只要用

# locate your_file_name

的型式就可以了。 参数:
-u
-U

建立资料库,-u 会由根目录开始,-U 则可以指定开始的位置。

-e


排除在寻找的范围之外。

-l
如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的权限资料。

-f
将特定的档案系统排除在外,例如我们没有到理要把 proc 档案系统中的档案放在资料库中。

-q
安静模式,不会显示任何错误讯息。

-n
至多显示 个输出。

-r
使用正规运算式 做寻找的条件。

-o
指定资料库存的名称。

-d

指定资料库的路径

-h
显示辅助讯息

-v
显示更多的讯息

-V
显示程式的版本讯息 范例:

locate chdrv : 寻找所有叫 chdrv 的档案
locate -n 100 a.out : 寻找所有叫 a.out 的档案,但最多只显示 100 个
locate -u : 建立资料库

名称 : ls
使用权限 : 所有使用者

使用方式 : ls [-alrtAFR] [name…]

说明 : 显示指定工作目录下之内容(列出目前工作目录所含之档案及子目录)。

-a 显示所有档案及目录 (ls内定将档案名或目录名称开头为"."的视为隐藏档,不会列出)
-l 除档案名称外,亦将档案型态、权限、拥有者、档案大小等资讯详细列出
-r 将档案以相反次序显示(原定依英文字母次序)
-t 将档案依建立时间之先后次序列出
-A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
-F 在列出的档案名称后加一符号;例如可执行档则加 "*", 目录则加 "/"
-R 若目录下有档案,则以下之档案亦皆依序列出

范例:
列出目前工作目录下所有名称是 s 开头的档案,愈新的排愈后面 :
ls -ltr s*

将 /bin 目录以下所有目录及档案详细资料列出 :
ls -lR /bin

列出目前工作目录下所有档案及目录;目录于名称后加 "/", 可执行档于名称后加 "*" :
ls -AF

名称:more
使用权限:所有使用者
使用方式:more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..]
说明:类似 cat ,不过会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h 。
参数:-num 一次显示的行数
-d 提示使用者,在画面下方显示 [Press space to continue, q to quit.] ,如果使用者按错键,则会显示 [Press h for instructions.] 而不是 哔 声
-l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能
-f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)
-p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容
-c 跟 -p 相似,不同的是先显示内容再清除其他旧资料
-s 当遇到有连续两行以上的空白行,就代换为一行的空白行
-u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)
+/ 在每个档案显示前搜寻该字串(pattern),然后从该字串之后开始显示
+num 从第 num 行开始显示
fileNames 欲显示内容的档案,可为复数个数
范例:
more -s testfile 逐页显示 testfile 之档案内容,如有连续两行以上空白行则以一行空白行显示。
more +20 testfile 从第 20 行开始显示 testfile 之档案内容。

名称:mv
使用权限:所有使用者

使用方式:

mv [options] source dest
mv [options] source… directory
说明:将一个档案移至另一档案,或将数个档案移至另一目录。
参数:-i 若目的地已有同名档案,则先询问是否覆盖旧档。

范例:

将档案 aaa 更名为 bbb :
mv aaa bbb

将所有的C语言程式移至 Finished 子目录中 :
mv -i *.c

名称:rm
使用权限:所有使用者

使用方式:rm [options] name…

说明:删除档案及目录。

把计

-i 删除前逐一询问确认。
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
-r 将目录及以下之档案亦逐一删除。
范例:
删除所有C语言程式档;删除前逐一询问确认 :
rm -i *.c

将 Finished 子目录及子目录中所有档案删除 :
rm -r Finished

名称:rmdir
使用权限:于目前目录有适当权限的所有使用者

使用方式: rmdir [-p] dirName

说明: 删除空的目录。

参数: -p 是当子目录被删除后使它也成为空目录的话,则顺便一并删除。

范例:

将工作目录下,名为 AAA 的子目录删除 :
rmdir AAA

在工作目录下的 BBB 目录中,删除名为 Test 的子目录。若 Test 删除后,BBB 目录成为空目录,则 BBB 亦予删除。
rmdir -p BBB/Test

名称:split
使用权限:所有使用者

使用方式:split [OPTION] [INPUT [PREFIX]]

说明:

将一个档案分割成数个。而从 INPUT 分割输出成固定大小的档案,其档名依序为 PREFIXaa, PREFIXab…;PREFIX 预设值为 `x。若没有 INPUT 档或为 `-,则从标准输入读进资料。

匡兜

-b, –bytes=SIZE

SIZE 值为每一输出档案的大小,单位为 byte。
-C, –line-bytes=SIZE

每一输出档中,单行的最大 byte 数。
-l, –lines=NUMBER

NUMBER 值为每一输出档的列数大小。
-NUMBER

与 -l NUMBER 相同。
–verbose

于每个输出档被开启前,列印出侦错资讯到标准错误输出。
–help

显示辅助资讯然后离开。
–version

列出版本资讯然后离开。
SIZE 可加入单位: b 代表 512, k 代表 1K, m 代表 1 Meg。

范例:

PostgresSQL 大型资料库备份与回存:

因 Postgres 允许表格大过你系统档案的最大容量,所以要将表格 dump 到单一的档案可能会有问题,使用 split进行档案分割。

% pg_dump dbname | split -b 1m – filename.dump.

重新载入

% createdb dbname
% cat filename.dump.* | pgsql dbname

名称:touch
使用权限:所有使用者

使用方式:
touch [-acfm]
[-r reference-file] [–file=reference-file]
[-t MMDDhhmm[[CC]YY][.ss]]
[-d time] [–date=time] [–time={atime,access,use,mtime,modify}]
[–no-create] [–help] [–version]
file1 [file2 …]

说明:
touch 指令改变档案的时间记录。 ls -l 可以显示档案的时间记录。

参数:
a 改变档案的读取时间记录。
m 改变档案的修改时间记录。
c 假如目的档案不存在,不会建立新的档案。与 –no-create 的效果一样。
f 不使用,是为了与其他 unix 系统的相容性而保留。
r 使用参考档的时间记录,与 –file 的效果一样。
d 设定时间与日期,可以使用各种不同的格式。
t 设定档案的时间记录,格式与 date 指令相同。
–no-create 不会建立新档案。
–help 列出指令格式。
–version 列出版本讯息。

范例:

最简单的使用方式,将档案的时候记录改为现在的时间。若档案不存在,系统会建立一个新的档案。

touch file
touch file1 file2

将 file 的时间记录改为 5 月 6 日 18 点 3 分,公元两千年。时间的格式可以参考 date 指令,至少需输入 MMDDHHmm ,就是月日时与分。

touch -c -t 05061803 file
touch -c -t 050618032000 file

将 file 的时间记录改变成与 referencefile 一样。

touch -r referencefile file

将 file 的时间记录改成 5 月 6 日 18 点 3 分,公元两千年。时间可以使用 am, pm 或是 24 小时的格式,日期可以使用其他格式如 6 May 2000 。

touch -d "6:03pm" file
touch -d "05/06/2000" file
touch -d "6:03pm 05/06/2000" file

Read: 679

内核管理概述

作者:北南南北
来自:LinuxSir.Org
摘要:本文讲述与内核操作有关的基础知识;比如编译内核,装载、移除内核模块,查看模块信息等;本文涉及相关的命令有modprobe、insmod、depmod、rmmod、modinfo等;


++++++++++++++++++++++++++++++++++++++++++++++++++++++
正文
++++++++++++++++++++++++++++++++++++++++++++++++++++++


一、什么是内核;

内核官方: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 <modname>] <modname> [parameters...]
modprobe -r [-n] [-i] [-v] <modulename> ...
modprobe -l -t <dirname> [ -a <modulename> ...]

上面是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了,我写文档也无非是查看这些东西,然后实践再写给大家;我能写出来,我想您的能力并不一定比我差,应该超出我才对;


相关文档:

1、《编译内核操作流程 ──为新手指南》
2、《内核管理概述》
3、《用ALSA驱动声卡流程详解》
4、 《Fedora / Redhat 软件包管理指南》
5、内核主站:http://kernel.org

Read: 405