Linux內核及模塊


內核以及內核模塊

操作系統組成

1、內核 2shell 3、應用

內核作用

1、管理內存

2、調度任務

3、驅動硬件

4、網絡功能

5、安全

6、管理文件系統

內核=內核【vmlinuz-2.6.18-164.el5+內核模塊

內核:/boot/vmlinuz-2.6.18-164.el5

內核模塊:/lib/modules/`uname -r`/kernel/

[root@localhost ~]# du -sh /lib/modules/`uname -r`/

50M /lib/modules/2.6.18-164.el5/

 

無論是 vmlinuz-2.6.18-164.el5還是initrd-2.6.18-164.el5.img 在啟動的時候都必須被加載。

[root@localhost ~]# vim /etc/grub.conf

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE:  You have a /boot partition.  This means that

#          all kernel and initrd paths are relative to /boot/, eg.

#          root (hd0,0)

#          kernel /vmlinuz-version ro root=/dev/sda2

#          initrd /initrd-version.img

#boot=/dev/sda

default=0 在啟動的時候,5秒之內如果沒做任何動作,5秒之后默認啟動第一個標簽所對應的操作系統

timeout=5 在啟動的時候,5秒之內敲任意鍵會顯示此菜單

splashimage=(hd0,0)/grub/splash.xpm.gz 表示啟動的時候顯示的grub的背景

Hiddenmenu 表示這個菜單是隱藏的。

title Red Hat Enterprise Linux Server (2.6.18-164.el5) 標簽

        root (hd0,0) 表明引導分區在哪。在引導的時候不管是scisi接口還是IDE接口,硬盤通通hd,因為系統還沒起來,它沒有辦法來區分。第一塊硬盤第一個分區(掛在/boot目錄下)。所以引導的根指的就是引導分區。

        kernel /vmlinuz-2.6.18-164.el5 ro root=LABEL=/ rhgb quiet

內核在根下的vmlinuz-2.6.18-164.el5,這個根指的是引導分區。’/’表示root所表示的含義。ro表示在啟動的過程中內核最緊湊的1.8M是不能修改的,是以只讀的方式來進行啟動。但是一旦正常引導起來之后,我們有自己的文件系統根,所以這時候根要轉交給文件系統的根。root=LABEL=/ 表明真正的文件系統的根應該是LABEL=/ 的那個

[root@localhost ~]# findfs LABEL=/

/dev/sda2

rhgbredhat graphical boot 圖形化引導,一旦改成3級別,這個參數就沒有任何作用了。

quiet 表示靜默模式,內核在引導的時候實際上會有很多信息顯示在屏幕上,但是這些信息很多時候對我們沒有太大幫助,所以靜默意味着不要再顯示在控制台上了。

ro root=LABEL=/ rhgb quiet 向內核傳遞的一些參數

        initrd /initrd-2.6.18-164.el5.img

必須把文件系統相關的模塊加載進去之后,才能夠去識別根,模塊又在根上,所以成了雞和蛋的問題。這時候怎么處理?為了解決這個問題,它事先在內存中加載了一個鏡像文件,這個鏡像文件里面正是包含了要用的那些模塊。為了解決繞來繞去的關系,事先在引導的時候加載了一個驅動鏡像就可以了。

[root@localhost initrd]# cp /boot/initrd-2.6.18-164.el5.img ./

[root@localhost initrd]# file initrd-2.6.18-164.el5.img

initrd-2.6.18-164.el5.img: gzip compressed data, from Unix, last modified: Wed Dec 21 04:55:40 2016, max compression

[root@localhost initrd]# zcat initrd-2.6.18-164.el5.img |cpio -id 查看壓縮文件的內容並進行拆解

11704 blocks

[root@localhost initrd]# ll

total 2592

drwx------ 2 root root    4096 Jan  7 02:18 bin

drwx------ 3 root root    4096 Jan  7 02:18 dev

drwx------ 2 root root    4096 Jan  7 02:18 etc

-rwx------ 1 root root    2587 Jan  7 02:18 init

-rw------- 1 root root 2615764 Jan  7 02:17 initrd-2.6.18-164.el5.img

drwx------ 3 root root    4096 Jan  7 02:18 lib

drwx------ 2 root root    4096 Jan  7 02:18 proc

lrwxrwxrwx 1 root root       3 Jan  7 02:18 sbin -> bin

drwx------ 2 root root    4096 Jan  7 02:18 sys

drwx------ 2 root root    4096 Jan  7 02:18 sysroot

                                 

 

[root@localhost ~]# ll -h /boot/

total 5.4M

-rw-r--r-- 1 root root 933K Aug 19  2009 System.map-2.6.18-164.el5

-rw-r--r-- 1 root root  68K Aug 19  2009 config-2.6.18-164.el5

drwxr-xr-x 2 root root 1.0K Dec 21 05:06 grub

-rw------- 1 root root 2.5M Dec 21 04:55 initrd-2.6.18-164.el5.img

drwx------ 2 root root  12K Dec 21 04:50 lost+found

-rw-r--r-- 1 root root 105K Aug 19  2009 symvers-2.6.18-164.el5.gz

-rw-r--r-- 1 root root 1.8M Aug 19  2009 vmlinuz-2.6.18-164.el5 內核最核心部分

