编译自己的Ubuntu内核
很多时候我们在使用Ubuntu的时候,想修改一下内核配置,然后编译,安装到Ubuntu中。这也是进行Ubuntu内核开发的前提。
获取当前Ubuntu对应代码
有很多方法可以获得Ubuntu内核代码,但是下面两种非常方便。
uname -r显示当前内核的版本号,apt-get source则用来获取package的source code:
apt-get source linux-image-$(uname -r)

另一种方法是使用git,每个发行版的内核库都会在kernel.ubuntu.com找到。如果想下载,只需要git clone一个库到本地即可:
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-<release codename>.git
其中release codename通过lsb_release -a获取,比如Ubuntu 16.04的Codename为xenial。
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
Codename: xenial
PS:从实际使用来看,apt-get source的方式更方便,也不容易出错,获取的内核代码和当前使用的是同一个版本。
编译环境配置
如果需要编译内核,还需要安装一个package。可以使用如下命令:
sudo apt-get build-dep linux-image-$(uname -r)
修改内核配置
整个编译过程使用的配置文件分布在若干子配置文件中,使用如下命令可以将这些配置文件集中,调用menuconfig进行修改。
使用chmod解决部分脚本可执行权限问题,
chmod a+x debian/rules
chmod a+x debian/scripts/*
chmod a+x debian/scripts/misc/*
fakeroot debian/rules clean
fakeroot debian/rules editconfigs # you need to go through each (Y, Exit, Y, Exit..) or get a complaint about config later
编译内核
进入内核代码的根目录,执行如下命令:
fakeroot debian/rules clean
# quicker build:
fakeroot debian/rules binary-headers binary-generic binary-perarch
# if you need linux-tools or lowlatency kernel, run instead:
fakeroot debian/rules binary
如果编译成功,在根目录下会生成若干.deb包。
如下是4.4.0-57-generic内核在AMD64系统上生成的.deb包:

安装内核镜像
使用dpkg -i安装若干.deb文件到系统中,然后重启:
sudo dpkg -i linux*4.4.0-57*.deb
sudo reboot
Debug符号表
有时进行Debug需要符号表,这就需要在编译的时候进行配置。首先需要安装pkg-config-dgbsym,然后在执行编译binary-*的时候增加’skildbg=false’:
sudo apt-get install pkg-create-dbgsym
fakeroot debian/rules clean
fakeroot debian/rules binary-headers binary-generic binary-perarch skipdbg=false
删除Ubuntu内核
如果部分内核不需要,可以选择删除。需要先查看当前使用的内核版本:
uname -a可以获取当前内核版本号。
在Ubuntu内核镜像包含了以下的包。
- linux-image-: 内核镜像
- linux-image-extra-: 额外的内核模块
- linux-headers-: 内核头文件
首先检查系统中安装的内核镜像:
dpkg --list|grep linux-image
dpkg --list|grep linux-headers
输出如下结果:
al@al:~/data/ubuntu-kernel$ dpkg --list|grep linux-image
ii linux-image-3.13.0-105-generic 3.13.0-105.152 amd64 Linux kernel image for version 3.13.0 on 64 bit x86 SMP
rc linux-image-3.13.0-32-generic 3.13.0-32.57 amd64 Linux kernel image for version 3.13.0 on 64 bit x86 SMP
ii linux-image-4.4.0-57-generic 4.4.0-57.78 amd64 Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii linux-image-extra-3.13.0-105-generic 3.13.0-105.152 amd64 Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
rc linux-image-extra-3.13.0-32-generic 3.13.0-32.57 amd64 Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
ii linux-image-extra-4.4.0-57-generic 4.4.0-57.78 amd64 Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP
ii linux-image-generic 4.4.0.57.60 amd64 Generic Linux kernel image
al@al:~/data/ubuntu-kernel$ dpkg --list|grep linux-headers
ii linux-headers-4.4.0-57 4.4.0-57.78 all Header files related to Linux kernel version 4.4.0
ii linux-headers-4.4.0-57-generic 4.4.0-57.78 amd64 Linux kernel headers for version 4.4.0 on 64 bit x86 SMP
ii linux-headers-generic 4.4.0.57.60 amd64 Generic Linux kernel headers
在列出的内核镜像中,你可以移除一个特定的版本(比如3.13.0-105和3.13.0-32)。
sudo apt-get purge linux-image-3.19.0-15
这就会将3.19.0-15相关的内核模块删除。通过下面dpkg --list再验证如下:
dpkg --list|grep linux-headers
还可以通过sudo update-grub2来更新grub列表。
参考资料:
BuildYourOwnKernel:https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel
KernelGitGuide:https://wiki.ubuntu.com/Kernel/Dev/KernelGitGuide
编译自己的Ubuntu内核的更多相关文章
- 编译、裁剪、安装、删除 Ubuntu内核和模块管理
一.下载最新内核文件 地址:http://www.kernel.org,一般下载Full Source版本. 下载完毕后,放到任意文件夹中,使用命令: tar jxvf linux-x.x.x.tar ...
- 编译Android源代码与内核总结
这些天花了些时间自己下载了android源代码来编译,当中走了一些弯路导致耗了些时间,如今又一次梳理总结下,让有同样想法的人自己编译的时候能少走些弯路,官方指导文档在http://source.and ...
- 【Android 系统开发】 编译 Android文件系统 u-boot 内核 并烧写到 OK-6410A 开发板上
博客地址 : http://blog.csdn.net/shulianghan/article/details/40299813 本篇文章中用到的工具源码下载 : -- ok-6410A 附带的 A ...
- Centos7编译4.7.2内核
由于想要编译kvm-kmod,编译的时候提示内核版本太低,所以就不得不升级下linux内核,目前最新版内核是4.7.2,编译内核并不是一件很难的事,但是这么久没编译过,还是有必要记录下这一过程. 首先 ...
- 编译Linux-2.6.23内核中遇见的错误
编译linux-2.6.23 错误[1]: elf_x86_64: 没有那个文件或目录 原因是 gcc 4.6 不再支持 linker-style 架构.在 arch/x86/vdso/Makefil ...
- [转载]Linux 环境下编译 0.11版本内核 kernel
最近在看<.如果Clobber/Modify 为空,则其前面的冒号(:)必须省略. 2.如果Output,Input,Clobber/Modify都为空,Output,Input之前的冒号(:) ...
- <摘录>Linux 环境下编译 0.11版本内核 kernel
系统环境:Fedora 13 + gcc-4.4.5 最近在看<linux内核0.11完全注释>一书,由于书中涉及汇编语言的地方众多,本人在大学时汇编语言学得一塌糊涂,所以实在看不下去了, ...
- (10)ubuntu内核源码树
ubuntu内核源码树目录: root@ubuntu:/lib/modules/3.13.0-32-generic/build#
- Suse环境下编译linux-2.6.24内核
Suse环境下编译linux-2.6.24内核 1.下载linux-2.6.24内核源码: https://mirrors.edge.kernel.org/pub/linux/kernel/v2.6/ ...
随机推荐
- scikit-learn一般实例之七:使用多输出评估器进行人脸完成
本例将展示使用多输出评估期来实现图像完成.目标是根据给出的上半部分人脸预测人脸的下半部分. 第一列展示的是真实的人脸,接下来的列分别展示了随机森林,K近邻,线性回归和岭回归对人脸下半部分的预测. # ...
- ASP.NET Core Kestrel部署HTTPS
ASP.NET Core配置 Kestrel部署HTTPS.现在大部分网站已经部署HTTPS,大家对于安全越来越重视. 今天简单介绍一下ASP.NET Core 部署HTTPS,直接通过配置Kestr ...
- Xcode7.1环境下上架iOS App到AppStore 流程③(Part 三)
前言部分 part三 部分主要讲解 Xcode关联绑定发布证书的配置.创建App信息.使用Application Loader上传.ipa文件到AppStore 一.Xcode配置发布证书信息 1)给 ...
- EC笔记:第三部分:14、在资源管理类中小心Copying行为
场景 上一节实现了智能指针,其中的拷贝构造函数和赋值运算符是通过增加/减少指针的引用计数来操作的.但是如果是管理一个独占资源呢?我们希望在一个资源使用时被锁定,在使用完毕后被释放. #include ...
- px-rem px转换为rem的工具
将px转换为rem的工具,github地址:https://github.com/finance-sh/px-rem 将px转换为rem的工具 怎样转换静态文件 安装: npm install px- ...
- css_03之文本、浮动
1.字体属性:①字体格式:font-family:取值:“microsoft yahei”/Arial……:②字体大小:font-size:取值:pt/px:③字体加粗:font-weight:取值: ...
- Arcmap中加载互联网地图资源
本文转载自:http://blog.3snews.net/space.php?uid=6955280&do=blog&id=67981 前一段时间想在Arcmap中打开互联网地图中的地 ...
- 360安全卫士造成Sharepoint文档库”使用资源管理器打开“异常
备注:企业用户还是少用360为妙 有客户反馈:部门里的XP SP2环境客户机全部异常,使用资源管理器打开Sharepoint文档库,看到的界面样式很老土,跟本地文件夹不一样 ...
- Android Weekly Notes Issue #229
Android Weekly Issue #229 October 30th, 2016 Android Weekly Issue #229 Android Weekly笔记, 本期内容包括: 性能库 ...
- android Intent介绍
Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 ...