Debian / Ubuntu Linux 核心編譯個人筆記 [論壇 - Ubuntu 非官方發行版討論]
正在瀏覽:
1 名遊客
Debian / Ubuntu Linux 核心編譯個人筆記 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員四級
![]() ![]() 註冊日期:
2015/9/29 21:19 所屬群組:
已註冊使用者 等級: 16
HP : 0 / 380
![]() |
==================================
Debian / Ubuntu Linux 核心編譯 ================================== Debian sid / Ubuntu xenial 編譯Linux核心安裝所需的套件 $ sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils kernel-package 下載Linux核心原始碼 $ wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.5.tar.xz $ tar xvf linux-4.5.tar.xz 設定Linux核心 $ cd linux-4.5 ### 清除先前編譯的暫存檔案(新解開的壓縮檔可跳過此步驟) $ sudo make mrproper ### 載入系統核心設定 $ cp /boot/config-$(uname -r) .config 修改核心功能與驅動程式設定項目 $ make menuconfig 編譯Linux核心並建立DEB套件包 $ make-kpkg clean $ sudo fakeroot make-kpkg --initrd kernel_image kernel_headers 或 $ sudo fakeroot make-kpkg --initrd --revision=4.4 kernel_image kernel_headers 安裝核心 $ sudo dpkg -i linux-image-*.deb $ sudo dpkg -i linux-headers-*.deb ================================== 選項說明 ================================== 編譯選項說明 --initrd : 建立 initrd. --revision : 設定自訂的修訂版本(可免). 核心功能與驅動程式設定說明 詳細說明 http://linux.vbird.org/linux_basic/0540kernel.php [ * ] < * > 則表示編譯進核心;若為 < M > 則表示編譯成模組. 『肯定』核心一定要的功能,直接編譯進核心內; 『可能在未來會用到』的功能,那麼盡量編譯成為模組; 『不知道那個東西要幹嘛的,看 help 也看不懂』的話,那麼就保留預設值,或者將他編譯成為模組; 重點設定 ############################### ### General setup ############################### Ubuntu的話 裡面會看到 Ubuntu 4.4.0-11.26-generic 4.4.4 名稱可隨意修改 也可以修改原始碼目錄內複製過來的「.config」 讓.config這個核心功能列表可以寫入實際的核心檔案中 < M > Kernel .config support 網路謠言雙核心選15實際我也不知. (15) Kernel log buffer size (16 => 64KB, 17 => 128KB) ############################### ### Processor type and features ############################### 提供 Linux 虛擬化功能 --- Linux guest support ---> CPU 支援 Intel VT 或 AMD-V 以下項目選取 [ * ] Enable paravirtualization code [ * ] Paravirtualization layer for spinlocks [ * ] Xen guest support [ * ] KVM Guest support (including kvmclock) [ * ] Paravirtual steal time accounting 選擇處理器架構 Processor family (Generic-x86-64) ---> 如果處理器沒在清單內 Intel P4 / Netburst 是舊款 32位元處理器 Generic-x86-64 是現在的64位元處理器 我的是Haswell 64位元處理器,只能選Generic-x86-64 ( ) Opteron/Athlon64/Hammer/K8 ( ) Intel P4 / older Netburst based Xeon ( ) Core 2/newer Xeon ( ) Intel Atom ( X ) Generic-x86-64 多核心支援 [ * ] Enable Maximum number of SMP Processors and NUMA Nodes [ * ] Multi-core scheduler support 核心類型 Preemption Model (Voluntary Kernel Preemption 如果要編譯成伺服器核心就選Server. 沒架Server就選 Desktop. ( ) No Forced Preemption (Server) ( X ) Voluntary Kernel Preemption (Desktop) ( ) Preemptible Kernel (Low-Latency Desktop) Timer frequency (1000 HZ) 預設250Hz Server 調整 300Hz 教新的CPU調整到1000Hz性能比較好 ############################### ### Power management and ACPI options ############################### CPU Frequency scaling ---> CPU變頻省電技術把「 M 」改成「 * 」編譯到核心. [ * ] CPU frequency translation statistics details < * > 'powersave' governor < * > 'userspace' governor for userspace frequency scaling < * > 'conservative' cpufreq governor Default CPUFreq governor (conservative) ---> performance 將CPU頻率設定在支持的最高頻率,而不動態調節。 powersave 將CPU頻率設置爲最低 ondemand 快速動態調整CPU頻率, Pentuim M的CPU可以使用 conservative 與ondemand不同,平滑地調整CPU頻率,適合于用電池工作時。 userspace 使用者模式,也就是長期以來都在用的那個模式。可以通過手動編輯配置文件進行 吃電池的選擇 conservative 比較省電. ############################### ### Bus options (PCI etc.) ############################### 可選 [ * ] Support for PCI Hotplug 如果沒有PCI熱插拔裝置,去掉. ############################### ### Device Drivers ############################### 可選 大致上預設按預設, 有問題再詳細增減. ############################### ### File systems ############################### < * > The Extended 4 (ext4) filesystem [ * ] Use ext4 for ext2 file systems [ * ] Ext4 POSIX Access Control Lists [ * ] Ext4 Security Labels < M > Ext4 Encryption CD-ROM/DVD Filesystems ---> < M > ISO 9660 CDROM file system support [ * ] Microsoft Joliet CDROM extensions [ * ] Transparent decompression extension < M > UDF file system support 使用Win與Lin雙系統 DOS/FAT/NT Filesystems ---> < M > MSDOS fs support < * > VFAT (Windows-95) fs support < M > NTFS file system support [ * ] NTFS write support ############################### ### Virtualization ############################### 虛擬化與函式庫 使linux上虛擬機性能大幅度提高. CPU 要有支援 Intel VT 或 AMD-V < M > Kernel-based Virtual Machine (KVM) support < M > KVM for Intel processors support < M > KVM for AMD processors support [ * ] Audit KVM MMU [ * ] KVM legacy PCI device assignment support (DEPRECATED) < M > Host kernel accelerator for virtio net
2016/3/26 20:21
|
||||||||||
![]() |
回覆: Debian / Ubuntu Linux 核心編譯個人筆記 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員四級
![]() ![]() 註冊日期:
2015/9/29 21:19 所屬群組:
已註冊使用者 等級: 16
HP : 0 / 380
![]() |
LLVM(clang) 編譯 Linux 核心
Debian sid / Ubuntu xenial 安装必要的工具软件 $ sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils kernel-package patch libncurses5-dev $ sudo apt-get install llvm clang debian 套件版本太舊無法編譯 建議添加 ubuntu sources 安裝 llvm 1.38 clang-3.8 $ sudo leafpad /etc/apt/sources.list deb http://free.nchc.org.tw/linuxmint/packages sarah main upstream import backport deb http://ftp.nsysu.edu.tw/Ubuntu/ubuntu xenial main restricted universe multiverse deb http://ftp.nsysu.edu.tw/Ubuntu/ubuntu xenial-updates main restricted universe multiverse deb http://ftp.nsysu.edu.tw/Ubuntu/ubuntu xenial-backports main restricted universe multiverse deb http://security.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse deb http://archive.canonical.com/ubuntu/ xenial partner $ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 40976EAF437D05B5 $ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32 $ sudo apt-get update 下載Linux核心原始碼 $ wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.5.tar.xz $ tar xvf linux-4.5.tar.xz LLVM Patch $ wget http://buildbot.llvm.linuxfoundation.org/configs/x86_64/kernel-patches.tar.bz2 $ cd linux-4.5 $ bzcat ../kernel-patches.tar.bz2 | patch -p1 LLVM Patch 錯誤修正 以linux-4.5為例: linux-4.5/Makefile.rej Hunk #2 FAILED at 667. Hunk #1 FAILED at 1260. linux-4.5/drivers/md/raid10.c.rej Hunk #1 FAILED at 711. /drivers/md/raid10.c 不必理會,因為新版原始碼已經取消掉Patch替換項目. /Makefile Hunk #2 FAILED at 667 也不必理會因為新版原始碼已經加入支援clang項目. Hunk #1 FAILED at 1260 錯誤修復 linux-4.5/Makefile 搜尋 @echo ' dir/file.[ois] @echo ' dir/file.[ois] - Build specified target only' @echo ' dir/file.lst - Build specified mixed source/assembly target only' 改為 @echo ' dir/file.[ois] - Build specified target only' @echo ' dir/file.ll - Build the LLVM bitcode file' @echo ' (requires compiler support for LLVM bitcode generation)' @echo ' dir/file.lst - Build specified mixed source/assembly target only' 設定Linux核心 建議直接 make menuconfig 手動修改 $ cd linux-4.5 使用預設組態 $ make defconfig 或 根據硬體架構載入設定(精簡化驅動,只包含支援你電腦的驅動) $ make localmodconfig 選單界面編輯 $ make menuconfig 編譯原始碼 $ make HOSTCC=clang CC=clang 多核心處理器加速編譯參數: 雙核心添加 -j2 四核心添加 -j4 .... 雙核心make $ make -j2 HOSTCC=clang CC=clang 打包為DEB $ make deb-pkg 雙核心make $ make -j2 deb-pkg
2016/3/27 11:03
|
||||||||||
![]() |
回覆: Debian / Ubuntu Linux 核心編譯個人筆記 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員四級
![]() ![]() 註冊日期:
2015/9/29 21:19 所屬群組:
已註冊使用者 等級: 16
HP : 0 / 380
![]() |
Ubuntu / Debian 編譯RT核心
必要工具同上 RT補釘只有4.4.4版, 為避免補釘錯誤, 編譯4.4.4核心比較保險. 下載Linux核心原始碼 $ wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.4.tar.xz 下載RT補釘 $ wget https://www.kernel.org/pub/linux/kernel/projects/rt/4.4/patch-4.4.4-rt11.patch.gz 解壓縮Linux原始碼 $ tar xvf linux-4.4.4.tar.xz 解壓縮RT補釘 $ gunzip patch-4.4.4-rt11.patch.gz RT補釘 $ cd linux-4.4.4 $ patch -p1 < ../patch-4.4.4-rt11.patch 設定Linux核心 $ cd linux-4.4.4 使用預設組態 $ make defconfig 或 根據硬體架構載入設定(精簡化驅動,只包含支援你電腦的驅動) $ make localmodconfig 選單界面編輯 $ make menuconfig RT選項: 選擇「Fully Preemptible Kernel (RT)」 Processor type and features ---> Preemption Model ( X ) Fully Preemptible Kernel (RT) 去除 Staging drivers Device Drivers ---> [ ] Staging drivers ---- 其他設定同前... 編譯並打包DEB $ sudo fakeroot make-kpkg --initrd --revision=4.4.4-0 kernel_image kernel_headers 如要用LLVM編譯, 跟前面一樣打LLVM補釘
2016/3/28 0:43
|
||||||||||
![]() |
回覆: Debian / Ubuntu Linux 核心編譯個人筆記 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員四級
![]() ![]() 註冊日期:
2015/9/29 21:19 所屬群組:
已註冊使用者 等級: 16
HP : 0 / 380
![]() |
====================
編譯 Ubuntu 官方版核心 ==================== Linux Mint 18 (Ubuntu xenial) 編譯Linux核心安裝所需的套件 $ sudo apt-get install git fakeroot build-essential libncurses5-dev xz-utils kernel-package libssl-dev zlib1g-dev debhelper kernel-wedge gawk 下載原始碼與補丁 $ wget http://archive.ubuntu.com/ubuntu/pool/main/l/linux/linux_4.4.0.orig.tar.gz $ wget http://archive.ubuntu.com/ubuntu/pool/main/l/linux/linux_4.4.0-21.37.diff.gz 解壓縮 $ tar xvf linux_4.4.0.orig.tar.gz $ gunzip linux_4.4.0-21.37.diff.gz Ubuntu 官方版原始碼補丁 $ mv linux-4.4 linux-4.4.0 $ patch -p0 -i linux_4.4.0-21.37.diff 設定檔案權限 $ cd linux-4.4.0 $ chmod a+x debian/rules $ chmod a+x debian/scripts/* $ chmod a+x debian/scripts/misc/* 設定核心功能與驅動程式 設定方法同前 $ fakeroot debian/rules clean $ fakeroot debian/rules editconfigs 編譯核心 $ fakeroot debian/rules clean $ fakeroot debian/rules binary-headers binary-generic 只須保留 linux-image-4.4.0-21-generic 和 linux-image-extra-4.4.0-21-generic 套件 如系統核心版號與編譯核心的版號一樣,必須使用Live系統或電腦上其他Linux以chroot方式替換. 替換核心 # apt-get --purge remove linux-image-4.4.0-21-generic linux-image-extra-4.4.0-21-generic 將套件複製到 chroot系統/tmp # cd /tmp # dpkg -i linux-image-4.4.0-21-generic_4.4.0-21.37_amd64.deb # dpkg -i linux-image-extra-4.4.0-21-generic_4.4.0-21.37_amd64.deb 編譯全部套件 $ debuild -e DEBIAN_KERNEL_JOBS=$(nproc) ==================== 編譯 Debian 官方版核心 ==================== LMDE (Debian sid) 編譯Linux核心安裝所需的套件 $ sudo apt-get install git fakeroot build-essential libncurses5-dev xz-utils kernel-package libssl-dev zlib1g-dev debhelper kernel-wedge gawk rsync quilt devscripts 下載Debian官方版原始碼 $ wget http://http.debian.net/debian/pool/main/l/linux/linux_4.4.6.orig.tar.xz 解壓縮原始碼 $ tar Jxvf linux_4.4.6.orig.tar.xz $ cd linux-4.4.6 下載Debian官版補丁 $ wget http://http.debian.net/debian/pool/main/l/linux/linux_4.4.6-1.debian.tar.xz $ tar Jxvf linux_4.4.6-1.debian.tar.xz ---- 編譯全部套件 $ make -f debian/rules clean $ debuild -e DEBIAN_KERNEL_JOBS=$(nproc) ---- 編譯核心套件 套用Debian原始碼補丁 $ make -f debian/rules clean $ make -f debian/rules orig 建立原始碼編譯目錄 $ make -f debian/rules source 編譯Linux核心並打包deb $ fakeroot make -j2 -f debian/rules.gen binary-arch_amd64_none_amd64 保留 linux-image-4.4.0-1-amd64_4.4.6-1_amd64.deb 即可 替換核心 $ sudo apt-get --purge remove linux-image-4.4.0-1-amd64 將套件複製到 chroot系統/tmp $ cd /tmp $ sudo dpkg -i linux-image-4.4.0-1-amd64_4.4.6-1_amd64.deb 編譯錯誤處理 錯誤訊息: recipe for target 'debian/stamps/build_amd64_none_amd64' failed $ ln -s 原始碼路徑/linux-4.4.6/debian/build/build_amd64_none_amd64 原始碼路徑/linux-4.4.6/debian/stamps/build_amd64_none_amd64 手動修改自訂核心功能 ------------------------------------ linux-4.5.1/debian/config/kernelarch-x86/config-arch-64 多核心支援 # CONFIG_MAXSMP is not set 改為 CONFIG_MAXSMP=y CONFIG_NR_CPUS=512 改為 CONFIG_NR_CPUS=8192 file: arch/x86/Kconfig 項目底下添加 CONFIG_CPUMASK_OFFSTACK=y linux-4.5.1/debian/config/kernelarch-x86/config ### 筆電使用CONSERVATIVE 桌上型不用改 CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y 改為 # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set 改為 CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE=y VT-X 支援 # CONFIG_KVM_MMU_AUDIT is not set 改為 CONFIG_KVM_MMU_AUDIT=y # CONFIG_PARAVIRT_TIME_ACCOUNTING is not set 改為 CONFIG_PARAVIRT_TIME_ACCOUNTING=y CONFIG_NODES_SHIFT=6 改為 CONFIG_NODES_SHIFT=10 linux-4.5.1/debian/config/config ### CPU 頻率 250Hz To 1000Hz CONFIG_HZ_250=y 改為 # CONFIG_HZ_250 is not set # CONFIG_HZ_1000 is not set 改為 CONFIG_HZ_1000=y ### CPU 變頻功能 CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y 改為 # CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set CONFIG_CPU_FREQ_STAT=m 改為 CONFIG_CPU_FREQ_STAT=y CONFIG_CPU_FREQ_GOV_POWERSAVE=m 改為 CONFIG_CPU_FREQ_GOV_POWERSAVE=y CONFIG_CPU_FREQ_GOV_USERSPACE=m 改為 CONFIG_CPU_FREQ_GOV_USERSPACE=y CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m 改為 CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y ### 檔案格式支援 CONFIG_EXT4_FS=m 改為 CONFIG_EXT4_FS=y CONFIG_VFAT_FS=m 改為 CONFIG_VFAT_FS=y 找尋 file: fs/fat/Kconfig 底下添加 CONFIG_FAT_FS=y 找尋 file: fs/jbd2/Kconfig 底下添加 CONFIG_JBD2=y 找尋 file: fs/Kconfig 底下添加 CONFIG_FS_MBCACHE=y # CONFIG_NTFS_RW is not set 改為 CONFIG_NTFS_RW=y # CONFIG_IKCONFIG is not set 改為 CONFIG_IKCONFIG=m CONFIG_LOG_BUF_SHIFT=17 改為 CONFIG_LOG_BUF_SHIFT=15 CONFIG_CRC16=m 改為 CONFIG_CRC16=y ------------------------------------ 勞動成果 ![]() ![]()
2016/4/26 17:10
|
||||||||||
![]() |
回覆: Debian / Ubuntu Linux 核心編譯個人筆記 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
站長
![]() ![]() 註冊日期:
2005/6/10 9:50 來自 Taichung, Taiwan.
所屬群組:
網站管理員 已註冊使用者 等級: 19
HP : 0 / 452
![]() |
好文推推
2017/10/20 1:01
|
||||||||||
![]() |
回覆: Debian / Ubuntu Linux 核心編譯個人筆記 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員一級
![]() ![]() 註冊日期:
2017/9/20 17:49 所屬群組:
已註冊使用者 等級: 1
HP : 0 / 0
![]() |
好文值得半夜研讀
2017/10/20 1:06
|
||||||||||
![]() |
回覆: Debian / Ubuntu Linux 核心編譯個人筆記 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員三級
![]() ![]() 註冊日期:
2016/4/18 12:29 所屬群組:
已註冊使用者 等級: 9
HP : 0 / 221
![]() |
還沒有時間仔細看QQ
想請問一下,如果我需要比對兩個kernel的選項,有什麼方法嗎? 如ubuntu desktop & server的編譯差異 先謝謝
2017/10/20 10:01
|
||||||||||
![]() |
回覆: Debian / Ubuntu Linux 核心編譯個人筆記 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
管理員
![]() ![]() 註冊日期:
2012/1/14 18:41 所屬群組:
討論區管理群 等級: 20
HP : 0 / 480
![]() |
desktop跟server最大的差異就是server版的他比較不需要特別去優化反應時間,所以如果拿server的kernel來當一般的桌面系統理論上會反應比較慢,但是相對來講每個程式再CPU裏面執行的時間比較長。
2017/10/21 11:58
|
||||||||||
![]() |
回覆: Debian / Ubuntu Linux 核心編譯個人筆記 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員三級
![]() ![]() 註冊日期:
2016/4/18 12:29 所屬群組:
已註冊使用者 等級: 9
HP : 0 / 221
![]() |
hi 幻影火,
謝謝說明,Server & desktop 我只是舉例一下 其實因工作上的需要,我會需要比較同一個kernel的make menuconfig選項的差異 謝謝
2017/10/21 13:11
|
||||||||||
![]() |
回覆: Debian / Ubuntu Linux 核心編譯個人筆記 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 901
![]() |
ubuntu_net2016 寫到: ubuntu_net2016 寫到: 先聲明,我目前還沒動手去編譯過核心,所以對這部份不懂。 我是看到您的提問,稍微看了一下上面的「#1」。 裡面有一個步驟 姜至奐 寫到: 還有一段 姜至奐 寫到: 就可以找到「鳥哥的 Linux 私房菜 / 第二十四章、Linux 核心編譯與管理 / 24.2.3 開始挑選核心功能: make XXconfig / 透過既有的設定來處理核心項目與功能的選擇」。 也許您可以從這裡開始探索起。 ![]() ================================================================================ 執行
顯示
可以執行下面指令,觀看「/boot/config-4.4.0-97-generic」的內容
或是執行下面指令觀看
另外還發現兩個檔案路徑 * /usr/src/linux-headers-4.4.0-97-generic/.config * /usr/src/linux-headers-4.4.0-97-generic/.config.old 可以執行下面指令,就可以看到
執行
顯示
表示「/usr/src/linux-headers-4.4.0-97-generic」這個資料夾,是屬於「linux-headers-4.4.0-97-generic」這個套件。
顯示
一些套件的操作案例,紀錄在「[索引] 套件操作實務」。 ================================================================================ 以上是我目前看到的,提供參考,其他的我就沒再深究了。 ![]() ================================================================================ ## Command Substitution 執行
顯示
執行
顯示
執行
顯示
執行 $ man bash 使用「Command Substitution」當關鍵字查詢,可以找到下面的說明 ...略... Command Substitution Command substitution allows the output of a command to replace the command name. There are two forms: $(command) or `command` ...略... ### 之前的討論案例 * #4 回覆: shell中 `` 與()問題請教 * #4 回覆: function去呼叫function ### 相關索引 * [索引]如何執行指令 ### 相關文件 * https://github.com/denysdovhan/bash-handbook#command-substitution * https://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html * http://tldp.org/LDP/abs/html/commandsub.html ================================================================================
2017/10/21 13:53
|
||||||||||
![]() |
您可以查看帖子.
您不可發帖.
您不可回覆.
您不可編輯自己的帖子.
您不可刪除自己的帖子.
您不可發起投票調查.
您不可在投票調查中投票.
您不可上傳附件.
您不可不經審核直接發帖.