單內核體系設計、但充分借鑒了微內核設計體系的優點,為內核引入模塊化機制。
內核組成部分核心,一般為bzImage,通常在/boot目錄下,名稱為vmlinuz-VERSION-RELEASE;:
kernel: 內核
kernel object: 內核對象,一般放置于/lib/modules/VERSION-RELEASE/
[ ]: N
[M]: M
[*]: Y
輔助文件:ramdisk
initrd
initramfs
運行中的內核:
uname命令:
uname – print system information
uname [OPTION]…
-n: 顯示節點名稱;
-r: 顯示VERSION-RELEASE;
例一:顯示內核節點名稱
[root@localhost ~]# uname -r 2.6.32-71.el6.x86_64 [root@localhost ~]# uname -n localhost.localdomain
模塊:
lsmod命令:
顯示由核心已經裝載的內核模塊
例一:顯示已經裝載的模塊
[root@localhost ~]# lsmod Module Size Used by sit 10313 0 tunnel4 2877 1 sit autofs4 27683 3
顯示的內容來自于: /proc/modules文件
modinfo命令:
顯示模塊的詳細描述信息
modinfo [ -k kernel ] [ modulename|filename… ]
-n: 只顯示模塊文件路徑
-p: 顯示模塊參數
-a: author
-d: description
-l: license
例一:查詢內核信息
[root@localhost ~]# modinfo xfs filename: /lib/modules/2.6.32-71.el6.x86_64/kernel/fs/xfs/xfs.ko license: GPL description: SGI XFS with ACLs, security attributes, large block/inode numbers, no debug enabled author: Silicon Graphics, Inc. srcversion: 74805DEC132C154FBA7FC91 depends: exportfs vermagic: 2.6.32-71.el6.x86_64 SMP mod_unload modversions
modprobe命令:
裝載或卸載內核模塊
modprobe [ -C config-file ] [ modulename ] [ module parame-ters… ]
配置文件:/etc/modprobe.conf, /etc/modprobe.d/*.conf
modprobe [ -r ] modulename…
例一:卸載內核
[root@localhost ~]# modprobe xfs [root@localhost ~]# lsmod |grep xfs xfs 982863 0 exportfs 4202 1 xfs [root@localhost ~]# modprobe -r xfs [root@localhost ~]# lsmod | grep xfs
depmod命令:
內核模塊依賴關系文件及系統信息映射文件的生成工具;
裝載或卸載內核模塊:
insmod命令:
insmod [ filename ] [ module options… ]
例一:安裝指定路徑
[root@localhost ~]# insmod $(modinfo -n exportfs) [root@localhost ~]# insmod $(modinfo -n xfs) [root@localhost ~]# lsmod Module Size Used by xfs 982863 0
rmmod
rmmod [ modulename ]
例一:移除內核
[root@localhost ~]# rmmod xfs [root@localhost ~]# lsmod | grep xfs [root@localhost ~]# lsmod | grep exportfs exportfs 4202 0 [root@localhost ~]# rmmod exportfs
/proc目錄:
內核把自己內部狀態信息及統計信息,以及可配置參數通過proc偽文件系統加以輸出;
參數:
只讀:輸出信息
可寫:可接受用戶指定“新值”來實現對內核某功能或特性的配置
/proc/sys
(1) sysctl命令用于查看或設定此目錄中諸多參數;
sysctl -w path.to.parameter=VALUE
~]# sysctl -w kernel.hostname=mail.magedu.com
(2) echo命令通過重定向的方式也可以修改大多數參數的值;
echo “VALUE” > /proc/sys/path/to/parameter
~]# echo “www.magedu.com” > /proc/sys/kernel/hostname
sysctl命令:
默認配置文件:/etc/sysctl.conf
(1) 設置某參數
sysctl -w parameter=VALUE
(2) 通過讀取配置文件設置參數
sysctl -p [/path/to/conf_file]
例一:重新讀取配置文件
[root@localhost ~]# sysctl -p net.ipv4.ip_forward = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1
內核中的路由轉發:
/proc/sys/net/ipv4/ip_forward
常用的幾個參數:
net.ipv4.ip_forward
vm.drop_caches
kernel.hostname
例一:回收路由
[root@localhost ~]# sysctl -w vm.drop_caches=1 vm.drop_caches = 1
/sys目錄:
sysfs:輸出內核識別出的各硬件設備的相關屬性信息,也有內核對硬件特性的設定信息;有些參數是可以修改的,用于調整硬件工作特性。
udev通過此路徑下輸出的信息動態為各設備創建所需要設備文件;udev是運行用戶空間程序;專用工具:udevadmin, hotplug;
udev為設備創建設備文件時,會讀取其事先定義好的規則文件,一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目錄下;
ramdisk文件的制作:
(1) mkinitrd命令
為當前正在使用的內核重新制作ramdisk文件
~] # mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
例一:為當前正在使用的內核重新制作ramdisk文件
[root@localhost ~]# mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) [root@localhost ~]# ls /boot/ config-2.6.32-71.el6.x86_64 initramfs-2.6.32-71.el6.x86_64.img System.map-2.6.32-71.el6.x86_64 efi lost+found vmlinuz-2.6.32-71.el6.x86_64 grub symvers-2.6.32-71.el6.x86_64.gz
(2) dracut命令
為當前正在使用的內核重新制作ramdisk文件
~] # dracut /boot/initramfs-$(uname -r).img $(uname -r)
編譯內核:
前提:
(1) 準備好開發環境;
(2) 獲取目標主機上硬件設備的相關信息;
(3) 獲取到目標主機系統功能的相關信息,例如要啟用的文件系統;
(4) 獲取內核源代碼包;
www.kernel.org
準備好開發環境:
包組(CentOS 6):
Server Platform Development
Development Tools
目標主機硬件設備相關信息:
CPU:
~]# cat /proc/cpuinfo
~]# x86info -a
~]# lscpu
[root@localhost ~]# x86info -a
PCI設備:
~]# lspci
-v
-vv
~]# lsusb
-v
-vv
[root@localhost ~]# lsusb
~]# lsblk
了解全部硬件設備信息
~]# hal-device
[root@localhost ~]# hal-device
簡單依據模板文件的制作過程:
~]# tar xf linux-3.10.67.tar.xz -C /usr/src
~]# cd /usr/src
~]# ln -sv linux-3.10.67 linux
~]# cd linux
~]# cp /boot/config-$(uname -r) ./.config
~]# make menuconfig
~]# screen
~]# make -j #
~]# make modules_install
~]# make install
重啟系統,并測試使用新內核;
[root@localhost ~]# tar xf linux-3.10.105.tar.xz -C /usr/src [root@localhost ~]# cd /usr/src [root@localhost src]# ls debug kernels linux-3.10.105 [root@localhost ~]# ls -lh linux-3.10.105.tar.xz -rw-r--r--. 1 root root 70M 5月 30 2017 linux-3.10.105.tar.xz [root@localhost ~]# tar xf linux-3.10.105.tar.xz -C /usr/src [root@localhost ~]# cd /usr/src [root@localhost src]# ls debug kernels linux-3.10.105 [root@localhost src]# cd linux [root@localhost linux]# ls -a . COPYING drivers include Kconfig MAINTAINERS README security virt .. CREDITS firmware init kernel Makefile REPORTING-BUGS sound arch crypto fs ipc lib mm samples tools block Documentation .gitignore Kbuild .mailmap net scripts usr [root@localhost linux]# cp /boot/config-2.6.32-71.el6.x86_64 .config [root@localhost linux]# ls -a . .config Documentation .gitignore Kbuild .mailmap net scripts usr .. COPYING drivers include Kconfig MAINTAINERS README security virt arch CREDITS firmware init kernel Makefile REPORTING-BUGS sound block crypto fs ipc lib mm samples too
回顧:內核組成部分、內核編譯
內核組成部分:
核心、模塊
核心:/boot/vmlinuz-VERSION-RELEASE
模塊:/lib/modules/VERSION-RELEASE/
模塊管理的相關命令:
lsmod, modinfo, modprobe [-r], insmod, rmmod, depmod
內核編譯:
[ ]
[*]
[M]
步驟:
make menuconfig:配置內核選項
.config:文本文件
make [-j #]
make modules_install
make install
安裝bzImage為/boot/vmlinuz-VERSION-RELEASE
生成initramfs文件
編輯grub的配置文件
原創文章,作者:kang,如若轉載,請注明出處:http://www.www58058.com/77635