做完后整理一下,可能有疏漏
首先安装abs
$ sudo pacman -S abs
同步abs
$ sudo abs
报download failed 的时候试一下改网络配置里的dns,或者试一下
$ sudo abs core
看能不能下载,能的话就
$ sudo abs
把/var/abs/core/linux下的文件复制到编译目录,我的是~/linux-custom
$ sudo cp /var/abs/core/linux/* ~/linux-custom
$ cd ~/linux-custom
编辑PKGBUILD
#pkgbase=linux
pkgbase=linux-custom
.
.
.
.
# load configuration
# Configure the kernel. Replace the line below with one of your choice.
make menuconfig # CLI menu for configuration
#make nconfig # new CLI menu for configuration
#make xconfig # X-based configuration
#make oldconfig # using old config from previous kernel version
# ... or manually edit .config
这里我选的是 make menuconfig
做到这里时最好先搞好gpg 的配置和 /etc/makepkg.conf的配置
如果保存后直接makepkg -s的话会出现两个问题
1 . Verifying source file signatures with gpg 不通过直接退出makepkg
2 . 当在PKGBUILD使用make menuconfig这个字段时,就算解决问题1编译完成后,用pacman -U 来安装生成的3个pkg.tar.xz后缀的包会报错如:
/lib/modules/4.7.0-1-ARCH/ 下 文件已存在
解决问题1
查看wiki上的makepkg页和gnupg页
https://wiki.archlinux.org/index.php/Makepkg#Signature_checking
https://wiki.archlinux.org/index.php/GnuPG#Reload_the_agent
添加gpg keyserver
~/.gnupg/gpg.conf
keyserver-options auto-key-retrieve
auto-key-locate hkp://pool.sks-keyservers.net
~/.gnupg/dirmngr.conf
keyserver hkp://pool.sks-keyservers.net
然后重启gpg-agent,我当时没细看wiki,是直接重启电脑的,下面的命令不行的话就重启试一下
$ gpg-connect-agent reloadagent /bye
再执行makepkg -s的话应该能通过signature verifying了
解决问题2
把PKGBUILD里面的
pkgrel=1 #1改成其它数字时,makepkg 可以通过编译,生成的包也可能成功安装,内核也能启动,但是uname -a的输出跟官方内核的输出是一样的,并没有custom的字样
正确的解决方法是进入menuconfig的界面并load了一个config文件后,把
General setup ---> 里面的
(-ARCH) Local version - append to kernel release 里的-ARCH改成其它如-CUSTOM
[ ] Automatically append version information to the version string 前面不要有星号
相当于修改了config文件里面的LOCALVERSION 和 LOCALVERSION_AUTO 的值
配置/etc/makepkg.conf
MAKEFLAGS="-j5" #数字可以改成CPU核心数+1,例如我的CPU是E3 4核8线程, -j5 编译时CPU平均70%左右的占用,如果是 -j2的话就10%-20%左右
BUILDDIR=/tmp/makepkg # 改在tmpfs里面可以加快一点编译速度
总结一下步骤,就是当PKGBUILD修改保存后
添加 gpg keyserver
~/.gnupg/gpg.conf
keyserver-options auto-key-retrieve
auto-key-locate hkp://pool.sks-keyservers.net
~/.gnupg/dirmngr.conf
keyserver hkp://pool.sks-keyservers.net
重启gpg-agent
$ gpg-connect-agent reloadagent /bye
配置/etc/makepkg.conf
MAKEFLAGS="-j5"
BUILDDIR=/tmp/makepkg
开始编译
$ makepkg -s
进入到menuconfig的界面后,用正在运行的内核的参数
$ zcat /proc/config.gz > /tmp/makepkg/linux-custom/src/linux-4.7/config.running
$ zcat /proc/config.gz > ~/linux-custom/src/linux-4.7/config.running #如果makepkg没有配置使用/tmp作为BUILDDIR的话
然后 load 这个config.running文件
menuconfig 里面的
General setup --->
(-CUSTOM) Local version - append to kernel release
[ ] Automatically append version information to the version string
其它内核参数要修改的话可以参考一下金步国的Linux-4.4-x86_64 内核配置选项简介
配置好内核参数之后save 为 .config 再exit就会开始编译 ,最后生成了3个文件
linux-custom-docs-4.7-1-x86_64.pkg.tar.xz
linux-custom-headers-4.7-1-x86_64.pkg.tar.xz
linux-custom-4.7-1-x86_64.pkg.tar.xz
安装
pacman -U linux-custom-docs-4.7-1-x86_64.pkg.tar.xz linux-custom-headers-4.7-1-x86_64.pkg.tar.xz linux-custom-4.7-1-x86_64.pkg.tar.xz
grub要更新一下
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
看有没有检测到新的内核