本文为原创,转载请注明: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. loadrunner 脚本优化-参数化之Parameter List参数取值

    脚本优化-参数化之Parameter List参数取值 by:授客 QQ:1033553122 参数取值选项 Select next row Update value on 以上两个选项是改变参数化取 ...

  2. ImportError: No module named simplejson.scanner

    一.出现ImportError: No module named simplejson.scanner,是没有安装simplejson,安装一下就好了. 安装指令:python setup.py in ...

  3. 遍历结构体内部元素和值(Name and Value)

    代码: DataStruct.MessageStruct ms = new DataStruct.MessageStruct();//实例化结构体   //遍历结构体  foreach (System ...

  4. A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse. No Java virtual machine was found after searching the following locations: /usr/local/eclipse/

    linux系统下jdk是已经安装好的情况之下软件出现 A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be av ...

  5. c/c++ 哈希表 hashtable

    c/c++ 哈希表 hashtable 概念:用key去查找value 实现hash函数有很多方法,本文用除留余数法. 除留余数法的概念: 取一个固定的基数的余数,注意不能用偶数,用偶数的话,分布会不 ...

  6. LeetCode算法题-Ransom Note(Java实现)

    这是悦乐书的第212次更新,第225篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第80题(顺位题号是383).给定一个任意赎金票据字符串和另一个包含所有杂志字母的字符串 ...

  7. May 31. 2018 Week 22nd Thursday

    The good seaman is known in bad weather. 惊涛骇浪,方显英雄本色. As we all know, the true worth of a person is ...

  8. March 01st, 2018 Week 9th Thursday

    Let bygones be bygones. 过去的就让它过去吧. What happened has happened, it cannot be undone, so just leave it ...

  9. 《Java大学教程》—第18章 高级图形编程

    自测题:1.    在图形应用程序中为用户提供选择的多种方式:P433下拉菜单(pull-down menu).弹出式菜单(pop-up menu).对话框窗口(dialogue window).单选 ...

  10. HIVE配置错误信息

    原因:版本问题 解决方法:cp /root/hive/lib/当前的jlinexx.jar /root/hadoop/share/hadoop/yarn/lib