本文为原创,转载请注明:http://www.cnblogs.com/tolimit/

下载内核源码

  有两种方式,一种方式是直接从官网:https://www.kernel.org/直接下载,另一种方式是通过git进行下载。

  首先,在官网内核版本分为三种:

  • mainline:主线版本,最新的
  • stable:稳定版本
  • longterm:长期支持版本

  对于内核版本后面有个rc的,表示这个版本开始不会往里面添加新的功能和内容,只会在其基础上解决bug(有些驱动除外)。

  如果你搞不懂这几个版本区别,就下载一个stable版本准没错。

  现在我们着重说说如何通过git进行下载内核源码:

  没有安装git的先安装git,命令如下

sudo apt-get install git

  之后新建一个目录用于存放获取的linux内核源码,进入到该目录下,执行如下命令来获取最新的linux内核版本

git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git

  这样就可以直接把内核源码下载到所在目录下,很方便。

注:

  如果需要下载的不是当前最新版本的内核,也可以通过git进行下载其他版本的内核源码,不过在下载其他版本的内核源码的前提是已经通过以上git命令下载过内核源码。

  首先,当通过以上git命令下载好内核源码后,应该会有个linux-stable目录,先进入此目录中,然后执行如下命令查看其他内核源码版本列表

git branch -a

  然后通过以下命令切换到其他内核源码版本的分支

git checkout 版本名称(在git branch中的列表中的名称)

  这样就可以切换到其他版本的linux内核源码了。切换后就直接是目标版本的源码了,也就是说,当执行上面的命令时,git会把其他版本中内容不同的文件替换到本地上,就不用再重新下载一次内核源码了。

配置内核

  下载完成后,通过如下命令可以将当前系统使用的内核配置文件复制到我们下载的最新内核源码目录中,我们要使用这个配置文件进行编译内核

cp /boot/config-x.xx.xxxx-generic  下载的源码目录/.config

  如果需要修改配置,可通过

make menuconfig

  进行修改配置,不过对于menuconfig,好像还会需要其他的库,我印象是ncurses库,如果需要则通过apt-get libncurses5-dev安装这个库即可。

注:

  如果不想使用当前系统使用的配置文件,内核中也提供了不同平台默认的配置文件,这些配置文件放在:

内核源码目录/arch/目标平台类型/configs/

  如果你编译的是arm版本的内核,那目标平台类型就是arm,如果编译的是x86版本的内核,目标平台类型就是x86。在这个目录里,那些默认的配置文件格式一般为XXXXX_defconfig,找到对应的默认配置后,使用命令将其放到内核源码目录下并改名为.config

cp XXXXX_defconfig 内核源码目录/.config

  内核源码目录下的.config是内核编译的基础,其注明了哪些模块需要编译哪些模块不需要编译,又有哪些模块需要编译成模块(以模块进行加载,并不加入到内核镜像中),编译时就是按照里面的列表进行编译的。

编译内核

  先安装必要的工具:

sudo apt-get install build-essential

  在内核源码目录中依次执行以下命令:

make -jx(x是编译时使用的线程数量,如-j2或-j3等。使用线程能加快编译速度)
make modules_install (把安装modules到/lib/modules/目录中)
make bzImage (将内核编译成bzImage类型的内核)
make install (安装内核)

  整个过程会比较久,我大概编译了2,3个小时(虚拟机只配了一个CPU。。。),在编译过程中有可能使用旧的配置文件会导致编译失败,这时可以使用内核源码中默认的配置文件试试。

  make install帮我们做了引导所需要做的工作,基本上make install后重启就直接进入到最新的内核中了,当然,这部分工作我们也可以手动去做,接下来我们说说如何去做引导这部分所需要的工作。

  

  第一步,我们要将编译完成的bzImage复制到/boot/中,并改个名字,比如我的内核版本是4.2.0-rc1,我执行的命令就是

cp 内核源码目录/arch/x86/boot/bzImage /boot/vmlinuz-4.2.-rc1

  注意编译好的bzImage保存的位置是在内核源码目录/arch/目标平台类型/boot/中,我这里的目标平台类型是x86。

  第二步,将内核源码目录下的System.map文件复制到/boot/中,同样需要改个名字:

cp 内核源码目录/System.map /boot/System.map-4.2.-rc1

  

  第三步,生成新版本的initrd.img文件

cd /lib/modules/4.2.-rc1/
update-initramfs -c -k 4.2.-rc1

  第四步,让grub引导自动查找新内核

update-grub

  最后重启一下,选择自己的新内核进入就可以了,如果希望系统自动进入最新编译的内核,则需要修改grub的配置文件,其配置文件是/boot/grub/grub.cfg,修改此文件中的set default="X"(X是最新内核对应在grub中的编号)。

