核心組成: uname指令
核心:uname,mkinitrd,dracut
子產品: lsmod,modinfo,depmod,modprobe,insmod,rmmod
/proc,sysctl,/sys,/dev,udevadm,hotplug指令
核心編譯
Linux核心組成
核心檔案 bzImage 位置: /boot/vmlinuz-VERSION-RELEASE
核心子產品 .ko 位置: /lib/modules/VERSION-RELEASE
輔助檔案 initramfs(CentOS 6,7) , initrd (CentOS5)
檢視核心相關的資訊
uname 顯示系統(kernel)資訊
-s 顯示作業系統名稱
-n 顯示目前主機名稱: 顯示節點名稱
-r 顯示VERSION及RELEASE号
-v 顯示核心制作資訊号 SMP 對稱多處理器
-m 目前硬體平台 x86_64
-p 顯示處理器類型或架構 x86_64
-i 硬體架構 x86_64
-o 作業系統(GNU/Linux)
使用示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<code>1</code><code>、系統資訊</code>
<code># uname </code>
<code>Linux</code>
<code># uname -o</code>
<code>GNU/Linux</code>
<code>2</code><code>、顯示節點名稱</code>
<code># uname -n</code>
<code>localhost.localdomain</code>
<code># cat /proc/sys/kernel/hostname </code>
<code># hostname</code>
<code>3</code><code>、顯示version-release号</code>
<code># uname -r</code>
<code>2.6</code><code>.</code><code>32</code><code>-</code><code>696</code><code>.el6.i686</code>
<code>4</code><code>、核心制作版本号</code>
<code># uname -v</code>
<code>#</code><code>1</code> <code>SMP Tue Mar </code><code>21</code> <code>18</code><code>:</code><code>53</code><code>:</code><code>30</code> <code>UTC </code><code>2017</code>
<code>5</code><code>、目前硬體平台</code>
<code># uname -m</code>
<code>i686</code>
<code>6</code><code>、處理器架構</code>
<code># uname -p</code>
<code>7</code><code>、硬體架構</code>
<code># uname -i</code>
<code>i386</code>
<code>8</code><code>、作業系統</code>
輔助檔案: initramfs,initrd
生成
<code>mv /boot/initramfs-VERSION-RELEASE.img /root</code>
<code>mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)</code>
<code>dracut /boot/initramfs-$(uname -r).img $(uname -r)</code>
展開
<code>1</code><code>、檢視檔案的類型</code>
<code>file </code>
<code>2</code><code>、改名.gzip結尾</code>
<code>mv </code>
<code>3</code><code>、解壓</code>
<code>gzip -d</code>
<code>4</code><code>、檢視檔案類型</code>
<code>file</code>
<code>5</code><code>、展開</code>
<code>install -d initrd</code>
<code>cd initrd</code>
<code>cpio -id < ../</code>
Linux核心子產品
吸收微核心設計:支援子產品化設計:
核心中子產品 .ko (kernel object)
程式調用的庫 .so (share object)
核心子產品相當于程式的庫的概念,隻是子產品隻能被kernel調用。庫隻能被程式調用
編譯成子產品: [M]
編譯進核心: [*]
不編譯此功能: [ ]
檢視所有已經裝載的子產品 lsmod
<code># lsmod</code>
<code>Module Size Used by</code>
<code>子產品 大小 使用次數</code>
檢視子產品資訊 modinfo
子產品路徑 -n
顯示指定核心的子產品資訊 -k kernel
顯示子產品的描述 -d
子產品的參數 -p
License -l
Author -a
<code>1</code><code>、顯示所有資訊</code>
<code># modinfo ext4</code>
<code>filename: /lib/modules/</code><code>2.6</code><code>.</code><code>32</code><code>-</code><code>696</code><code>.el6.i686/kernel/fs/ext4/ext4.ko</code>
<code>license: GPL</code>
<code>description: Fourth Extended Filesystem</code>
<code>author: Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others</code>
<code>srcversion: 74AEE2BDA63AC8482A78F4D</code>
<code>depends: mbcache,jbd2</code>
<code>vermagic: </code><code>2.6</code><code>.</code><code>32</code><code>-</code><code>696</code><code>.el6.i686 SMP mod_unload modversions </code><code>686</code>
<code>2</code><code>、僅顯示filename</code>
<code># modinfo -n ext4</code>
<code>/lib/modules/</code><code>2.6</code><code>.</code><code>32</code><code>-</code><code>696</code><code>.el6.i686/kernel/fs/ext4/ext4.ko</code>
<code>3</code><code>、僅顯示License</code>
<code># modinfo -l ext4</code>
<code>GPL</code>
<code>4</code><code>、僅顯示description</code>
<code># modinfo -d ext4</code>
<code>Fourth Extended Filesystem</code>
<code>5</code><code>、僅顯示作者</code>
<code># modinfo -a ext4</code>
<code>Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others</code>
<code>6</code><code>、顯示子產品參數</code>
<code># modinfo -p ext4</code>
生成子產品的依賴關系 depmod
為指定核心生成依賴 -b
/boot/system.map-VERSION-RELEASE 核心依賴的子產品及庫
/lib/modules/VERSION-RELEASE/modules.dep.bin 子產品的依賴關系
裝載子產品 modprobe MODULE 或 insmod $(modinfo -n MODULE)
<code># modprobe pcnet32</code>
<code># lsmod | fgrep pcnet32</code>
<code>pcnet32 29107 0 </code>
<code>mii 4476 1 pcnet32</code>
<code>安裝pcnet32子產品</code>
<code># insmod $(modinfo -n pcnet32)</code>
<code>insmod: error inserting </code><code>'/lib/modules/2.6.32-696.el6.i686/kernel/drivers/net/pcnet32.ko'</code><code>: -1 Unknown symbol </code><code>in</code> <code>module</code>
<code>檢視依賴</code>
<code># modinfo pcnet32</code>
<code>depends: mii</code>
<code>依據路徑安裝被依賴的子產品</code>
<code># insmod $(modinfo -n mii)</code>
<code>檢視是否安裝</code>
<code># lsmod | fgrep mii</code>
<code>mii 4476 0 </code>
<code>安裝Pcnet32</code>
<code>#</code>
拆除子產品 modprobe -r MODULE 或 rmmod MODULE
<code># modprobe -r pcnet32</code>
<code># </code>
<code># rmmod pcnet32</code>
/proc目錄
隻讀 核心内部統計、狀态資訊
可寫 可配置參數,/proc/sys目錄中,由sysctl指令控制,核心性能調整
臨時生效:echo 'STRING' > /proc/sys/kernel/hostname , sysctl -w kernel.hostname='STRING'
永久有效:/etc/sysctl.conf
sysctl指令
-p CONFIG_FILE 讀取檔案設定參數
-w PARAMETER='VALUE' 設定核心參數
# echo 'VALUE' > /proc/sys/kernel/hostname
# sysctl -w kernel.hostname='VALUE'
主機名: /proc/sys/kernel/hostname
路由轉發: /proc/sys/net/ipv4/ip_forward 1:開啟; 0:關閉
cache/buffer回收: /proc/sys/vm/drop_caches 1: dropcache
-a 顯示所有核心參數
-p 重讀配置檔案 配置檔案: /etc/sysctl.conf
路由轉發: 打開路由轉發時,一個網卡的使用者能夠ping通另一個網卡所在網絡的主機
31
32
33
34
35
36
37
38
<code>臨時生效</code>
<code>1、檢視主機名</code>
<code>2、設定主機名</code>
<code># echo "Lcc.org" > /proc/sys/kernel/hostname</code>
<code>Lcc.org</code>
<code>3、設定主機名</code>
<code># sysctl -w kernel.hostname="lcc.org"</code>
<code>kernel.</code><code>hostname</code> <code>= lcc.org</code>
<code>4、檢視主機名</code>
<code>lcc.org</code>
<code>永久有效</code>
<code># cp /etc/sysctl.conf{,.bak}</code>
<code># echo "kernel.hostname=magedu.com" >> /etc/sysctl.conf </code>
<code># hostname </code>
<code># sysctl -p</code>
<code>net.ipv4.ip_forward = 0</code>
<code>net.ipv4.conf.default.rp_filter = 1</code>
<code>net.ipv4.conf.default.accept_source_route = 0</code>
<code>kernel.sysrq = 0</code>
<code>kernel.core_uses_pid = 1</code>
<code>net.ipv4.tcp_syncookies = 1</code>
<code>kernel.msgmnb = 65536</code>
<code>kernel.msgmax = 65536</code>
<code>kernel.shmmax = 4294967295</code>
<code>kernel.shmall = 268435456</code>
<code>kernel.</code><code>hostname</code> <code>= magedu.com</code>
<code>magedu.com</code>
/sys目錄
核心探測的硬體資訊
kernel 2.4- /dev/目錄下事先建立所有裝置檔案,/dev/目錄檔案多,造成大量空間浪費
kernel 2.4+ /dev/目錄下按需生成裝置檔案,kernel臨時探測,按需建立,節約空間
udev工具: udevadmin,hotplug
簡易編譯核心
1)擷取源碼
2)開發環境
3)檢視目标主機的硬體裝置資訊
4)目标實際需要
1、擷取源碼
**小于3.10版本
2、展開至/usr/local/目錄
<a href="https://s5.51cto.com/wyfs02/M01/06/15/wKiom1mxHyCBSMxXAAAIZ2oF4m4624.png" target="_blank"></a>
3、建立符号連結
<a href="https://s4.51cto.com/wyfs02/M00/06/15/wKiom1mxH3_TYSEpAAAkXOjVqdc999.png" target="_blank"></a>
5、編譯
<a href="https://s2.51cto.com/wyfs02/M00/06/15/wKiom1mxIDLREUx8AAALO3MpXHs787.png" target="_blank"></a>
<a href="https://s2.51cto.com/wyfs02/M01/06/16/wKiom1mxIFujZ8AvAAAFQHMiUJU154.png" target="_blank"></a>
1、設定release号
2、設定主機名
3、設定支援NTFS檔案系統
4、設定支援的網絡驅動
<a href="https://s5.51cto.com/wyfs02/M00/06/16/wKiom1mxJCPxs2-kAAAE79IXnK8169.png" target="_blank"></a>
<a href="https://s3.51cto.com/wyfs02/M02/06/16/wKiom1mxJCPCr_QCAAAOdK6D0ZU843.png" target="_blank"></a>
<code>general setup</code>
<code> </code><code>Local version - append to kernel release</code>
<code> </code><code>-</code><code>1</code><code>.os.cpu</code>
<code> </code><code>((none)) Default hostname 預設主機名</code>
<code>File systems</code>
<code> </code><code>JFS </code>
<code> </code><code>GFS2</code>
<code> </code><code>Btrfs</code>
<code> </code><code>DOS/FAT</code>
<code> </code><code>NTFS </code>
<code>Device drivers</code>
<code> </code><code>Netowrk device support</code>
<code> </code><code>Enternet driver support</code>
打開一個虛拟的螢幕:
退出: ctrl + a 松開a後按d
列出: screen -ls
連接配接回: screen -r ID
make -j #
# lscpu 中 cpu(s) 後的數字為cpu核心數
<a href="https://s3.51cto.com/wyfs02/M00/06/16/wKiom1mxJIKBrpV_AAAFQjVuLI4464.png" target="_blank"></a>
6、安裝
<a href="https://s5.51cto.com/wyfs02/M02/A4/C8/wKioL1mxP7OjfXUwAAA4gAEHQgo575.png" target="_blank"></a>
<a href="https://s5.51cto.com/wyfs02/M01/06/18/wKiom1mxP9Sg-QOwAAAFvl70r9k419.png" target="_blank"></a>
本文轉自 lccnx 51CTO部落格,原文連結:http://blog.51cto.com/sonlich/1961362,如需轉載請自行聯系原作者