[root@localhost ~]# ll /lib/modules/`uname -r`/kernel/ 內核模塊

total 56

drwxr-xr-x  3 root root 4096 Dec 21 04:55 arch 表示各種各樣的平台

drwxr-xr-x  2 root root 4096 Dec 21 04:55 crypto 安全加密

drwxr-xr-x 42 root root 4096 Dec 21 04:55 drivers 驅動各種各樣的硬件

drwxr-xr-x 31 root root 4096 Dec 21 04:55 fs 文件系統

drwxr-xr-x  4 root root 4096 Dec 21 04:55 lib 各種各樣的庫

drwxr-xr-x 22 root root 4096 Dec 21 04:55 net 網絡功能

drwxr-xr-x  9 root root 4096 Dec 21 04:55 sound 聲卡

 

 

/proc/目錄表示內存和內核的映像。內存的東西以及內核的東西在這個目錄下都會有所反饋。該目錄下的很多文件大小都是0,雖然是0 不代表沒有數據。

[root@localhost initrd]# dmesg | grep -i cpu 查看CPU相關信息

[root@localhost initrd]# cat /proc/cpuinfo

[root@localhost initrd]# dmesg | grep -i mem 查看內存信息

[root@localhost initrd]# cat /proc/meminfo

 

[root@localhost initrd]# free -m

             total       used       free     shared    buffers     cached

Mem:           503        343        159          0         42        225

-/+ buffers/cache:         75        427

Swap:          509          0        509

如何清除緩存和Cache?只要在/proc/目錄下操作就可以了

[root@localhost vm]# cat /proc/sys/vm/drop_caches

0

[root@localhost vm]# echo "1" >/proc/sys/vm/drop_caches

[root@localhost vm]# free -m

             total       used       free     shared    buffers     cached

Mem:           503         84        419          0          0         10

-/+ buffers/cache:         73        429

Swap:          509          0        509

一般情況下,這些東西我們都不需要操作。

[root@localhost vm]# cat /proc/sys/net/ipv4/icmp_echo_ignore_all              

0

意味着使用pingping它的時候,它是不會忽略的。

[root@localhost vm]# echo "1" /proc/sys/net/ipv4/icmp_echo_ignore_all

忽略ping,這是一種臨時修改。永久性修改的話,編輯/etc/sysctl.conf

內核參數 /etc/sysctl.conf

[root@localhost vm]# echo "net.ipv4.icmp_echo_ignore_all=1" >>/etc/sysctl.conf

[root@localhost ipv4]# pwd

/proc/sys/net/ipv4

系統自動識別/proc/sys,所以只要寫net.ipv4.icmp_echo_ignore_all

一般這個文件重啟的時候才會生效。

[root@localhost ipv4]# sysctl -p

為了避免重啟,使用該指令,重新讓內核讀取一下參數。

 

 

系統為了實現更多的功能,需要把臃腫的那一部分做成模塊,想知道系統中目前加載了哪些模塊?

查看加載的模塊:【顯示所有的已經加載的】

[root@localhost ipv4]# lsmod |less

Module                  Size  Used by(被引用或者是依賴了多少次)

ipv6                  267361  18

xfrm_nalgo             13381  1 ipv6

crypto_api             12609  1 xfrm_nalgo

autofs4                29253  3

hidp                   23105  2

rfcomm                 42457  0

l2cap                  29505  10 hidp,rfcomm

lockd                  63081  0

 

查看網卡:

[root@localhost ipv4]# lsmod | grep eth0

[root@localhost ipv4]# dmesg | grep -i eth0

eth0: registered as PCnet/PCI II 79C970A

eth0: link up

[root@localhost ipv4]# lsmod | grep -i PCnet

pcnet32                35269  0

mii                     9409  1 pcnet32

 

具體的看某一個模塊:【詳細信息】

[root@localhost ipv4]# modinfo pcnet32

 

卸載lp模塊

[root@localhost ipv4]# lsmod | grep lp

lp                     15849  0

parport                37513  2 lp,parport_pc

[root@localhost ipv4]# rmmod lp

[root@localhost ipv4]# lsmod | grep lp

[root@localhost ipv4]#

 

加載模塊 insmod modprobe

[root@localhost ipv4]# insmod lp

insmod: can't read 'lp': No such file or directory

[root@localhost ipv4]# modprobe lp

[root@localhost ipv4]#

Modprobe 在加載的時候並不需要指明路徑,而且會自動尋找依賴關系,將依賴的模塊也自動裝上去。

Insmod 不但要指明路徑,而且還要指明依賴關系。所以要先安裝依賴的,比較麻煩

 

 

 

對模塊做一些參數的自定義的話,必須要去改 /etc/modprobe.conf文件

[root@localhost ipv4]# vim /etc/modprobe.conf

alias eth0 pcnet32

alias scsi_hostadapter mptbase 別名

alias scsi_hostadapter1 mptspi

alias scsi_hostadapter2 ata_piix

alias scsi_hostadapter3 ahci

alias snd-card-0 snd-ens1371

options snd-card-0 index=0 選項

options snd-ens1371 index=0

remove snd-ens1371 { /usr/sbin/alsactl store 0 >/dev/null 2>&1 || : ; }; /sbin/modprobe -r --

ignore-remove snd-ens1371

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM