编译新内核

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
ReverseOnce
帖子: 106
注册时间: 2015-08-29 21:05

编译新内核

#1

帖子 ReverseOnce » 2018-05-11 21:14

虽然没发觉4.15有问题,而且用着还不错,但它变成了eol,只有迁移,不然将来出事就不好处理了。ubuntu官方编译的版本老是不发布,有点等不及了,到kernel官网下载了4.16.8:

代码: 全选

https://www.kernel.org/
再到ubuntu的主线kernel站点下载补丁:

代码: 全选

http://kernel.ubuntu.com/~kernel-ppa/mainline/daily/current/
这6个补丁都要下全:

代码: 全选

0001-base-packaging.patch
0002-UBUNTU-SAUCE-add-vmlinux.strip-to-BOOT_TARGETS1-on-p.patch
0003-UBUNTU-SAUCE-tools-hv-lsvmbus-add-manual-page.patch
0004-UBUNTU-SAUCE-no-up-disable-pie-when-gcc-has-it-enabl.patch
0005-debian-changelog.patch
0006-configs-based-on-Ubuntu-4.17.0-0.1.patch
将4.16.8和6个补丁保存到~/Downloads/KernelSource目录,并解压linux-4.16.8.tar.xz文件至前述目录。准备就绪以后,可以开始给kernel打补丁。
打开终端,切换到KernelSource目录:

代码: 全选

cd ~/KernelSource
建一个软连接:

代码: 全选

ln -s linux-4.16.8 linux-4.16.8-compile
切换到软连接目录:

代码: 全选

cd linux-4.16.8-compile
试验第一个补丁正常与否:

代码: 全选

patch -p1 < ~/Downloads/KernelSource/0001-base-packaging.patch --dry-run
无错误输出的话,就可以应用了:

代码: 全选

patch -p1 < ~/Downloads/KernelSource/0001-base-packaging.patch
换一下补丁名称,照此方法将其他5个补丁全部打完。
清除可能的残余文件:

代码: 全选

make clean
make distclean
拷贝当前的配置文件:

代码: 全选

cp /boot/config-`uname -r` .config
安装编译所需的软件包:

代码: 全选

sudo apt install bison flex libssl-dev libncurses5-dev kernel-package
运行kernel配置菜单,用键盘上的箭头键选择”Load“选项,加载刚才拷贝的配置文件,随后按Enter键返回主菜单,接下来多花点时间配置,最后保存退出。

代码: 全选

make menuconfig
load.png
config.png
开始编译:

代码: 全选

make-kpkg clean

代码: 全选

fakeroot make-kpkg --initrd --append-to-version=-which_you_like kernel_image kernel_headers 
注:将which_you_like换成自己偏爱的标识符。
编译完成后进行安装:

代码: 全选

cd ..
sudo dpkg -i *.deb
sudo update-grub
reboot
重启验证:

代码: 全选

uname -a
uname -r
dpkg --get-selections | grep linux
kernel-version.png
上次由 ReverseOnce 在 2018-05-14 10:48,总共编辑 2 次。
头像
astolia
论坛版主
帖子: 6396
注册时间: 2008-09-18 13:11

Re: 编译新内核

#2

帖子 astolia » 2018-05-12 0:27

虽然你写了这么大一篇,但其中充斥着错误与意义不明的举动,实在让人看不下去
ReverseOnce 写了:虽然没发觉4.15有问题,而且用着还不错,但它变成了eol,只有迁移,不然将来出事就不好处理了。
第一句就在搞笑。eol的内核又不是不准人继续打补丁了。再说了,哪个正式版本的内核获得的补丁不是从代码仓库的最新版往回移植的。内核组的人不干,ubuntu的人来干就是了。

ReverseOnce 写了:https://www.kernel.org/[/code]
再到ubuntu的主线kernel站点下载补丁:

代码: 全选

http://kernel.ubuntu.com/~kernel-ppa/mainline/daily/current/
这6个补丁都要下全:
看来你是从来没看过这些个补丁到底补了些什么。ubuntu自己对内核的修改(如apparmor)又不含在这些补丁里,实际上除了禁止pie的的那个,其他的都没必要。
ReverseOnce 写了:建一个软连接:

代码: 全选

ln -s linux-4.16.8 linux-4.16.8-compile
切换到软连接目录:

代码: 全选

cd linux-4.16.8-compile
建软连接意义何在?
ReverseOnce 写了:清除可能的残余文件:

代码: 全选

make clean
make distclean
真要照你这个流程来,这里是没有什么残余文件好清除的
ReverseOnce 写了: 开始编译:
代码:
make-kpkg clean
同上
ReverseOnce 写了:fakeroot make-kpkg --initrd --append-to-version=-which_you_like kernel_image kernel_headers
用make-kpkg来编译已经是不推荐的做法了。现在一般直接用make deb-pkg。make-kpkg打的包结构上有些差异,在特殊情况下会导致第三方模块(比如N卡专有驱动)编译时出错
ReverseOnce 写了: 编译完成后进行安装:

代码: 全选

cd ..
sudo dpkg -i *.deb
sudo update-grub
reboot
update-grub这步完全多余。而且你说是安装,却偷偷塞了个reboot进去,真有新人照着输进去丢失了未保存的工作你负责吗?
上次由 astolia 在 2018-05-12 13:43,总共编辑 3 次。
头像
速腾1994
论坛版主
帖子: 17379
注册时间: 2008-11-01 20:43
系统: Arch+gnome

Re: 编译新内核

#3

帖子 速腾1994 » 2018-05-12 11:31

二楼怼的好!近乎于nuke
ReverseOnce
帖子: 106
注册时间: 2015-08-29 21:05

Re: 编译新内核

#4

帖子 ReverseOnce » 2018-05-12 14:37

1.eol意味着此版本不再维护,也就是说,新的更新和错误修复不可得。ubuntu是发行版,不可能为一个eol的kernel提供专门维护。考虑及时的kernel升级是正道,不应该磨蹭。
2.没多少人从理论上能说清楚米和水到底补了什么,但并不妨碍吃饭和喝水。很明显,实际使用比空洞无物的言辞有效,这里给出的是打补丁的方法,不能打会报错,绿色无公害。
3.软连接支持目录,跨分区和文件系统,占用空间非常小,复制、移动、删除它不会对目标目录或文件产生影响。“make clean”和“make distclean”是编译之前的习惯,习惯成自然,比发生错误后返工好,“update-grub”同样如此,可以避免莫名意外。
4.软件的开发和使用是有规范的,不推荐的方法通常标注为“deprecated”,说不推荐要有依据,口说无凭,给出推荐或不推荐的参考链接更有说服力。
5.为验证升级能否正常工作,使用“reboot”命令重启系统是正常操作,这是常识,额外提醒纯属多余。
头像
astolia
论坛版主
帖子: 6396
注册时间: 2008-09-18 13:11

Re: 编译新内核

#5

帖子 astolia » 2018-05-12 16:08

ReverseOnce 写了:1.eol意味着此版本不再维护,也就是说,新的更新和错误修复不可得。ubuntu是发行版,不可能为一个eol的kernel提供专门维护。考虑及时的kernel升级是正道,不应该磨蹭。
2.没多少人从理论上能说清楚米和水到底补了什么,但并不妨碍吃饭和喝水。很明显,实际使用比空洞无物的言辞有效,这里给出的是打补丁的方法,不能打会报错,绿色无公害。
3.软连接支持目录,跨分区和文件系统,占用空间非常小,复制、移动、删除它不会对目标目录或文件产生影响。“make clean”和“make distclean”是编译之前的习惯,习惯成自然,比发生错误后返工好,“update-grub”同样如此,可以避免莫名意外。
4.软件的开发和使用是有规范的,不推荐的方法通常标注为“deprecated”,说不推荐要有依据,口说无凭,给出推荐或不推荐的参考链接更有说服力。
5.为验证升级能否正常工作,使用“reboot”命令重启系统是正常操作,这是常识,额外提醒纯属多余。
1. 暴露了你对内核的版本机制和非滚动发行版的包维护机制一无所知。18.04还太新,看不大出来,拿16.04的4.13内核做例子。4.13内核在去年11月就进入了eol状态,这是ubuntu上内核的更新日志 http://changelogs.ubuntu.com/changelogs ... /changelog ,你觉得在11月之后的各种更新是从哪里来的?
2. 作为一篇教程向的文章,最忌讳的就是你这种以其昏昏使人昭昭的态度
3. 你说的只是对于软链接本身而言。你进到一个软链接后的目录里做任何修改,和进原来的目录操作没有任何效果上的区别,纯粹是多此一举。不知道你这个成了自然的习惯是哪里来的?
4. 你也知道用“通常”啊。我抛弃make-kpkg前,用了它近10年,它有什么问题我清楚得很。都是长期使用下来的经验积累,又不是从哪个链接上读来的纸上谈兵。我上面已经提过它存在的问题了,这就是我的依据,如果你看不懂,我还可以再举一点:现在的make-kpkg不支持生成linux-libc-dev包,会导致你实际使用和内核和系统中安装开发头文件版本不一致,对于那些在内核更新后需要重新编译的第三方内核模块,这种不一致有怎样的风险我觉得不用多说了。
5. 我觉得一个本身干净的环境去make clean是浪费时间也是常识,安装内核deb包后会自动执行update-grub还是常识,非要手工干一遍同样纯属多余。

觉得你这种自以为是的语气有点似曾相识,翻了翻发帖历史,果然是当年那个振振有辞“任何对内核配置的改动均需要重新编译”的人
ReverseOnce
帖子: 106
注册时间: 2015-08-29 21:05

Re: 编译新内核

#6

帖子 ReverseOnce » 2018-05-12 17:31