给ubuntu换内核的更多相关文章

  1. 删除ubuntu旧内核

    ubuntu的内核经常升级,而老内核并不自动卸载.时间长了,就有一大堆内核垃圾,需要我们手动去清理. 先用uname -a 查看当前内核版本: xzc@xzc-HP-ProBook-4446s:~$ ...

  2. linux 解决Ubuntu编译内核uImage出现问题“mkimage” command not found - U-Boot images will not be built问题

    解决Ubuntu编译内核uImage出现问题“mkimage” command not found - U-Boot images will not be built问题 http://www.lin ...

  3. Ubuntu 更换内核

    Ubuntu 更换内核步骤: 下载内核源码,例如wget https://git.kernel.org/torvalds/t/linux-4.17-rc2.tar.gz 按照需要的环境,sudo ap ...

  4. ubuntu升级内核后vmware-player启动失败

    在虚拟机软件中,vmware player是对硬件支持很好的,通过它可以很方便的使用网银.单片机开发等等工作.但是最近ubuntu每次升级内核后,vmware都会启动失败,提示:Before you ...

  5. ubuntu下内核源码树的建立

    参考的博文: http://www.360doc.com/content/12/0604/12/8890849_215794364.shtml http://www.cnblogs.com/pd520 ...

  6. Ubuntu升级内核

    看到微软开源.兼容.豁达,很高兴,今天研究一下Docker,查看Ubuntu内核版本,发现2.3有点低,不符合当前版本. 最低内核版本要求3.10. 升级Ubuntu内核. 首先 下载内核 网站htt ...

  7. windows7使用Source insight上远程修改ubuntu共享内核源码

    由于本人阅读喜欢使用source insight.前段时间接触了linux核代码,而这份代码只能放在ubuntu服务器上编译,刚开始的时候是在windows上修改,完了之后再copy到服务器上去编译, ...

  8. Ubuntu 升级内核

    1. 升级下 sudo apt-get update && sudo apt-get dist-upgrade && sudo apt-get autoremove 2 ...

  9. ubuntu 换源

    经过自己一番折腾后,发现用这个方法换源最简单.直接. sudo vi /etc/apt/sources.list 把sources.list里面的内容全部替换为一下内容 deb http://mirr ...

随机推荐

  1. 关于python当中的@修饰符的浅析

    https://blog.csdn.net/class_brick/article/details/81170697     要了解python中@装饰器的作用,首先要记住这么几点: 1. 装饰器符号 ...

  2. JDCP连接池连接数据库报错:java.lang.AbstractMethodError: com.mysql.jdbc.Connection.isValid(I)Z

    完整报错是这样的: 小编的情况: 使用mysql的jar包版本: 使用的jdcp的相关jar包版本: 报错的原因: mysql的jar包版本过低. 更新到最新版mysql的jar包即可. 小编更新后的 ...

  3. error 2593 operator << 不明确的可能的解决方法

    编译Martinez算法时遇到该问题,提示重载的<<操作符调用不明确. 解决方法为:在cpp文件中将重载的该操作符的实现前添加完整的命名空间路径.

  4. SQL学习总结-思维导图

  5. 《高性能JavaScript》--读书笔记

    第一章 加载和运行 延迟脚本 defer 该属性表明脚本在执行期间不会影响到页面的构造,脚本会先下载但被延迟到整个页面都解析完毕后再运行.只适用于外部脚本 <script src="j ...

  6. [20180926]查询相似索引.txt

    [20180926]查询相似索引.txt --//有时候在表上建立索引比如A,B字段,可能又建立B字段索引,甚至A字段索引以及B,A字段索引,或者还建立C,A字段索引,--//需要有1个脚本查询这些索 ...

  7. 变量查询,运算符优先级,if语句

    1.三个关联表的查询 use 新建 create table teacher(tcode int primary key,lesson char(10),age int,birth datetime) ...

  8. realloc 用方法

    realloc 用方法 void* realloc(void*, n) 根据n的大小,如果n比较小,就沿用原来的内存地址(也就是返回的地址就是原来的地址),在原来地址的内存空间的最后面,加上n大小的内 ...

  9. 6. svg学习笔记-路径

    路径相比于多边形<polygon>元素具有更强绘图能力,<polygon>元素可以绘制任意的多边形,而路径可以绘制任意的轮廓线,是线段,曲线,圆弧的组合形式.svg中可以使用& ...

  10. Windows 系统下 mysql workbench 的安装及环境配置

    1.MySQL的官网地址:https://www.mysql.com/ 2,选择DOWNLOADS 3.选择community 再MySQL workbench 4.安装MySQL workbench ...