内核&硬件信息
第一节硬件概述
主要概念
设备驱动程序可以编译入静态内核镜像,也可以作为内核模块。作为内核模块出现的设备驱动程序可以通过文件/f进行配置。
红帽维护一个红帽企业版Linux所支持的硬件认证列表,可以通过hardware.
redhat/进行访问。
内核信息储存在叫做dmesg的动态缓冲区中,可以用dmesg命令查询。
文件/var/log/dmesg 含有最近一次引导后dmesg缓冲区的快照。
文件/proc/cpuinfo 报告有关系统中央处理器的信息。
文件/proc/meminfo 报告有关系统内存的信息。
目录/proc/ide/报告有关系统IDE驱动器的信息。
linux内核设计与实现 pdf
设备驱动程序
Linux内核的一个主要工作是提供对机器硬件的访问。对有些基本硬件如CPU和内存的
管理,是内核核心功能的一部分。其他硬件,如网络接口卡、USB设备和磁盘,内核使用叫做设备驱动程序(device driver)的内核专门组件进行管理。许多设备驱动程序是可以配置的,配置方式通常是在装载时为其赋予参数。Linux内核的模块式设计是它受欢迎的原因之一。设备驱动程序有两种实施方式:作为静态内核映像(static kernel image)的一部分,或是作为内核模块(kernel module)。设备驱动程序的实施方式决定了其参数(如果有的话)的配置方式。
静态内核映像(Static Kernel Image)
静态内核映像是引导系统时装载的文件。在红帽企业版Linux中,镜像文件通常位于/boot 目录,名为vmlinuz-version,其中version是内核的版本号。
在位于存储设备上的文件系统可以使用之前,引导过程中需要使用的设备驱动程序,如IDE 设备驱动程序和控制台驱动程序,一般都在核心内核映像中。因为这些设备驱动程序是作为内核映像的一部分装载,所以唯一可以赋予它们参数的机会是在引导时(boottime)赋值。大多数Linux引导程序如GRUB和LILO,允许用户在引导时通过内核命令行(kernel command line)赋予内核参数。文件/proc/cmdline记录了用来引导内核当前实例的命令行。[root@station root]# cat /proc/cmdline
ro root=LABEL=/ vga=0x317 5
有关常用内核引导参数的文档可以在bootparam(7) man手册页中到。
内核模块
补充设备驱动程序(在系统引导开始阶段用不到的驱动程序),如网络接口驱动程序和
声卡驱动程序,通常以内核模块的形式实施。内核模块作为文件存储在文件系统中,通常位于目录/lib/modules/version下,同样,version为相应的内核版本号。Linux内核模块“按需”装载:当内核首次访问某个设备时,从文件系统中装载这个设备的驱动器程序。如果与特定设备驱动程序模块相应的设备不存在(或没有使用),就不会装载内核模块。
lsmod 命令可以产生当前装载的内核模块列表,或者可以查看文件/proc/modules 获得同样的信息。
[root@station root]# lsmod
Module Size Used by
netloop 40129 0
netbk 129153 0 [permanent]
blktap 148709 2 [permanent]
blkbk 54009 0 [permanent]
ipt_MASQUERADE 36801 1
iptable_nat 40773 1
ip_nat 53101 2 ipt_MASQUERADE,iptable_nat
xt_state 35265 1
ip_conntrack 91237 4 ipt_MASQUERADE,iptable_nat,ip_nat,xt_state
nfnetlink 40457 2 ip_nat,ip_conntrack
ipt_REJECT 38849 2
xt_tcpudp 36417 4
可以在装载模块设备驱动程序的时候赋予其参数。内核“按需”装载模块时,会查看文
件/f中含有的模块参数。例如执行兼容SoundBlaster的声卡设备驱动程序的sb内核模块时,可以配置格式type=N(N是一个整数)的参数,使其可以兼容某种声卡。如果在文件/f 中添加合适的命令行,每次内核引导sb模块时都可以设置这个参数。
[root@station root]# cat /f
options sb type=3①
alias eth0 e100
alias eth1 airo
alias snd-card-0 snd-intel8x0
install snd-intel8x0 /sbin/modprobe --ignore-install snd-intel8x0 &&
/usr/sbin/alsactl restore remove snd-intel8x0 { /usr/sbin/alsactl store >/dev/null
2>&1 || : ; }; /sbin/modprobe -r --alias usb-controller uhci-hcd
①这个命令行指定每次装载sb模块时需要使用的参数。
大多数Linux支持硬件的模块都已经默认包括在内。以内核模块形式实施的设备驱动程序只有在它管理的设备被探测到的时候才会用到,这样浪费的资源只是一点点磁盘空间而已。
红帽支持的硬件数据库
红帽维护一个支持硬件的硬件认证列表dhat/。这个数
据库列出了红帽发行版本(和红帽技术支持服务)支持的硬件和红帽没有正式支持但也可以运行的硬件。
硬件信息源
以下资源可以用来查看系统上安装的硬件信息。
内核信息、dmesg缓冲区和/var/log/dmesg
内核启动的时候会在屏幕上显示一系列的信息,系统启动完成后可以用dmesg命令查看[root@station root]# dmesg
Linux version 2.6.18-53.el5 (brewbuilder@dhat) (gcc
version 4.1.2 20070626 (Red Hat 4.1.2-14)) #1 SMP Wed Oct 10 16:34:19 EDT 2007
Command line: ro root=/dev/hdvg/snap rhgb quiet
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009f000 (usable)
BIOS-e820: 000000000009f000 - 00000000000a0000 (reserved)
BIOS-e820: 0000000000100000 - 000000003fe81400 (usable)
BIOS-e820: 000000003fe81400 - 0000000040000000 (reserved)
BIOS-e820: 00000000f0000000 - 00000000f4007000 (reserved)
BIOS-e820: 00000000f4008000 - 00000000f400c000 (reserved)
BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved)
BIOS-e820: 00000000fed20000 - 00000000feda0000 (reserved)
BIOS-e820: 00000000fee00000 - 00000000fee10000 (reserved)
BIOS-e820: 00000000ffb00000 - 0000000100000000 (reserved)
...
如果机器已经运行了一段时间,那么缓冲区中会充满陆陆续续记录的内核信息,最开始的启动信息就会丢失。在默认的红帽企业版Linux启动过程中,dmesg缓冲区的快照会被存储在文件/var/log/dmesg 里。每次引导时这个文件都会被重写,所以它的内容就是最近一次启
动的信息。
kudzu
kudzu 是一个启动应用程序,它可以探测新添加或者删除的硬件,并进行适当的配
置。虽然kudzu不直接报告发现的硬件,学习它的基础结构可以帮助我们了解在红帽企业版Linux系统中硬件是如何配置的。
我们先来看一个以后会经常遇到的目录/etc/sysconfig。这个目录是存放硬件和软件配置信息的存储库。/etc/sysconfig/hwconf 是一个当前发现的硬件动态数据库。浏览这个文件可以对当前机器上的硬件有一个大概的了解。
[root@station root]# head /etc/sysconfig/hwconf
class: OTHER
bus: PCI
detached: 0
driver: i2c-i801
desc: "Intel Corporation 82801G (ICH7 Family) SMBus Controller"
vendorId: 8086
deviceId: 27da
subVendorId: 1028
subDeviceId: 01c2
[root@station root]# grep desc /etc/sysconfig/hwconf
desc: "Intel Corporation 82801G (ICH7 Family) SMBus Controller"
desc: "Intel Corporation 82801GBM (ICH7-M) LPC Interface Bridge"
desc: "Intel Corporation 82801 Mobile PCI Bridge"
desc: "Intel Corporation 82801G (ICH7 Family) PCI Express Port 3"
desc: "Intel Corporation 82801G (ICH7 Family) PCI Express Port 2"
第二节/proc 文件系统
另一个用来判断硬件配置的极有用的信息源是proc文件系统。proc文件系统是Linux内
核实现的虚拟文件系统,固定挂载在/proc 目录下。
[root@station hwdata]# mount
/
dev/hda3 on / type ext3 (rw)
none on /proc type proc (rw)
usbdevfs on /proc/bus/usb type usbdevfs (rw)
/dev/hda1 on /boot type ext3 (rw)
在实际工作中,我们会经常参考/proc 文件系统中的文件。
/proc/cpuinfo 记录了CPU的信息
cat /proc/cpuinfo
processor : 0 ①
vendor_id : GenuineIntel
cpu family : 6
model : 23
model name : Intel(R) Core(TM)2 Duo CPU P8700 @ 2.53GHz ②
stepping : 10
cpu MHz : 2534.000 ③
cache size : 3072 KB ④
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss syscall nx lm constant_tsc up arch_perfmon pebs bts rep_good xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni ssse3 cx16 sse4_1 hypervisor lahf_lm ida bogomips : 5068.00 ⑤
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management:
对①至⑤的注解:
①处理器号码。在单处理器机器上,这个号码是0。在SMP机器上,cpuinfo含有多个
段落,每个段落有不同的处理器号码标识。
②CPU型号
③CPU速度
④可以明显减少内存访问次数的CPU内存缓存大小。
⑤各属性标记,代表CPU的性能。比如,tsc 表示CPU支持时间戳计数器(需要准确
时间信息时使用),而pae表示CPU可以支持物理地址扩展。
/proc/meminfo记录了内存的信息
[root@tserver ~]# cat /proc/meminfo
MemTotal: 1021568 kB ①
MemFree: 754208 kB ②
Buffers: 78556 kB ③
Cached: 71076 kB ④
SwapCached: 0 kB
Active: 100984 kB
Inactive: 68288 kB
对①至④的注释
①代表物理内存的总量
②代表尚未使用的物理内存
③与块设备相关的缓存
④与与磁盘I/O相关的缓存
硬盘
内核负责自动探测硬盘的存在,就如同它探测处理器和内存一样。
目前主流的硬盘总线主要为SCSI SATA SAS
通常,Linux使用sdx格式命名发现的硬盘,其中x是一个或者多个小写字母。不幸的是,这些名字无法直接映射到驱动器的物理位置上,也不能映射到非常常用的SCSI ID号码。Linux 通常将第一个探测到的SCSI驱动器叫做sda,第二个叫做sdb,依此类推。但是如何判断Linux 将哪个驱动器认为是“第一个”或“第二个”是很困难的。更麻烦的是,如果机器添加一个新的SCSI硬盘,可能会导致所有硬盘名称发生变化。解决办法是采用UUID,详见其他专题。我们在目录/proc/scsi下面可以进行一些信息查询,比如/proc/scsi/scsi,/proc/scsi/device_info,从/var/log/dmesg下面也可以看到详细的硬盘信息
PCI设备
可以使用lspci 命令列出所有连接的PCI设备
[root@tserver scsi]# lspci
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01)
00:01.0 PCI bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 01)
00:07.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 08)
00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论