astolia 写了:
ReverseOnce 写了:1.eol意味着此版本不再维护,也就是说,新的更新和错误修复不可得。ubuntu是发行版,不可能为一个eol的kernel提供专门维护。考虑及时的kernel升级是正道,不应该磨蹭。
2.没多少人从理论上能说清楚米和水到底补了什么,但并不妨碍吃饭和喝水。很明显,实际使用比空洞无物的言辞有效,这里给出的是打补丁的方法,不能打会报错,绿色无公害。
3.软连接支持目录,跨分区和文件系统,占用空间非常小,复制、移动、删除它不会对目标目录或文件产生影响。“make clean”和“make distclean”是编译之前的习惯,习惯成自然,比发生错误后返工好,“update-grub”同样如此,可以避免莫名意外。
4.软件的开发和使用是有规范的,不推荐的方法通常标注为“deprecated”,说不推荐要有依据,口说无凭,给出推荐或不推荐的参考链接更有说服力。
5.为验证升级能否正常工作,使用“reboot”命令重启系统是正常操作,这是常识,额外提醒纯属多余。
1. 暴露了你对内核的版本机制和非滚动发行版的包维护机制一无所知。18.04还太新,看不大出来,拿16.04的4.13内核做例子。4.13内核在去年11月就进入了eol状态,这是ubuntu上内核的更新日志 http://changelogs.ubuntu.com/changelogs ... /changelog ,你觉得在11月之后的各种更新是从哪里来的?
2. 作为一篇教程向的文章,最忌讳的就是你这种以其昏昏使人昭昭的态度
3. 你说的只是对于软链接本身而言。你进到一个软链接后的目录里做任何修改,和进原来的目录操作没有任何效果上的区别,纯粹是多此一举。不知道你这个成了自然的习惯是哪里来的?
4. 你也知道用“通常”啊。我抛弃make-kpkg前,用了它近10年,它有什么问题我清楚得很。都是长期使用下来的经验积累,又不是从哪个链接上读来的纸上谈兵。我上面已经提过它存在的问题了,这就是我的依据,如果你看不懂,我还可以再举一点:现在的make-kpkg不支持生成linux-libc-dev包,会导致你实际使用和内核和系统中安装开发头文件版本不一致,对于那些在内核更新后需要重新编译的第三方内核模块,这种不一致有怎样的风险我觉得不用多说了。
5. 我觉得一个本身干净的环境去make clean是浪费时间也是常识,安装内核deb包后会自动执行update-grub还是常识,非要手工干一遍同样纯属多余。

觉得你这种自以为是的语气有点似曾相识,翻了翻发帖历史,果然是当年那个振振有辞“任何对内核配置的改动均需要重新编译”的人
1.ubuntu的kernel主线站点早在去年就停止了对4.13的试验编译。所谓英特尔微码(intel-microcode)是intel为了防止spectre和meltdown而推出的补救措施。别提4.13还好,提4.13恰恰是搬起石头砸自己的脚,自以为是的昭昭,往往更使人昏昏。
2.至于说到什么教程不教程的,那也要看具体对象,不用无关的人来武断定义和指手画脚。按照整个流程做下来,不报错、顺利完成编译和安装,机器重启后能流畅运行,说不是教程也等于零。
3.软连接不用可以随意删除,在其他目录和分区也能进行操作,这里只是展示了一下其简单的使用效果。按道理来说,系统提供的功能都是有目的的,想用就用,话唠才是最烦人的。
4.不用拿年限和老资格出来显摆,兔子吃了一辈子青草,它也说不清青草的成份和优劣。显摆年限和老资格的,除了年限和老资格以外,就没有其他值得说道说道的长处了,这也算是一种人生经验。
5.什么叫本身干净?这言论既幼稚又好笑。就算“本身”干净,那在编译的过程中出错中断怎么办?要拿同一个源代码到其他的机器上去全新编译又怎么办?还是要“make clean”和“make distclean”。
6.以前说过什么确实不太记得了,赖得去翻老帖子,没闲情逸致。至于“任何对内核配置的改动均需要重新编译”这句话,建议结合上下文来解读,避免不必要的歪曲而产生误导。
头像
astolia
论坛版主
帖子: 6396
注册时间: 2008-09-18 13:11

Re: 编译新内核

#7

帖子 astolia » 2018-05-12 17:39

1. 呵呵,我把更新日志都给发出来了还在嘴硬瞎扯,两年多过去了果然一点都没变。建议你去读一下 https://wiki.ubuntu.com/Kernel/MainlineBuilds ,看看http://kernel.ubuntu.com/~kernel-ppa/mainline是为什么而存在的
2. 原来你的追求就是编译不报错能跑起来,怪不得两年了没什么长进
3. 你嘴硬的功力估计已经到顶了,没长进也难怪
4. 很不幸,在下刚好养过兔子,有挑的情况下兔子知道挑好的吃。何必要再次暴露你是个没经验凭想象瞎说的人呢
5. 刚从压缩包里解压出来没编译过的状态就是干净,这不是常识吗?出错了真需要clean的时候再来呗。我还是两年多以前的态度,你要浪费自己的时间随意,别浪费别人的
6. 你现在弄明白内核启动参数、/proc/sys,/sys这些东西存在的意义了吗?
回复