天天看點

Linux之了解核心、核心子產品、編譯核心

核心組成: 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 &lt; ../</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' &gt; /proc/sys/kernel/hostname , sysctl -w kernel.hostname='STRING'

  永久有效:/etc/sysctl.conf       

sysctl指令

    -p CONFIG_FILE       讀取檔案設定參數 

    -w PARAMETER='VALUE' 設定核心參數

        # echo 'VALUE' &gt; /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" &gt; /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" &gt;&gt; /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,如需轉載請自行聯系原作者

繼續閱讀