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核心
$ 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
編譯過程不超過1小時 very fast...
安裝deb
$ sudo dpkg -i linux-image-4.5.0_4.5.0-*_amd64.deb
$ sudo dpkg -i linux-headers-4.5.0_4.5.0-*_amd64.deb