你们好,又碰面了,我是大家的同事全栈君。
2016.6.8
经过一个多礼拜的内核摧残,明天总算可以写下自己移植内核的一些心得,网上有好多博客峰会都有提到,然而这种又说的方法有些模糊,这儿我综合的几个博客在重新说下内核替换编译的步骤、以及怎样更新启动项grub。替换linux的内核一共有两种方法,第一种方法是下载官方kernel提供的源码包,进行编译替换;第二种直接下载内核安装包deb,进行升级替换。
下边分别从这两种方法进行一个说明:
方法一:kernel提供的源码包,进行编译替换1、首先做好内核编译前的打算工作,
主要有两个打算工作,一是在linuxkernel官网上下载源码包,二是安装好任意版本的linuxUbuntu并下载相应的编译工具。
在linuxkernel上下载源码包,网址为:,选择对应的源码包下载,注意源码包的大小通常是几十兆左右,命名后缀为.tar.bz2,如右图所示:以linux_3.2.1为反例:
在这儿插入图片描述
下载完成后,进行第二个打算工作,安装任意版本的Ubuntu,安装镜像网址:,像装其他任意操作系统一样,安装完成Ubuntu操作系统,之后配置好联网,进行apk_get的下载。以下过程在root权限下进行,安装有关编译程序。安装make,gcc,make-kpkg,运行menuconfig等等和编译内核相关的工具。
有关:
$sudo apt-get install build-essential kernel-package libncurses5-dev
复制
注意:(1)libncurses5-dev是为以后配置内核能运行makemenuconfig程序做打算Build-essential为编译工具,kernel-package是编译内核工具
(2)假如系统显示难以查找到这三个文件,输入#apt-getupdate更新数据源。把刚才下载的源码包进行拷贝在ubuntu系统中,并解压到/usr/src目录下,解压可以直接右键解压,或则采用以下进行解压:
$sudo tar Jvfx linux-3.4.88.tar.xz
复制
2、开始配置编译的相关文件及环境
首先,清除曾经编译时留下的临时文件。若果是刚才解开的包,不须要执行这步。若果是第二次或则是第n次编译,这么一定要执行。相关如下:
#$ sudo make mrproper
复制
之后将自己先前内核的配置文件拷贝过来成为新内核的配置文件,命令:
#cp /boot/config-`uname -r` ./.config
复制
这儿须要说明的是,拷贝过来是很便捷的,相当于直接给新的内核编译提供对应的配置文件,告诉内核什么文件要编译,什么不须要编译,并且经过几次的编译更改linux内核移植,这一部份是可以自定义的,借助我们之前下载的工具menuconfig。
步入内核的源码目录
#cd /usr/src/linux_3.2.1
复制
执行以下命令:
#make menuconfig
复制
注意:这个命令须要在超级用户权限下执行,否则可能会报出一些莫名奇妙的错误。执行这个命令以后了,就可一听到下边的图片了:
在这儿插入图片描述
这个图上面就可以对配置文件进行一个更改了,若果当年直接拷贝原内核的配置文件,这么此时直接选择倒数第二行loadanAlternateConfigurationFile,之后sava即可。
假如自己配置则选择里面的任意目录,进行选择什么文件要编译,什么不编译,通常须要选择的是设备驱动linux内核移植,选项是DeviceDrivers,选择完毕后同样保存save即可。
注意这两种形式都可以,看用户自己的选择。具体的每位选项的内容解析见一下博客:
3、开始编译新内核
编译命令:
#make all -j4
复制
执行以上命令以后就可以编译内核了,makeall就是将内核以及模块一起编译。旁边的参数-j4表示,cpu要开启四个线程来编译内核。通常来说,每位cpu可以开启两个线程来编译内核,我的笔记本是有两个cpu,所以开启了4个线程。这样编译真心很快的,原先没有发觉这样编译,只有一个线程编译真心够等好长时间的。
4、编译完成以后,就可以进行内核的安装了
我们将源代码目录下的arch/x86_64/boot/bzImage复制到/boot/下边,由于我下载的源代码版本为linux-3.2.1,并且须要依照自己的cpu类型,如是x86构架还是amd,或则是32位或64位,在相应的目录下寻觅bzImage。所以复制的命令为:
#cp arch/x86_64/boot/bzImage /boot/vmlinuz-3.2.1
复制
这儿须要说明,bzImage必须得有,是编译成功完成的一个生成文件,假如没有此文件,对不住,编译失败,请重新回来编译。vmlinuz-3.2.1是自己主动命令的,可以自己改,但通常都是这些命令形式。
5、将源代码目录下的System.map复制到/boot目录下:
命令:
#cp /usr/src/linux-3.2.1/System.map System.map-3.2.1
复制
6、.将源代码目录下的.config复制到/boot/目录下:
命令:
#cp .config /boot/config-3.2.1
复制
7、安装模块
命令:
#make modules_install
复制
8、生成initrd.img文件
#cd /lib/modules/3.2.1
#update-initramfs –c –k 3.2.1
复制
9、.切换到/boot/grub/目录下,手动查找新内核,并添加至grub引导
#update-grub
复制
10、修改开机grub启动时间间隔,命令如下:
#cd /ect/default
#sudo nano ./grub
复制
将hidden两行代码注释掉,这样开机启动的grub都会出现,可以由你选择改启动那个内核版本。
#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true
复制
修改完成以后,在重新生成grub.cfg文件,命令和前面一样:
#update-grub
复制
11、切换至grub.cfg目录
以文本方式查看,是否更新有新内核的启动项linux关机命令,假如有即可不用更改,假如没有,进行自动更改。
#cd /boot/grub
#sudo nano ./grub.cfg
复制
自动更改,依照原先内核的格式进行更改红旗linux5.0,只用更改新内核的名子而已。
12、重启笔记本,在previousversion中选择启动新编译的内核,成功步入系统。
输入内核版本测量命令:
命令:#uname -r
复制
都会出现新内核的名称!!!恭喜,替换内核成功!
形式二:下载内核安装包deb,进行升级替换
首先必须说明的是,这些方法我尝试了两台笔记本,两个不同的内核升级,均为成功,缘由不详:具体步骤简单如下:
1.下载deb包
在~kernel-ppa/mainline/上下载所需升级包。此处下载的是64位的3.5.4版本的3个deb包:
linux-headers-3.5.4-030504_3.5.4-030504.201209142010_all.deb
linux-headers-3.5.4-030504-generic_3.5.4-030504.201209142010_amd64.deb
linux-image-3.5.4-030504-generic_3.5.4-030504.201209142010_amd64.deb
复制
2.安装deb包
首先安装构架无关的即带all的headers包
sudo dpkg -i linux-headers-3.5.4-030504_3.5.4-030504.201209142010_all.deb
sudo dpkg -i linux-headers-3.5.4-030504-generic_3.5.4-030504.201209142010_amd64.deb
sudo dpkg -i linux-image-3.5.4-030504-generic_3.5.4-030504.201209142010_amd64.deb
复制
安装后,/boot目录下会生成新的内核的相关文件,/lib/modules目下也生成了相应模块。
3.更新启动项grub
根据上述的步骤9开始,与前面一样。更新完了grub.cfg,之后重新启动,进行新的内核即可测试根据这些步骤进行,并且开机步入然后直接紫屏,没有任何现象,缘由不明!!!
本文原创地址://gulass.cn/jgygdxqdnhzm.html编辑:刘遄,审核员:暂无