linux系統啟動流程及內核編譯

Linux系統啟動流程

initialization [??n???la?'ze??n] 初始化

內核參數: /usr/share/doc/kernel-doc-VERSION/Documentation

系統初始化流程(內核級別): POST –> BootSequence(BIOS) –> BootLoader(MBR) –> kernel(ramdisk) –> rootfs(readonly) –> /sbin/init

linux系統的組成部分: 內核 + 根文件系統

內核的功能: 進程管理、內存管理、網絡協議棧、文件系統、驅動程序、安全功能

IPC: Inetr Process Communication

消息隊列、semerphor、shm

socket

運行中的系統環境可分為兩層:內核空間、用戶空間

用戶空間:應用程序(進程或線程)

內核空間:內核代碼(系統調用)

內核設計流派:

單內核設計: 把所有功能集成于同一個程序

linux

微內核設計: 每種功能使用一個單獨的子系統實現

Windows, Solaris

linux內核特點:

支持模塊化: .ko(kernel object) .so(share object)

支持模塊運行時動態裝載或卸載;

組成部分:

核心文件: /boot/vmlinuz-VERSION-release

ramdisk: 開機加載驅動程序的虛擬根文件系統

CentOS 5: /boot/initrd-VERSION-release.img

CentOS 6,7: /boot/initramfs-VERSION-release.img

模塊文件: /lib/modules/VERSION-release

CentOS系統的啟動流程:

POST: Power On and Self Test, 加電自檢

ROM: COMS

BIOS: Basic Input and Output System

RAM+ROM

Boot Sequence:

按次序查找各引導設備, 第一個有引導程序的設備即為本次啟動要用到設備.

bootloader: 引導加載器, 程序

Windows: ntloader

Linux: 

LILO: LInux LOader, 現在多數用在手機等小型移動設備

GRUB: Grand Uniform Bootloader

CentOS 5,6: GRUB 0.X :GRUB Legacy

CentOS 7: GRUB 1.X: GRUB2s

功能: 提供一個菜單, 允許用戶選擇要啟動的系統或不同的內核版本; 把用戶選定的內核裝載到RAM中的特定空間, 解壓、展開, 而后把系統的控制權移交給內核.

MBR: Master Boot Record

共512bytes

前446bytes: bootloader

64bytes: 分區列表

2bytes: 結束標志位 55AA

GRUB: 

bootloader: 1st stage

partition: filesystem driver, 1.5 stage

partition: /boot/grub, 2nd stage

kernel:

自身初始化

(1) 探測可識別到的所有硬件設備

(2) 加載硬件驅動; (有可能會借助于ramdisk加載驅動)

(3) 以只讀方式掛載根文件系統

(4) 運行用戶空間的第一個應用程序: /sbin/init

init程序的類型:

CentOS -5: Sysv init

配置文件: /etc/inittab

CentOS 6: Upstart

配置文件: /etc/inittab

主要讀取/etc/init/*.conf

CentOS 7: Systemd

配置文件: /usr/lib/systemd/, /etc/systemd/system/

ramdisk:

Linux內核特性之一: 使用緩沖和緩存加速對磁盤上文件的訪問

ramdisk –> ramfs

ramdisk: 開機加載驅動程序的虛擬根文件系統

CentOS 5: /boot/initrd-VERSION-release.img

創建工具: mkinitrd

CentOS 6,7: /boot/initramfs-VERSION-release.img

創建工具: dracut, mkinitrd

系統初始化流程(內核級別): POST –> BootSequence(BIOS) –> BootLoader(MBR) –> kernel(ramdisk) –> rootfs(readonly) –> /sbin/init

/sbin/init

CentOS 5: SysV init

運行級別: 為了系統的運行或維護等目的而設定的機制

0-6: 7個級別

0: 關機, shutdown

1: 單用戶模式(single user), root用戶, 無須認證; 維護模式

2: 多用戶模式(multi user), 會啟動網絡功能, 但不會啟動NFS, 維護模式

3: 多用戶模式(multi user), 完全功能模式, 只啟動文本界面

4: 預留模式, 相當于3級別

5: 多用戶模式(multi user), 完全功能模式, 啟動圖形界面

6: reboot

默認界別: 3, 5

級別切換: init #

級別查看: who -r, runlevel

配置文件: /etc/inittab

每行定義一種action以及與之對應的process

id:runlevels:action:process

id: 一個任務的標識符

runlevels: 在哪些級別啟動此任務; #, ###, 也可以為空, 表示所有級別

action: 在什么條件下啟動此任務

process: 具體的任務

action: 

wait: 等待切換至此任務所在的級別時執行一次

respawn: 一旦此任務終止時就自動重新啟動

initdefault: 設定默認運行級別, 此時, process會省略

sysinit: 設定系統初始化方式, 此意一般為指定/etc/rc.d/rc.sysinit腳本

例如: 

id:3:initdefault

si::sysyinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0

l1:1:wait:/etc/rc.d/rc 1

l2:2:wait:/etc/rc.d/rc 2

…….

l6:6:wait:/etc/rc.d/rc 6

意味著去啟動或關閉/etc/rc.d/rc3.d/目錄下的服務腳本所控制的服務

K*: 要停止的服務; K##*, 數字表示優先級, 數字越小越先關閉, 依賴的服務線管理, 被依賴的后關閉

S*: 要啟動的服務; S##*, 優先級, 數字越小, 優先啟動; 被依賴的服務有限啟動, 而依賴的服務后啟動

rc腳本的功用: 接受一個運行級別數字為參數

腳本框架:

for srv in /etc/rc.d/rc#.d/K*;do

$srv stop

done

for srv in /etc/rc.d/rc#.d/S*;do

$srv start

done

/etc/init.d/*(/etc/rc.d/init.d/*)腳本執行方式:

# /etc/init.d/SRV_SCRIPT {start|stop|restart|status}

# service SRV_SCIPT {start|stop|restart|status}

chkconfig命令: 管控/etc/init.d/每個服務腳本在各級別下的啟動或關閉狀態

chkconfig [option] [name]

–add: 添加服務到開機啟動

能被添加的腳本服務的格式之一

#!/bin/bash

#

#chkconfog: LLL NN NN 

#description

–del: 刪除指定的開機啟動的服務

–list: 查看指定服務

修改指定的鏈接類型:

chkconfig [–level LEVES] name <on|off|reset>

注意: 正常級別下, 最后一個啟動的服務s99local沒有鏈接至/etc/init.d下的某腳本, 而是鏈接至了/etc/rc.d/rc.local(/etc/rc.local); 因此, 不便或不需要寫為服務腳本的程序期望能自動開機運行時, 直接放置于此腳本文件中即可

虛擬終端列表

tty1:2345:respawn:/usr/sbin/mingetty/tty1

……

tty6:2345:respawn:/usr/sbin/mingetty/tty6

(1)mingetty會調用login程序

(2)打開虛擬終端的程序除了mingetty外, 還有getty等

系統初始化腳本文件: /etc/rc.d/rc.sysinit

(1) 設置主機名

(2) 設置歡迎信息

(3) 激udev和selinux

(4) 掛載/etc/fstab文件中定義的所有文件系統

(5) 檢測根文件系統, 并以讀寫方式重新掛載根文件系統

(6) 設置系統時鐘

(7) 根據/etc/sysctl.conf文件的設置, 來設定內核參數

(8) 激活lvm及軟raid設備

(9) 激活swap設備

(10) 加載額外設備的驅動程序

(11) 清理操作

總結, 用戶空間的啟動流程: /sbin/init(/etc/inittab)

設置默認運行級別 –> 運行系統初始化腳本, 完成系統初始化 –> 關閉對應級別下面要停止的服務, 開啟對應級別下需要啟動的服務. –> 設置登錄終端 [–> 啟動圖形終端]

CentOS 6: upstart

init程序: upstart, 但依然為/sbin/init, 其配置文件/etc/init/*.conf, /etc/inittab(僅用于定義默認運行級別)

注意: *.conf 為upstart風格的配置文件

rcS.conf

rc.conf

start-ttys.conf

CentOS 7: systemd

init程序: systemd

配置文件: /usr/lib/systemd/system/*, /etc/systemd/system/*

完全兼容SysV腳本機制, 因此, service命令依然可用; 不過建議使用systemctl命令來控制服務

# systemctl {start|stop|status|restart} name[.service]

CentOS 6啟動流程:

POST –> Boot Sequence(BIOS) –> Boot Loader(MBR) –> kernel(ramdisk) –> rootfs –> switch root –> /sbin/init –> (/etc/inittab, /etc/init/*.conf) –> 設定默認運行級別 –> 系統初始化腳本 –> 關閉和啟動對應級別下的服務 –> 啟動終端

GRUB(Boot Loader):

grub: GRand Unified Bootloader

grub 0.x: grub legacy

grub 1.x: grub2

grub legacy:

stage 1: mbr

stage 1.5: mbr之后的扇區, 讓stage 1中的bootloader能識別stage2所在的分區上的文件系統

stage 2: 存放在磁盤分區(/boot/grub/)

配置文件: /boot/grub/gtub.conf <– /etc/grub.conf

stage2及內核等通常放置于一個基本的磁盤分區; 

功用:

(1) 提供菜單、并提供交互式接口

e: 編輯模式,用于編輯菜單

c: 命令模式,交互式接口

(2) 加載用戶選擇的內核或操作系統

允許傳遞參數給內核

可以隱藏此菜單

(3) 為菜單提供了保護機制

為編輯菜單進行認證

為啟用內核或操作系統進行認證

如何識別設備:

(hd#,#):

hd#: 磁盤編號, 用數字表示, 從2開始編號

#: 分區編號, 用數字表示, 從0開始編號

grub的命令行接口

help: 獲取幫助列表

help keyword: 獲取關鍵命令的詳細信息

find (hd#,#)/PATH/TO/SOMEFILE: 搜索文件

root (hd#,#): 將選定磁盤分區指定為根

kernel /PATH/TO/KERNEL_FILE: 設定本次啟動時用到的內核文件; 額外還可以添加許多內核支持使用的cmdline參數

內核參數: /usr/share/doc/kernel-doc-VERSION/Documentation

例如: init=/path/to/init, selinux=0

initrd /PATH/TO/INITRAMFS_FILE: 設定為選定的內核提供額外文件的ramdisk;

boot: 引導啟動選定的內核

手動在grub命令行接口啟動系統:

grub> root (hd#,#)

grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE

grub> initrd /initramfs-VERSION-RELEASE.img

grub> boot

配置文件: /boot/grub/grub.conf

/etc/grub.conf

配置項:

default=#: 設定默認啟動菜單項; 菜單項(title)編號從0開始

timeout=#: 指定菜單項等待用戶選擇的時長

splashimage=(hd#,#)/PATH/TO/XPM_FILE: 指明菜單背景圖片文件路徑

hiddenmenu: 隱藏菜單

password [–md5] STRING: 菜單編輯認證

title TITLE: 定義菜單項"標題", 可出現多次

縮進后用菜單專用項

root (hd#,#): grub查找stage2及kernel文件所在設備分區; 為grub的"根"

kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]: 啟動的內核

initrd /PATH/TO/INITRAMFS_FS: 內核匹配的ramfs文件

password [–md5] STRING: 啟動選定的內核或操作系統時進行認證

grub-md5-crypt命令: 手動生成密碼串, 直接使用即可

openssl passwd -salt "XXX" -1: 生成加鹽的md5密碼串

進入單用戶模式: 

(1) 編輯grub菜單(選定要編輯的title, 而后使用e命令)

(2) 在選定的kernel后附加 1, s, S或single都可以

(3) 在kernel所在行, 鍵入"b"命令, 進入單用戶模式

安裝grub – 拷貝定制簡單的linux系統

(1)grub-install

grub-install –root-directory=ROOT /dev/disk

步驟:

<1> 添加新硬盤

<2> 磁盤分區, 創建/boot、swap(82)、/ 分區

fdisk  –> partx

<3> 格式化穩文件系統 mae2fs -t ext4 /dev/DEVICE

<4> 掛載磁盤  mount /dev/DEV /mnt/boot

<5> 安裝grub: grub-install –root-directory=/mnt /dev/DEV

<6> cp必要的軟件

cp /boot/vmlinuz-…. /mnt/boot/vmlinuz

cp /boot/initramfs-….img /mnt/boot/initramfs.img

vim /boot/grub/grub.conf

default=0

timeout=5

title CentOS (Express)

root (hd0,0)

kernel /vmlinuz ro root=/dev/sda3 init=/bin/bash

initrd  /initramfs.img

<7> 創建文件目錄

mkdir /mnt/sysroot

mount /dev/sdb3 /mnt/sysroot

cd /mnt/sysroot

mkdir -pv etc bin sbin lib lib64 mnt sys…

<8> 復制必要文件 

cp /bin/bash /mnt/sysroot/bin/

ldd /bin/bash –> 復制bash依賴的庫文件

cp bash依賴的庫文件到相對應的目錄下

<9> 移動此磁盤, 重新創建虛擬機, 測試此系統

……

(2)MBR損壞, 未重啟

~]# grub

grub> root (hd#,#)

grub> setup (hd#)

(3) 刪除/boot目錄下所有文件

修復:

進入救援模式

chroot 

mkdir /mnt/cdrom

mount /dev/sr0 /mnt/cdrom

rpm -ivh /mnt/cdrom/Packages/kernel…. –force

grub-install /dev/sda

重啟系統, 進入grub模式

grub> root (hd0,0)

grub> kernel /vmlinuz-VERSION-release

grub> initrd /initamfs-VERSION-release

grub> boot

(4) 刪除/boot目錄和/etc/fstab文件

修復步驟:

<1> 光盤啟動, 進入救援模式

<2> 手動查看磁盤大小, 使用命令手動掛載后, 查看磁盤文件內容, 判斷出根分區; 通過分區大小判斷出/boot分區

<3> 編輯/etc/fstab文件, 添加根分區和/boot分區掛載

<4> 重啟系統

<5> 示例(3)

<6> 若根分區是掛載在lvm上面, 首先需要激活lvm邏輯卷

<7> 使用lvscan查看lvm的狀態

<8> 使用lvchange -ay, 激活lvm, 然后掛載

Linux Kernel:

CentOS啟動流程: POST –> bootloader(BIOS,MBR) –> Kernel(initrd) –> rootfs –> switch_root –> /sbin/init

root (hd0,0)

kernel

initrd

ldd命令: 打印應用程序依賴的二進制文件

ldd [option]… file…

內核設計體系: 單內核、微內核

一、Linux:單內核設計,充分借鑒了微內核體系的設計優點; 為內核引入了模塊化機制;

1、內核組成部分:

(1) kernel: 內核核心, 一般為bzimage, 通常為與/boot目錄, 名稱為vmlinuz-VERSION-release;

(2) kernel object: 內核對象, 即內核模塊, 一般放置于/lib/modules/VERSION-release/

注意: 內核模塊與內核核心版本必須要嚴格匹配

[ ]: N

[M]: Module

[*]: Y, 編譯進內核核心

內核: 支持動態裝載和卸載

(2) ramdisk: 輔助性文件, 非必須, 這取決于內核是否能直接驅動rootfs所在的設備;

可加載的驅動:

目標設備驅動, 例如 SCSI 設備驅動;

邏輯設備驅動, 例如 LVM 設備驅動;

文件系統, 例如 xfs 文件系統;

ramdisk: 是一個簡裝版的根文件系統; 為了讓內核能夠找到真正的根文件系統

二、內核信息獲取: uname

uname – print system information

uname [OPTION]…

-r: 內核的release號

-n: 主機名稱

-a: 顯示所有信息

三、模塊信息獲取和管理:

lsmod – show the status of modules in the Linux Kernel 

顯示的內容來自/proc/modules

lsmod 顯示的格式

模塊名稱   模塊大小  引用次數

modinfo – shwo information about a linux kernel module, 顯示內核模塊信息

用法:

modinfo [-0] [-F field] [-k kernel] [modulename|filename…]

選項:

-F field: 只顯示指定字段的信息

-k Kernel: 顯示指定內核版本的信息

-a –author, -d –description, -l –license, -p –parameters, -n –filename

modprobe – add and remove modules from the linux kernel, 從內核中裝載和卸載模塊

用法:

動態裝載或卸載

modprobe [-r] module_name

-r: 卸載, 不加此選項為裝載模塊

注意: 對正在使用中的內核模塊不能隨意卸載

depmod – generate modules.dep and map files.

內核模塊依賴關系文件的生成工具

模塊的裝載和卸載的另一組工具

insmod – simple program to insert a module into the linux kernel

用法:

insmod [filename] [module options…]

filename: 模塊文件的文件路徑

注意: 無法自動解決依賴關系

示例:

lsmod btrfs(查看系統的btrfs模塊)

insmod `modinfo -n btrfs`(安裝btrfs模塊)

modinfo btrfs(顯示btrfs模塊信息, 查看btrfs所depends的模塊)

安裝依賴模塊:

insmod `modinfo -n raid6_pq`(安裝顯示的模塊存儲文件)

insmod `modinfo -n xor`

insmod `modinfo -n zlib_deflate`

lsmod | grep xor (查看依賴的模塊是否安裝完成)

lsmod | grep btrfs

rmmod – Simple program to remove a module from the linux kernel

用法: rmmod [-f] [-s] [-v] [modulename]

-f, –force: 

-s,–syslog: send errors to syslog instead of standard error

-v, –version

注意: 安裝模塊時, 要由內層往外層安裝, 卸載時要由外層向內層卸載

四、ramdisk文件管理

(1)mkinitrd

為當前使用中的內核重新制作ramdisk文件; 

mkinitrd [OPTIONS…] [<initrd-image>] <kernel-version>

–with=<module>: 除了默認的模塊之外需要被裝載至initramfs中的模塊;

–preload=<module>: initramfs所提供的模塊需要預先裝載的模塊;

示例: 

mv /boot/initramfs-<version>.img /root

mkinitrd /boot/initramfs-`uname -r`.img `uname -r`

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

(2)dracut – low-level tool for generating an initramfs image

dracut [OPTIONS…] [<image> [<kernel-vision>]]

示例:

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

五、內核信息輸出的偽文件系統

/proc:

內核狀態及統計信息的輸出接口; 同時, 還提供了一個配置接口, /proc/sys; 

參數: 

只讀: 用于實現信息輸出, 例如/proc/#/*

可寫: 可以接受用戶指定一個"新值"來實現對內核某功能或特性的配置, /proc/sys/

修改其值的方式:

/proc/sys:

net/ipv4/ip_forward 相當于 net.ipv4.ip_forward

(1) sysctl

專用于查看或設定/proc/sys/目錄下的值的

sysctl – configure kernel parameters at runtime, 在運行時配置內核參數

sysctl [options] [variable[=value]] […]

選項:

-a, –all, 查看所有運行中的內核參數

-w, –write, 改變sysctl設定

-p: 重讀/etc/sysctl.conf, /etc/sysctl.d/*.conf 配置文件 

查看:

sysctl -a

sysctl variable

cat /proc/sys/PATH/TO/SOME_KERNEL_FILE

修改其值:

sysctl -w variable=value

示例:

改變主機名稱

查看: uname -n

更改: sysctl kernel.hostname=NAME

查看: uname -n

參數存放路徑: /proc/sys/kernel/hostname

(2) 文件系統命令: cat、echo

查看: 

# cat /proc/sys/PATH/TO/SOME_KERNEL_FILE

設定:

# echo "VALUE" > /proc/sys/PATH/TO/SOME_KERNEL_FILE

注意: 上述兩種方式的設定僅當前運行內核有效; 重啟后失效

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

立即生效:

可以先修改配置文件,  

重讀配置文件

立即生效: sysctl -p [/PATH/TO/CONFIG_FILE]

內核參數:

net.ipv4.ip_forward: 核心轉發功能

vm.drop_caches: 0, 1, 2

kernel.hostname: 主機名

net.ipv4.icmp_echo_ignore_all: 不略所有主機ping操作

/sys目錄:

sysfs: 輸出內核識別出的各硬件設備的相關屬性信息, 也有內核對硬件特性的可設置參數; 對此些參數的修改, 即可定制硬件設備工作特性;

udev: 通過讀取/sys目錄下的硬件設備信息按需為各硬件設備創建設備文件; udev是用戶空間程序; 專用工具: devadmin, hotplug;

udev為設備創建設備文件時, 會讀取其事先定義好的規則文件, 一般在/etc/udev/rule.d/目錄下, 以及/usr/lib/udev/rule.d/目錄下

啟動流程: 

POST –> BootSequence(BIOS) –> Bootloader(MBR) –> kernel(ramdisk) –> rootfs –> [switch_root] –> /sbin/init(/etc/inittab, /etc/iniy/*.conf, /usr/lib/systemd/system) –> 設定默認運行級別, 系統初始化, 關機及啟動服務, 啟動終端[啟動圖形終端]

grub: 

1st stage: mbr

1.5 stage: mbr之后的扇區, 識別真正的第二階段所在文件系統的驅動程序

2nd stage: /boot/grub/stage2

支持加密: 保護編輯功能, 保護內核

編譯內核

程序包的編譯安裝

./configure, make, make install

前提: 準備好開發環境(開發工具, 開發庫), 頭文件: /usr/include

原因: 開源,源代碼 –> 轉換成可執行程序

發行版: 以"通用"的目標

編譯內核的前提:

(1) 準備好開發環境

(2) 獲取目標主機上硬件設備的相關信息

(3) 獲取到目標主機系統功能的相關信息, 例如要啟用的文件環境

(4) 獲取內核源代碼包: www.kernel.org

準備開發環境:

CentOS 6:

包組: Development Tools, Server Platform Development

CemtOS 7: 

包組: Development Tools, Server Platform Development

查看是否安裝ncurses包: yum list all *ncurses*

獲取目標主機上硬件設備的相關信息:

CPU型號:

(1) ~]# cat /proc/cpuinfo

(2) ~]# lscpu

(3) ~]# yum -y install x86info (CentOS 6)

x86info –help

PCI設備:

lspci [-v|-vv(顯示詳細信息)]

lsusb [-v| -vv]

lsblk

了解全部硬件設備信息

~]# hal-device (硬件抽象墻)(CentOS 6)

內核編譯過程:

注意:

(1) 內核.tar文件解壓放置在/usr/src目錄中

tar xf linux-VERSION-release.tar.xz -C /usr/src

(2) 硬件如要要編譯驅動, 默認會到/usr/src下尋找文件名叫linux的目錄: 建立軟鏈接 ln -sv linux-V-release linux(注意: 不需要創建linux文件假)

(3) make命令: make help 獲取需要的選項

make menuconfig: 圖形界面參數選擇

[*]: 編譯進內核

[M]: 編譯成模塊

步驟:

獲取源代碼

展開: tar xf linux-V-r.tar.xz -C /usr/src

cd /usr/src

ln -sv linux-3.10.67 linux(注意: 不需要創建linux文件夾)

make menuconfig(配置內核選項)

make [-j #](編譯內核, 可以指定cpu核心數量)

make modules_install(安裝內核模塊)

make install(安裝內核核心)

重啟系統, 選擇使用新內核

screen命令: 內核編譯過程建議使用screen

剝離screen界面: Ctrl+<a -> d>

列出: -ls

連接: -r SCREEN_ID 

關閉: 在screen內 exit

過程詳細說明:

(1) 配置內核選項  cd /usr/src/linux

復制已安裝kernel的配置文件 /boot/config-VERSION-release; 有些版本在/proc/config.gz中

~]# cp /boot/config-3.10-229.e17.x86_64 .config

支持"更新"模式進行配置: 在已有的.config文件基礎之上進行"修改"配置;

(a) make config: 基于命令行遍歷的方式去進行配置內核中可配置的每個選項

(b) make menuconfig: 基于cureses的文本配置窗口

(c) make gconfig: 基于GTK開發環境的窗口界面; "桌面平臺開發"包組

(d) make xconfig: 基于QT開發環境的窗口界面

支持"全新配置"模式進行配置

(a) make defconfig: 基于內核為目標平臺提供的"默認" 配置為模板進行配置

(b) make allnoconfig: 所有選項均為"no"

(2) 編譯

(a) make [-j #]: 啟用多線程編譯

(b) 編譯內核中的一部分代碼:

(I) 只編譯某子目錄中的相關代碼

cd /usr/src/linux

make /path/to/dir

(II) 只編譯一個特定的模塊

cd /usr/src/linux

make /path/to/dir/file.ko

編譯好后, 要將文件復制到系統內核相應模塊文件中

編譯好的模塊在:

/lib/modules/VERSION-release/kernel/

(c) 如何交叉編譯

目標平臺與當前編譯操作所在的平臺不同

# make ARCH=arch_name

要獲取特定目標平臺的使用幫助

# make ARCH_name help

(3) 如何在執行過編譯操作的內核源碼樹上做重新編譯

事先清理操作:

# make clean: 清理編譯生成的絕大多數文件, 但會保留config, 及編譯外部模塊所需要的文件

# make mrproper: 清理編譯生成的所有文件, 包括配置生成的config文件及某些備份文件

# make distclean: 相當于 mrproper, 額外清理跟中patches以及編輯器備份文件

原創文章,作者:black_fish,如若轉載,請注明出處:http://www.www58058.com/47271

(0)
black_fishblack_fish
上一篇 2016-09-19
下一篇 2016-09-19

相關推薦

  • Linux系統啟動基本流程

    Linux開機流程 如下圖 00×01、BISO自檢     硬件檢查,檢查硬件完整性,之后從開機BIOS開機硬件列表選擇BOOT設備     2. 00×02、MBR引導     從bootloader446…

    2017-07-09
  • 條件選擇if 條件判斷case 文件查找 find locate 以及壓縮和解壓縮工具

    1 shell腳本編程之 條件選擇if 條件判斷case  2 文件查找 find locate 以及壓縮和解壓縮工具 過程式編程語言:  順序執行  選擇執行  循環執行 條件選擇之 if語句 選擇執行: ?  注意:if語句可嵌套 ?   單分支 if 判斷條件:then 條件為真的分…

    Linux干貨 2016-08-15
  • RPM軟件包管理器及前端工具yum

    目前在linux系統之上軟件安裝方式最常見的有兩種,分別是: dpkg:這個機制最早是由Debian Linux社區所開發出來的,透過dpkg的機制,Debian提供的軟件就能夠簡單的安裝起來,同時還能提供安裝后的軟件資訊,實在非常不錯。只要是衍生于Debian的其他linux發行版,大多使用dpkg這個機制來管理軟件的,包括B2D、Ubuntu等等。 RP…

    Linux干貨 2016-08-20
  • 第四周作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 [root@centos7 ~]# cp -r /etc/skel/ /home/tuser1 [root@centos7 ~]# chmod …

    Linux干貨 2017-01-16
  • N21沉舟第六周作業

    N21沉舟第六周作業 1、  復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; cp /etc/rc.d/rc.sysinit /tmp vim /tmp/rc.sysinit %s/^[[:space:]]\+/#&…

    Linux干貨 2016-08-08
  • httpd配置

    1、Centos7系統下實現httpd-2.2的安裝,并分別實現prefork、worker、event等幾種工作方式

    2、簡述request報文請求方法和狀態響應碼

    3、詳細描述httpd虛擬主機、站點訪問控制、基于用戶的訪問控制、持久鏈接等應用配置實例

    Linux干貨 2018-02-05
欧美性久久久久