linux内核移植步骤
2016.6.8
经过一个多星期的内核折磨,今天终于可以写下自己移植内核的一些心得,网上有很多博客论坛都有谈到,但是这些又说的方式有些模糊,这里我综合的几个博客在重新说下内核替换编译的步骤、以及如何更新启动项grub。替换linux的内核一共有两种方式,第一种方式是下载官方kernel提供的源码包,进行编译替换;第二种直接下载内核安装包deb,进行升级替换。
下面分别从这两种方式进行 一个说明:
方式一:kernel提供的源码包,进行编译替换
1、首先做好内核编译前的准备工作,
主要有两个准备工作,一是在linux kernel官网上下载源码包,二是安装好任意版本的linux Ubuntu 系统并下载相应的编译工具。
在linux kernel上下载源码包,网址为:https://www.kernel.org/pub/linux/kernel/,选择对应的源码包下载,注意源码包的大小一般是几十兆左右,命名后缀为.tar.bz2,如下图所示:以linux_3.2.1为例子:
下载完成后,进行第二个准备工作,安装任意版本的Ubuntu,安装镜像网址:http://www.ubuntu.org.cn/download ,像装其他任意操作系统一样,安装完成Ubuntu操作系统,然后配置好联网,进行apk_get的下载。以下过程在root权限下进行,安装有关编译程序。安装make ,gcc, make-kpkg,运行menuconfig等等和编译内核相关的工具。
有关命令:
$sudo apt-get install build-essential kernel-package libncurses5-dev
注意:
(1)libncurses5-dev是为之后配置内核能运行 make menuconfig程序做准备
Build-essential为编译工具,kernel-package是编译内核工具
(2)如果系统显示无法查找到这三个文件,输入#apt-get update更新数据源。
把刚刚下载的源码包进行拷贝在ubuntu系统中,并解压到/usr/src 目录下,解压可以直接右键解压,或者采用以下命令进行解压:
$sudo tar Jvfx linux-3.4.88.tar.xz
2、开始配置编译的相关文件及环境
首先,清理以前编译时留下的临时文件。如果是刚刚解开的包,不需要执行这步。如果是第二次或者是第n次编译,那么一定要执行。
相关命令如下:
#$ sudo make mrproper
然后将自己原本内核的配置文件拷贝过来成为新内核的配置文件,命令:
#cp /boot/config-`uname -r` ./.config
这里需要说明的是,拷贝过来是很方便的,相当于直接给新的内核编译提供对应的配置文件,告诉内核哪些文件要编译,哪些不需要编译,但是经过几次的编译修改,这一部分是可以自定义的,利用我们之前下载的工具menuconfig。
进入内核的源码目录
#cd /usr/src/linux_3.2.1
执行以下命令:
#make menuconfig
注意:这个命令需要在超级用户权限下执行,否则可能会报出一些莫名奇妙的错误。执行这个命令之后了,就可一看到下面的图片了:
这个图里面就可以对配置文件进行一个修改了,如果当初直接拷贝原内核的配置文件,那么此时直接选择倒数第二行load an Alternate Configuration File,然后sava即可。
如果自己配置则选择上面的任意目录,进行选择哪些文件要编译,哪些不编译,一般需要选择的是设备驱动,选项是Device Drivers,选择完毕后同样保存save即可。
注意这两种方式都可以,看用户自己的选择。具体的每个选项的内容解析见一下博客:
http://forum.ubuntu.org.cn/viewtopic.php?t=134404
3、开始编译新内核
编译命令:
#make all -j4
执行以上命令之后就可以编译内核了,
make all就是将内核以及模块一起编译。后面的参数-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目录
以文本形式查看,是否更新有新内核的启动项,如果有即可不用修改,如果没有,进行手动修改。
#cd /boot/grub
#sudo nano ./grub.cfg
手动修改,按照原来内核的格式进行修改,只用修改新内核的名字而已。
12、重启电脑,在previous version中选择启动新编译的内核,成功进入系统。
输入内核版本检测命令:
命令:#uname -r
就会出现新内核的名称!!!恭喜,替换内核成功!
方式二:下载内核安装包deb,进行升级替换
首先必须说明的是,这种方式我尝试了两台电脑,两个不同的内核升级,均为成功,原因不详:
具体步骤简单如下:
1.下载deb包
在 http://kernel.ubuntu.com/~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,然后重新启动,进行新的内核即可
测试按照这种步骤进行,但是开机进入之后直接紫屏,没有任何现象,原因不明!!!
linux内核移植步骤相关推荐
- linux 内核 网卡驱动 移植,Linux内核移植步骤_添加DM9000网卡驱动(设备树).docx
Linux内核移植步骤_添加DM9000网卡驱动(设备树) Linux内核移植步骤2015年05月13日星期三上午 11:05往设备树中添加网卡驱动:1.选平台,指定交叉编译工具链:(1).在Make ...
- linux 内核 网卡驱动 移植,linux内核移植步骤添加dm9000网卡驱动(设备树).docx
linux内核移植步骤添加dm9000网卡驱动(设备树).docx LINUX内核移植步骤2015年05月13日星期三上午1105往设备树中添加网卡驱动1.选平台,指定交叉编译工具链1.在MAKEFI ...
- mini2440 linux内核编译与移植 课程设计,linux内核移植步骤-mini2440
建立使用 Fedora 9,版本太高,由于链接库的区别可能造成不可预料的错误.或者说配置相对复杂多了.本教程仅提供给刚接触内核的朋友,大牛们当路过就是,有发现什么错误还望指教. ① 修改顶层的Make ...
- 友善之臂linux内核移植步骤,友善之臂 madplayer 移植过程补充
天在看友善之臂 QQ2440的用户手册,其中的madplayer移植,自己试了试,在手册之外的一点东西,可能会对你有一点点的帮助. www.linuxidc.com @linuxidc:~/creek ...
- Linux内核移植和根文件系统制作(详细步骤精讲)
第一章移植内核 1.1 Linux内核基础知识 1.1.1 Linux版本 1.1.2 什么是标准内核 1.1.3 Linux操作系统的分类 1.1.4 linux内核的选择 1.2 Linux内核启 ...
- 6410 linux内核移植
linux内核移植(6410) linux内核移植一,硬件环境:友善之臂 tiny6410 开发板开发主机Linux系统:fedora 10 编译器:arm-linux-gcc-4.5.1 二,内核实 ...
- linux 内核移植和根文件系统的制作【转载】
原文地址:http://www.cnblogs.com/hnrainll/archive/2011/06/09/2076214.html 1.1 Linux内核基础知识 在动手进行Linux内核移植之 ...
- Linux内核移植漫谈——你不是第一个想移植Linux内核的人
Jack:在读大学的时候我想过移植Linux操作系统. 我:现在呢? Jack:我还是想移植Linux操作系统.你教我移植吧. 我:你知道什么是"Linux内核移植"吗? Jack ...
- 嵌入式linux内核移植
获取linux内核 移植linux内核首先我们需要先获内核源码,可以从linux官网下载:https://www.kernel.org,但是一般做法是 根据cpu类型从它们的半导体厂商网站获取,因为半 ...
最新文章
- GitHub 骚操作,个人页还能这么玩?
- 【c语言】蓝桥杯算法提高 三个整数的排序
- 2020全国大学生数学建模竞赛【论文格式、时间节点及作品提交要求、竞赛题目下载、评分要点】【微信公众号:校苑数模】
- kaggle入门-Bike Sharing Demand自行车需求预测
- 绕过AppLocker系列之MSBuild的利用
- 即时通讯学习笔记003---Tigase代码框架解读
- 计算机考研计算机网络题库
- 串口 单片机 文件_单片机引脚介绍
- linux环境下如何重装系统,详细教你linux电脑系统怎么安装
- MySQL DBLE_MySQL 分库分表 dble简单使用
- 计算机化学博士点,2017年新增博士硕士授予单位公布!各高校博士、硕士学位授权点建设的总体情况如何?...
- 王道——数据结构 第一章 思维拓展
- 华为鸿蒙朱丹丹,周一围心疼老婆?朱丹二胎产后憔悴臃肿却忙复出:这一年太痛苦...
- YDLIDAR G4雷达的unity使用相关+北阳雷达
- IoTSharp 已支持国产松果时序数据库PinusDB
- 日月運行法則이 政治의 原理이다
- linux 删除gpt,删除GPT-默认返回MBR
- TC数据库相关整理(持续更新)
- 随记:spri排除Bean时not be excluded because they are not auto-configuration classes
- 6G:典型应用、关键技术与面临挑战