亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

Linux基礎(chǔ)教程之內(nèi)核編譯以及自制Linux系統(tǒng)

內(nèi)核編譯

單內(nèi)核體系設(shè)計(jì)、但充分借鑒了微內(nèi)核設(shè)計(jì)體系的優(yōu)點(diǎn),為內(nèi)核引入模塊化機(jī)制。

 

內(nèi)核組成部分:

kernel: 內(nèi)核核心,一般為bzImage,通常在/boot目錄下,名稱為vmlinuz-VERSION-RELEASE;

kernel object: 內(nèi)核對(duì)象,一般放置于/lib/modules/VERSION-RELEASE/

[ ]: None

[M]: 表示模塊化安裝

[*]: 表示打到內(nèi)核核心

輔助文件: ramdisk

initrd

initramfs

 

運(yùn)行中的內(nèi)核:

uname命令:

uname – print system information

uname[OPTION]…

-n: 顯示節(jié)點(diǎn)名稱;

-r: 顯示VERSION-RELEASE;

-a:顯示所有信息

wKiom1fiOI6QQHWnAAA1HTcGoL4326.png

 

lsmod命令:

顯示由核心已經(jīng)裝載的內(nèi)核模塊

顯示的內(nèi)容來(lái)自于: /proc/modules文件

 

示例:可以看見(jiàn)已經(jīng)加載的模塊

wKioL1fiOe3CDgQQAAAg8LutKDU814.png

 

modinfo命令:

顯示模塊的詳細(xì)描述信息

modinfo[ -k kernel ] [ modulename|filename… ]

-n: 只顯示模塊文件路徑

-p: 顯示模塊參數(shù)

-a: author

-d: description

-l: license

 

示例:顯示模塊的詳細(xì)信息

wKioL1fiOl2QWcdGAABjr2G0STw357.png

 

modprobe命令:

裝載或卸載內(nèi)核模塊

modprobe [ -C config-file ] [ modulename] [ module parame-ters… ] 安裝內(nèi)核

