Home
Categories
WIKI
Topic
User
LANGUAGE:
中文
English
内核定制 简单教程
Experiences and Insight
4460
views ·
12
replies ·
To
floor
Go
ExplosiveBattery
deepin
2018-04-24 20:16
Author
本帖最后由 ExplosiveBattery 于 2018-4-24 12:26 编辑
0.不论做什么,都建议你先进入deepin recovery,使用deepin clone备份好原有系统和boot
1.进入https://github.com/linuxdeepin/deepin-kernel,
自己
选择合适的Branch
,然后再下载zip,或者git等命令下载过来
教程里我就弄复杂点,目标:安装branch里面没有4.15.11-1内核
点commit,可以看到master branch已经正在开发
4.16~rc6-1~exp1
,
即表明之前版本是已经开发好了
2.安装必要的依赖:
sudo apt install build-essential kernel-package libncurses5-dev fakeroot bison flex libssl-dev qt5-default quilt gcc-自己gcc版本-plugin-dev
解压下载好的zip
PS:没准你的gcc版本太低,不符合你等会要编译的内核要求,可以直接上最新gcc
3.修改changelog
我们想要的是4.15.11-1,所以删除changelog前面一部分内容,直到“ linux (4.15.11-1) xxxxxxxxxxxxxxxxx "这行文字在开头第一行
4. 自动化处理前期步骤
进入解压目录执行 make -f debian/rules orig
他会先帮你把对应的内核orig.tar.xz下载过来,如果觉得下载速度太慢,修改rules中的URL、URL1,比如我看到怎么是从https://www.kernel.org/pub/linux/kernel下载,从国外网站下绝对没有国内快,所以我就把URL改成了URL1变量的值。你还可以选择改成其他kernel镜像URL。
下载后自动解压,并自动使用quilt打上patches补丁
我这里自动打补丁会出问题,因为我下载的是master分支,里面的patches是为最新版本准备的,所以我就去https://github.com/linuxdeepin/deepin-kernel/tree/8c71b9a7b6af2cdec5e0110f481e366675b005fe(这个网址从commit里面prepare to release 4.15.11-1进去找到)下载符合我这版本的patches,替换掉master中的patches文件夹,然后再执行 make -f debian/rules orig。
5.开始定制
cd ../orig/linux-4.15.11
编译有几种命令:
http://smilejay.com/2011/05/linux-kernel-configuration/
make menuconfig :: 源码根目录下生成 .config (没有会自动生成), .config中就是各个内核编译选项的选择状况.
make defconfig :: 根据当前系统的架构默认 .config 生成内核源码目录下的 .config (每个架构的配置文件: ex. arch/x86/configs/x86_64_defconfig)
make oldconfig :: 将已有的 .config 放到源码根目录下后执行, 目的是为了复用之前的内核编译选项的配置.
make xconfig :: 图形化配置, 需要在Xwindows中使用,并且依赖于QT
make localmodconfig :: 生成以正在使用的内核模块为对象的 .config
make config 基于文本的最为传统的配置界面,不推荐使用
我之前用的是默认内核,所以第一次配置自己的专属文件就有点麻烦,只好make xconfig打开图形界面来定制。以后有了从前定制过的配置文件就应该是make oldconfig
打开的图形界面就是一大推按钮,确定要开启的打上钩钩,需要编译成模块(模块会在必要的是时候自动被内核开启)就弄成一个点,不需要的直接关了,不要想着都打开或者模块,虽然这能保证你编译出来的内核在功能上一定最大可能适配你的电脑,但是这会导致编译过程很长很长,并且得到的东西非常大
参考https://blog.csdn.net/wdsfup/article/details/52302142 ,这blog中大部分正确,其余的自己去按照关键字去查,还有看窗口右下角的那堆英文介绍,看不懂的去google翻译(不要用baidu翻译,谢谢)。不要瞎关,比如我就遇到了最后触摸板不能用的问题。还有次是键盘不能用,后来我发现AT keyboard这个是要开启的,键盘问题就ok了。我第一次配置这个文件,每一条都看过去,不懂就去搜,emmm,用了10小时左右才配完一个大概
执行sudo dmesg 还有 sudo journalctl -p 3 -xb 我们重点要关照他们显示出来的这几个错误,如果你发现你配置完之后有问题,那么这里面的信息很重要。顺便说一句,有些错误解决起来很麻烦,我google好久也没招,反正系统能正常运行使用,就不管了。我试过从deepin原有内核make oldconfig来编译,使用得到的内核,发现也有这些错误,这说明我们配置水平已经可以了,应该不是因为我们的配置导致这些错误。比如dell电脑常见的Failed to init power state,这个就还涉及BIOS的版本。
我6700HQ的CPU,定制好以后编译需要十几分钟,如果你第一次编译选择直接从deepin原有内核上make oldconfig过来,emmm,那么最终效果会和deepin原有内核差不多,因为配置都差不对啊,而且编译的时间会有些长,勉强可以接受。
6. 如果要打包成deb(我....选了这个):
fakeroot make-kpkg --initrd --append-to-version=自己想要加上的字,建议不要中文,最终产生的文件会带上你这段文字作为文件名 kernel_image kernel-headers
普通使用make:
make && make install
上述命令都可以加上-j参数,来指定过程中最大线程数,我6700HQ的CPU(4核心,8线程),为了最快速度我都加上-j8。
..............................于是风扇就开始咆哮一段时间。
以上内容全凭记忆填写,并非实践操作现场
,emmmm,我的意思是,可能会漏掉什么,反正”问题不大“
如果你碰到其他问题emmmm,一开始解压的源码以及源码中的两个README文件和Google,是你最好的朋友
Reply
Like 0
Favorite
View the author
All Replies
zijinyise
deepin
2018-04-24 20:34
#1
大佬,不明觉厉
Reply
Like 0
View the author
Ligocut光剪视频剪辑软件
deepin
Backbone of ecological co-construction group
2018-04-25 00:11
#2
用记忆都能记得Git地址。。。
Reply
Like 0
View the author
nero28
deepin
2018-04-25 00:24
#3
這記憶力真好
Reply
Like 0
View the author
music_wei
deepin
2018-04-25 00:42
#4
学习一下 ,专业定制一下,说不定更快
Reply
Like 0
View the author
177******70
deepin
2018-04-25 03:53
#5
有什么好处吗?
Reply
Like 0
View the author
ExplosiveBattery
deepin
2018-04-25 04:38
#6
本帖最后由 ExplosiveBattery 于 2018-4-25 10:03 编辑
打了一堆字(不是在高级模式下),结果一个不小心,没保存全了没,
,刚想几个字概括一下,结果发现百度里面没怎么介绍定制内核的好处,好,我重新进高级模式打
说简单点:更好地让你机器硬件运行
说复杂点:
(0)deepin的内核是通用型内核,因为大家机器硬件不一样,比如有的人amd有人是intel,所以deepin的内核配置文件里面主要还是为了能够让系统在机器上正常运行。有些你机器支持的特性,它就可能不会开。有的硬件很少见,也不会开。而定制,需要你清除自己的机器硬件,尽可能开启自己机器特性,发挥他的性能或者更好的支持硬件,让一些不能正常运行的硬件运行。
(1)更快的系统运行:我记得内核可以选择IO调度算法的选择,内存页的处理........听不懂?你不合格!怕是常年window用户。
(2)更少的内存占用:由于可以删去不需要的功能和设备驱动, 通常定制的内核会比
GENERIC
使用的内存更少。 节省内核使用的内存之所以重要是因为内核必须常驻于物理内存中, 从而使应用程序能够用到更多的内存。 正因为这样, 对 RAM 较小的系统来说定制内核就更为重要了。
(3)更快地启动系统:因为内核只需要检测您系统上的硬件, 启动时所花费的时间将大大缩短。
有句话想说:(2)(3)是部分小白们最喜欢看到的,在我看来,从0到3越来越不重要。还有内核定制对(2)(3)的加成不大。
举个现实例子:
我笔记本一直觉得网卡信号不好,于是花了点大洋去淘宝买了个intel 9260ac换掉原来的出厂网卡,后来发现intel 9260ac这个硬件太“新”了,需要>=4.14.0版本内核提供支持,而当时deepin的内核版本还是4.9。我要想能够用上自己的无线网卡,就需要升级内核顺便把应该开的模块开起来,就是(0)中提到的“让一些不能正常运行的硬件能够运行”。同时去intel官网下载linux版本的驱动放到/lib/firmware,不过我发现这个驱动只能让网卡的wifi模块运行。直到最近一段时间我才https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git上面看到了9260 ac的蓝牙驱动,下过来放到/lib/firmware/intel下。问题完美解决,顺便安装一个blueman替换掉deepin自带的蓝牙管理器。
类似的网站还有https://bugs.launchpad.net/ubuntu/+source/linux-firmware 。
再说一遍,硬件上有问题,有两个命令很重要:
sudo dmesg 还有 sudo journalctl -p 3 -xb
为了能作为一个合格的编程手,我这次从0开始编号列点
Reply
Like 0
View the author
ExplosiveBattery
deepin
2018-04-25 04:39
#7
https://bbs.deepin.org/post/155660
有什么好处吗?
已经回答
Reply
Like 0
View the author
stone
deepin
2018-04-25 08:37
#8
操作不来。。。,学习还行
Reply
Like 0
View the author
rechardcatelemmon
deepin
2018-07-02 00:43
#9
Mark一下
Reply
Like 0
View the author
mhlan
deepin
2018-07-02 03:56
#10
我也想定制...但是怕技术不过关翻车了,所以还是没有作
Reply
Like 0
View the author
hodge
deepin
2018-11-06 05:38
#11
你好,我想问一下怎么把独显模块全关了,我的是AMD,目前启动后直接黑屏,怀疑是独显的问题,我在BIOS禁用独显也没用
Reply
Like 0
View the author
bingfengfeifei
deepin
2018-11-06 05:50
#12
我是不敢换了,今天在公司刚被折腾了。
如果手动编译更新了内核,是源里面没有的。而安装的软件里面有需要加载内核模块的,那这个软件很可能会因为在新内核加载不上内核模块,不能使用了。需要使用新的内核重新编译一遍这个软件。。
如果没有什么特殊需求,而且求稳定使用的用户,还是等官方吧。。
Reply
Like 0
View the author
Please
sign
in first
Featured Collection
Change
[Tutorial] deepin25 WSL Offline Installation Guide
UOS AI 2.8 Released! Three New Intelligent Agents & Major Evolution
Solid Q&A | deepin 25 Common Questions – The Immutable System Edition
New Thread
Popular Ranking
Change
How to fix grub boot menu that has disappeared?
Looking Deepin ci 25.2.0 Developer/Unstable repositories
Popular Events
More
0.不论做什么,都建议你先进入deepin recovery,使用deepin clone备份好原有系统和boot
1.进入https://github.com/linuxdeepin/deepin-kernel,自己选择合适的Branch,然后再下载zip,或者git等命令下载过来
教程里我就弄复杂点,目标:安装branch里面没有4.15.11-1内核
点commit,可以看到master branch已经正在开发4.16~rc6-1~exp1,即表明之前版本是已经开发好了
2.安装必要的依赖:
sudo apt install build-essential kernel-package libncurses5-dev fakeroot bison flex libssl-dev qt5-default quilt gcc-自己gcc版本-plugin-dev
解压下载好的zip
PS:没准你的gcc版本太低,不符合你等会要编译的内核要求,可以直接上最新gcc
3.修改changelog
我们想要的是4.15.11-1,所以删除changelog前面一部分内容,直到“ linux (4.15.11-1) xxxxxxxxxxxxxxxxx "这行文字在开头第一行
4. 自动化处理前期步骤
进入解压目录执行 make -f debian/rules orig
他会先帮你把对应的内核orig.tar.xz下载过来,如果觉得下载速度太慢,修改rules中的URL、URL1,比如我看到怎么是从https://www.kernel.org/pub/linux/kernel下载,从国外网站下绝对没有国内快,所以我就把URL改成了URL1变量的值。你还可以选择改成其他kernel镜像URL。
下载后自动解压,并自动使用quilt打上patches补丁 我这里自动打补丁会出问题,因为我下载的是master分支,里面的patches是为最新版本准备的,所以我就去https://github.com/linuxdeepin/deepin-kernel/tree/8c71b9a7b6af2cdec5e0110f481e366675b005fe(这个网址从commit里面prepare to release 4.15.11-1进去找到)下载符合我这版本的patches,替换掉master中的patches文件夹,然后再执行 make -f debian/rules orig。
5.开始定制
cd ../orig/linux-4.15.11
编译有几种命令:
http://smilejay.com/2011/05/linux-kernel-configuration/
make menuconfig :: 源码根目录下生成 .config (没有会自动生成), .config中就是各个内核编译选项的选择状况.
make defconfig :: 根据当前系统的架构默认 .config 生成内核源码目录下的 .config (每个架构的配置文件: ex. arch/x86/configs/x86_64_defconfig)
make oldconfig :: 将已有的 .config 放到源码根目录下后执行, 目的是为了复用之前的内核编译选项的配置.
make xconfig :: 图形化配置, 需要在Xwindows中使用,并且依赖于QT
make localmodconfig :: 生成以正在使用的内核模块为对象的 .config
make config 基于文本的最为传统的配置界面,不推荐使用
我之前用的是默认内核,所以第一次配置自己的专属文件就有点麻烦,只好make xconfig打开图形界面来定制。以后有了从前定制过的配置文件就应该是make oldconfig
打开的图形界面就是一大推按钮,确定要开启的打上钩钩,需要编译成模块(模块会在必要的是时候自动被内核开启)就弄成一个点,不需要的直接关了,不要想着都打开或者模块,虽然这能保证你编译出来的内核在功能上一定最大可能适配你的电脑,但是这会导致编译过程很长很长,并且得到的东西非常大
参考https://blog.csdn.net/wdsfup/article/details/52302142 ,这blog中大部分正确,其余的自己去按照关键字去查,还有看窗口右下角的那堆英文介绍,看不懂的去google翻译(不要用baidu翻译,谢谢)。不要瞎关,比如我就遇到了最后触摸板不能用的问题。还有次是键盘不能用,后来我发现AT keyboard这个是要开启的,键盘问题就ok了。我第一次配置这个文件,每一条都看过去,不懂就去搜,emmm,用了10小时左右才配完一个大概
执行sudo dmesg 还有 sudo journalctl -p 3 -xb 我们重点要关照他们显示出来的这几个错误,如果你发现你配置完之后有问题,那么这里面的信息很重要。顺便说一句,有些错误解决起来很麻烦,我google好久也没招,反正系统能正常运行使用,就不管了。我试过从deepin原有内核make oldconfig来编译,使用得到的内核,发现也有这些错误,这说明我们配置水平已经可以了,应该不是因为我们的配置导致这些错误。比如dell电脑常见的Failed to init power state,这个就还涉及BIOS的版本。
我6700HQ的CPU,定制好以后编译需要十几分钟,如果你第一次编译选择直接从deepin原有内核上make oldconfig过来,emmm,那么最终效果会和deepin原有内核差不多,因为配置都差不对啊,而且编译的时间会有些长,勉强可以接受。
6. 如果要打包成deb(我....选了这个):
fakeroot make-kpkg --initrd --append-to-version=自己想要加上的字,建议不要中文,最终产生的文件会带上你这段文字作为文件名 kernel_image kernel-headers
普通使用make:
make && make install
上述命令都可以加上-j参数,来指定过程中最大线程数,我6700HQ的CPU(4核心,8线程),为了最快速度我都加上-j8。
..............................于是风扇就开始咆哮一段时间。
以上内容全凭记忆填写,并非实践操作现场,emmmm,我的意思是,可能会漏掉什么,反正”问题不大“
如果你碰到其他问题emmmm,一开始解压的源码以及源码中的两个README文件和Google,是你最好的朋友