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