配置文件:/etc/modprobe.conf, /etc/modprobe.d/*.conf

modprobe [ -r ] modulename… 卸載內(nèi)核模塊

 

示例1:卸載網(wǎng)卡驅(qū)動(dòng),然后發(fā)現(xiàn)沒(méi)有eth那些網(wǎng)卡配置信息了

wKiom1fiPBHxoNCIAAAl49NAc84581.png

示例2:加載網(wǎng)卡驅(qū)動(dòng)

wKiom1fiPBbBwbgIAABZVurztyk229.png

 

depmod命令:

內(nèi)核模塊依賴關(guān)系文件及系統(tǒng)信息映射文件的生成工具

裝載或卸載內(nèi)核模塊:

insmod命令:指定模塊文件,不自動(dòng)解決依賴模塊

insmod[ filename ] [ module options… ]

insmod`modinfo–n exportfs`

lnsmod`modinfo–n xfs`

rmmod

rmmod[ modulename]

rmmod xfs

rmmod exportfs

 

內(nèi)核相關(guān)目錄

/proc目錄:

內(nèi)核把自己內(nèi)部狀態(tài)信息及統(tǒng)計(jì)信息,以及可配置參數(shù)通過(guò)proc偽文件系統(tǒng)加以輸出

參數(shù):只讀:輸出信息

可寫:可接受用戶指定“新值”來(lái)實(shí)現(xiàn)對(duì)內(nèi)核某功能或特性的配置

/proc/sys

(1) sysctl命令用于查看或設(shè)定此目錄中諸多參數(shù)

sysctl-w path.to.parameter=VALUE

sysctl-w kernel.hostname=mail.magedu.com

(2) echo命令通過(guò)重定向方式也可以修改大多數(shù)參數(shù)的值

echo “VALUE” > /proc/sys/path/to/parameter

echo “websrv” > /proc/sys/kernel/hostname

/sys目錄:

sysfs:為用戶使用的偽文件系統(tǒng),輸出內(nèi)核識(shí)別出的各硬件設(shè)備的相關(guān)屬性信息,也有內(nèi)核對(duì)硬件特性的設(shè)定信息;有些參數(shù)是可以修改的,用于調(diào)整硬件工作特性。

udev通過(guò)此路徑下輸出的信息動(dòng)態(tài)為各設(shè)備創(chuàng)建所需要設(shè)備文件,udev是運(yùn)行用戶空間程序

專用工具:udevadmin, hotplug

udev為設(shè)備創(chuàng)建設(shè)備文件時(shí),會(huì)讀取其事先定義好的規(guī)則文件,一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目錄下

 

sysctl命令

默認(rèn)配置文件:/etc/sysctl.conf

(1) 設(shè)置某參數(shù)

sysctl-w parameter=VALUE

(2) 通過(guò)讀取配置文件設(shè)置參數(shù)

sysctl-p [/path/to/conf_file]

內(nèi)核中的路由轉(zhuǎn)發(fā):

/proc/sys/net/ipv4/ip_forward

常用的幾個(gè)參數(shù):

net.ipv4.ip_forward

net.ipv4.icmp_echo_ignore_all

vm.drop_caches

 

ramdisk文件的制作

(1) mkinitrd命令????為當(dāng)前正在使用的內(nèi)核重新制作ramdisk文件

mkinitrd /boot/initramfs-$(uname-r).img $(uname-r)

(2) dracut命令????為當(dāng)前正在使用的內(nèi)核重新制作ramdisk文件

dracut /boot/initramfs-$(uname-r).img $(uname-r)

 

示例:假如initramfs文件丟失,恢復(fù)之

刪除initramfs文件,然后重啟

wKiom1fiQiWwXzdKAAAZF5cHP_E831.png

會(huì)發(fā)現(xiàn)已經(jīng)登陸不進(jìn)去系統(tǒng)

wKioL1fiQiWj52C_AAACOG-d_Ig797.png

此時(shí)進(jìn)入救援模式運(yùn)行進(jìn)行修復(fù)

wKioL1fiQyqzTTKiAAAj7ZM9Lvc345.png修復(fù)完畢,重啟,會(huì)發(fā)現(xiàn)SELinux在檢查,稍等即可進(jìn)入系統(tǒng)

wKiom1fiQ4KBrqejAAAKBb-gvNc890.png

 

編譯內(nèi)核

前提:

(1) 準(zhǔn)備好開(kāi)發(fā)環(huán)境

(2) 獲取目標(biāo)主機(jī)上硬件設(shè)備的相關(guān)信息

(3) 獲取目標(biāo)主機(jī)系統(tǒng)功能的相關(guān)信息

例如:需要啟用相應(yīng)的文件系統(tǒng)

(4) 獲取內(nèi)核源代碼包

www.kernel.org

開(kāi)發(fā)環(huán)境準(zhǔn)備

包組(CentOS 6):

Server Platform Development

Development Tools

目標(biāo)主機(jī)硬件設(shè)備相關(guān)信息:

CPU:

# cat /proc/cpuinfo

# x86info -a

# lscpu

硬件設(shè)備

PCI設(shè)備:

lspci

-v

-vv

lsusb

-v

-vv

lsblk ?塊設(shè)備

了解全部硬件設(shè)備信息

hal-device

 

內(nèi)核編譯安裝系統(tǒng)

安裝開(kāi)發(fā)包組

下載源碼文件

.config:準(zhǔn)備文本配置文件

make menuconfig:配置內(nèi)核選項(xiàng)

make [-j #]

make modules_install:安裝模塊

make install :安裝內(nèi)核相關(guān)文件

安裝bzImage為/boot/vmlinuz-VERSION-RELEASE

生成initramfs文件

編輯grub的配置文件

 

(1) 配置內(nèi)核選項(xiàng)

支持“更新”模式進(jìn)行配置:make help

(a) make config:基于命令行以遍歷的方式去配置內(nèi)核中可配置的每個(gè)選項(xiàng)

(b) make menuconfig:基于curses的文本窗口界面

(c) make gconfig:基于GTK (GNOME)環(huán)境窗口界面

(d) make xconfig:基于QT(KDE)環(huán)境的窗口界面

支持“全新配置”模式進(jìn)行配置

(a) make defconfig:基于內(nèi)核為目標(biāo)平臺(tái)提供的“默認(rèn)”配置進(jìn)行配置

(b) make allyesconfig: 所有選項(xiàng)均回答為“yes“

(c) make allnoconfig: 所有選項(xiàng)均回答為”no“

(2) 編譯

全編譯:make [-j #]

編譯內(nèi)核的一部分功能:

(a) 只編譯某子目錄中的相關(guān)代碼:

# cd /usr/src/Linux

# make dir/

(b) 只編譯一個(gè)特定的模塊:

# cd /usr/src/Linux

# make dir/file.ko

例如:只為e1000編譯驅(qū)動(dòng):

# make drivers/net/ethernet/intel/e1000/e1000.ko

如何交叉編譯內(nèi)核:

編譯的目標(biāo)平臺(tái)與當(dāng)前平臺(tái)不相同才需要交叉編譯

# make ARCH=arch_name

要獲取特定目標(biāo)平臺(tái)的使用幫助

# make ARCH=arch_namehelp

# make ARCH=arm help

在已經(jīng)執(zhí)行過(guò)編譯操作的內(nèi)核源碼樹(shù)做重新編譯:

需要事先清理操作:

# make clean:清理大多數(shù)編譯生成的文件,但會(huì)保留config文件等

# make mrproper: 清理所有編譯生成的文件、config及某些備份文件

# make distclean:mrproper、patches以及編輯器備份文件

 

示例:簡(jiǎn)單Linux kernel內(nèi)核編譯過(guò)程

首先提示,此處用虛擬的同學(xué),盡量把虛擬機(jī)的核心數(shù)量調(diào)大一點(diǎn),跟實(shí)際的主機(jī)一樣就可以了,此處操作只是為了加快編譯的時(shí)間,編譯的時(shí)候會(huì)消耗大量的cpu資源,如果想繼續(xù)做其他操作的小伙伴,可以忽略此處

wKiom1fflcrT5tFKAAC8v5gjsXw211.png

在系統(tǒng)里面可以查看到當(dāng)前系統(tǒng)的核心數(shù)量

wKiom1fflc6SSWhtAAAokc9jaRs788.png

進(jìn)行內(nèi)核操作,請(qǐng)自備Linux內(nèi)核。而且編譯內(nèi)核以前,請(qǐng)做好備份,編譯內(nèi)核的主版本,請(qǐng)盡可能跟原有的內(nèi)核版本相近,因?yàn)橹苯硬捎米钚碌膬?nèi)核版本,有可能會(huì)導(dǎo)致系統(tǒng)崩潰。

此處內(nèi)核可以到www.kernel.org下載

此次實(shí)驗(yàn)我們用的是Linux-3.18.41版本的內(nèi)核,當(dāng)前系統(tǒng)是3.10.0的版本的內(nèi)核

wKioL1fh9BWAIEQZAAAGUu4I7EQ918.png

/usr/scr/kernels,此處目錄是存放內(nèi)核文件的地方,現(xiàn)在只有一個(gè)3.10版本的內(nèi)核

wKioL1fflcqx3E68AAAKZanLgRw217.png

解壓新的內(nèi)核到/usr/src目錄下面

wKioL1fflcujrwYKAAAD_587FlA769.png

wKioL1fflcvyUr3RAAAO42FsnUI159.png

創(chuàng)建Linux-3.18-41的軟連接目錄Linux,此處的操作是為了后面的操作每次都需要內(nèi)核版本號(hào),一旦輸入錯(cuò)誤的話,就又得重來(lái)了(編譯兩小時(shí),報(bào)錯(cuò)5秒鐘)

wKiom1fflcvBXPlIAAAH3T7ACdE572.png

復(fù)制原有系統(tǒng)的/boot/config-3.10.0-327.el7.x86_64的文件到/usr/src/Linux目錄下面為.config的文件

wKioL1fflczjbHAEAAAHLYFr-zA654.png

運(yùn)行make menuconfig命令來(lái)配置內(nèi)核選項(xiàng),如果此處有報(bào)錯(cuò)的話,例如下圖,表明一些編譯內(nèi)核的工具還沒(méi)有安裝,此處我們通過(guò)yum倉(cāng)庫(kù)來(lái)安裝一下相關(guān)的文件,此處除了報(bào)錯(cuò)的curses.h的文件以外,還有

Server Platform Development、Development Tools等工具是必須要安裝的,編譯以前需要查看一下工具是否都已經(jīng)安裝完畢。

wKioL1fflcyiZHQOAAA3Do2m5Bk410.png

wKioL1fflc2zasTYAAADaaspNJY634.png

wKioL1fflc3yZ_p5AAB4LAi4X1M990.png

安裝完相關(guān)的工具以后,重新運(yùn)行make menuconfig命令

此時(shí)我們已經(jīng)可以正常進(jìn)入編輯內(nèi)核選項(xiàng)的圖形化界面,在這里我們可以選擇我們需要的內(nèi)核功能

wKioL1fflc7iYpN3AABJmDBY0fQ796.png

例如此處可以編譯內(nèi)核的名字,像本機(jī)內(nèi)核的3.10.0-327.el7.x86_64后面的-327.el7.x86_64就是在此處編輯

 

wKioL1fh_A6CCzYCAABunqT0cUY308.png

例如我們可以定義為-1.0_wanLinux

wKiom1fh_A7BOH4aAAAPfcf0B78149.png

再看看其他功能,比如此處可以選擇windows的文件系統(tǒng)

wKioL1fh_BCgMxAdAABuJdIMmYU234.png

可以看見(jiàn)有一個(gè)NTFS文件系統(tǒng)支持的選擇

wKioL1fh_JThyYUXAAAKsOzDPB8368.png

按空格鍵可以選中此功能,此處的M表示以模塊化的方式來(lái)安裝此文件驅(qū)動(dòng),這樣的話在系統(tǒng)的 modules文件夾里面即可以查找到這個(gè)文件

wKiom1fh_BHQiy-QAAAOT8JZljM287.png

再多按一次空格健會(huì)編程一個(gè)*,表示直接把此集成到內(nèi)核里面,在系統(tǒng)里面運(yùn)行的話是看不到此文件的

wKioL1fh_BGS1tFEAAAONrQWWgk571.png

當(dāng)選擇好那些我們需要內(nèi)核參數(shù)以后,就可以選擇此處的保存

wKioL1fh_BHCHxhjAAAEfxaf0t8003.png

默認(rèn)保存.config的文件

wKioL1fh_R7Dngv2AAALz_O5L-8187.png

上面的步驟準(zhǔn)備好以后,輸入make -j 4開(kāi)始編譯,此處的-j 4表示指定cpu的數(shù)量,因?yàn)槲疫@里核心數(shù)量是4,輸入完以后,內(nèi)核就開(kāi)始編譯了,此處需要等待很長(zhǎng)的時(shí)間

wKioL1fflc_izO8eAABUUdb1yS8033.png

編譯完以后/lib/modules并不會(huì)馬上生成內(nèi)核的文件

wKiom1fflc_w3K2MAAAGj_q0RIo493.png

此時(shí)回去/usr/src/Linux目錄下面運(yùn)行make modules_install安裝內(nèi)核模塊

wKioL1fflc-AIxefAAAFKWkhEmE449.png

上面的運(yùn)行完以后,我們可以看見(jiàn)/lib/modules目錄下面會(huì)多一個(gè)3.18.41的內(nèi)核文件,查看一下該目錄,居然有7G多,所以小伙伴們編譯的時(shí)候注意看一下磁盤的空間容量。

wKioL1ffldCSgTr8AAALbURsEH8793.png

再運(yùn)行make install安裝內(nèi)核相關(guān)文件

安裝bzImage為/boot/vmlinuz-VERSION-RELEASE

生成initramfs文件

wKiom1ffldHS7MmEAAAIv6quWkw224.png

然后會(huì)發(fā)現(xiàn)/boot目錄下面多了內(nèi)核3.18.41的文件

wKioL1ffldHgplDiAAAg_j9QFac691.png

進(jìn)入/boot/grub2/目錄下面查看grub.cfg文件

wKiom1ffldKxl2z1AAADLv2uVXE397.png

可以看見(jiàn)grub里面已經(jīng)有3.18.41內(nèi)核的加載選項(xiàng)

wKiom1ffldLxJnxBAABupolqtH8245.png

重啟電腦看看,可以發(fā)現(xiàn)有3.18.41內(nèi)核的啟動(dòng)選項(xiàng)

wKioL1ffldKCnD6SAAAVp-at9hA161.png

此時(shí)可以正常登陸進(jìn)來(lái),表示安裝新的內(nèi)核成功。

wKioL1ffldPit8D3AAAPkMTJBp4265.png

 

自制Linux示例

此處只是利用現(xiàn)有的Linux系統(tǒng)文件來(lái)創(chuàng)建一個(gè)簡(jiǎn)單的Linux系統(tǒng),還缺乏許多功能

首先準(zhǔn)備一個(gè)空的磁盤,這里實(shí)驗(yàn)使用一個(gè)虛擬機(jī)的磁盤

wKiom1fh627zCjoQAACG_T5OMJg410.png

wKiom1fh627y6zJEAAAXB5_5rco329.png

分區(qū)并創(chuàng)建文件系統(tǒng)

fdisk/dev/sdb

分兩個(gè)必要的分區(qū)

/dev/sdb1對(duì)應(yīng)/boot /dev/sdb2對(duì)應(yīng)根/

mkfs.ext4 /dev/sdb1 mkfs.ext4 /dev/sdb2

wKioL1fh62-jgXavAAAbQkwwUyc208.png

wKiom1fh62_SiDrzAAA1HGj16fA958.png

掛載boot

mount /dev/sdb1 /mnt/boot

wKiom1fh63jz66UNAAAYGaPK6vw704.png

安裝grub

grub-install /dev/sdb?–root-directory=/mnt

wKiom1fh68SCdoKRAABCm1KNRJ0897.png

安裝完grub以后可以查看一下sdb的mbr信息是否正常

wKioL1fh69iwy4GOAAC7iGdsRlM053.png

恢復(fù)內(nèi)核和initramfs文件

cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot/

cp /boot/initramfs-2.6.32-642.el6.x86_64.img /mnt/bootwKioL1fh63LAtfKQAABatVw6eWU671.png

建立grub.conf:

vim /mnt/boot/grub/grub.conf

title Hello_Linux

root (hd0,0)

kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sda2 seLinux=0 init=/bin/bash

initrd /initramfs-2.6.32-642.el6.x86_64.img

wKiom1fh63LxWSISAAAnFDwArCI996.png

 

 

創(chuàng)建一級(jí)目錄

mkdir/mnt/sysroot

mount /dev/sdb2 /mnt/sysroot

mkdir -pv /mnt/sysroot/

{etc,lib,lib64,bin,sbin,tmp,var,usr,sys,proc,opt,home,root,boot,dev,mnt,media}

wKiom1fh63SDVEvHAACdz7irj5U160.png

創(chuàng)建/etc/fstab掛載文件

wKiom1fh63XCWZ_6AAAffG_F-KY183.png

復(fù)制bash和相關(guān)庫(kù)文件,這個(gè)是必須的

復(fù)制相關(guān)命令及相關(guān)庫(kù)文件,如:ls,cat,vim,reboot,hostname,mount,umount,tree等,非必須,但是最好還是安裝上,這些小命令部分能在小Linux上面跑,有些不能,因?yàn)橄到y(tǒng)文件并不是很全

注意:此處的copycmd.sh是自己編寫的腳本,內(nèi)容就是復(fù)制bash和ls之類這些相關(guān)的文件到/sysroot下面,當(dāng)然,此處也可以自行一個(gè)一個(gè)復(fù)制,只是比較麻煩

wKioL1fh63WDHcTOAABTk1RnSvk957.png

復(fù)制完可以看見(jiàn)bin和lib64等等目錄下面多了許多相關(guān)文件

wKiom1fh63ijLnWbAAAXd1CdGfI938.png

wKioL1fh63Xy0_2RAAAyHuZ6kDI186.png

復(fù)制完相關(guān)的文件,我們可以用chroot命令來(lái)切根試試能不能正常進(jìn)入,如果可以的話,應(yīng)該問(wèn)題就不大,完成此步驟以后就可以關(guān)機(jī)了

wKiom1fh72DxmE85AAADsGuefr0634.png

現(xiàn)在我們新建一個(gè)虛擬機(jī)測(cè)試一下剛那塊虛擬磁盤里面的系統(tǒng)看是否能正常運(yùn)行

 

wKioL1fh63aizw22AABVvpmd9FY836.png

虛擬機(jī)里面需要使用一塊現(xiàn)有的虛擬硬盤,其他的配置就跟平時(shí)創(chuàng)建虛擬機(jī)一樣即可

 

wKiom1fh8HOSglYXAABWVF_qzwI443.png

wKioL1fh8EDBYLlLAAFgDrvUZbw365.png

配置完虛擬機(jī)以后,開(kāi)機(jī)!

此時(shí)可以看見(jiàn)登陸的界面了!

wKioL1fh63eD9MfUAAAZvzWotGI118.png

正常進(jìn)入到系統(tǒng)了!界面有點(diǎn)像救援模式,(當(dāng)然此處可以把自制的小Linux系統(tǒng)安裝到u盤里面當(dāng)成系統(tǒng)盤運(yùn)行,就像windows老毛桃pe之類的)

在里面測(cè)試了一下之前復(fù)制的命令,有些可以,有些不可以,此處實(shí)驗(yàn)完畢。

wKioL1fh63exBCOKAAAXZf1QLzs300.png

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國(guó)內(nèi)好評(píng)如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開(kāi)發(fā)專業(yè)人才培訓(xùn)機(jī)構(gòu)!