最近帮一个项目编译内核,特别学习了一下,记下了过程。如果问题,可以及时联系我
编译命令
1.清理工作目标
make clean: 删除编译中间文件,但是保留配置
make mrproper:删除包括配置文件的所有构建文件
make distclean:执行mrproper所做的一切,并删除备份文件
2.配置内核
make menuconfig:文本图形方式配置内核
make oldconfig:基于当前的.config文件提示更新内核
make defconfig:生成默认的内核配置
make allmodconfig:所有的可选的选项构建成模块
make allyesconfig:生成全部选择是内核配置
make noconfig:生成全部选择否的内核配置
3.构建内核目标
make all:构建所有目标
make bzImage:构建内核映像
make modules:构建所有驱动
make dir/:构建指定目录
make dir/file.[s|o|i]:构建指定文件
make dir/file.ko:构建指定驱动
4.安装内核
make install:安装内核
make modules_install:安装驱动
5.打包工具
make rpm:生成内核的RMP包
make rpm-pkg:生成带源码的RPM包
make binrpm-pkg:生成包含内核和驱动的RMP包
make deb-pkg:生成包含内核和驱动的debian包
6.生成文档工具
make xmldocs:生成xml文档
make pdfdocs:生成pdf文档
maek htmldocs:生成html文档
获得内核源码
直接去www.kernel.org官网下载。如果在Ubuntu下,可以通过apt-get install linux-source下载,下载后的目录为/usr/src
解压文件
tar xvf linux-source-3.13.0.tar.bz2
清理环境
make mrproper
首次编译不需要这次操作
创建内核配置
make menuconfig
保存后会在当前目录下生成.config的隐藏文件
构建内核
一定要用root权限编译内核,不然会产生很多诡异问题。
make all -j 4
编译完成时间要看编译主机的配置,强大的机器大概20分钟就能编译完成。配置差可能需要数小时时间。编译完成后,主要生成了./arch/x86/boot/bzImage和initrd.image文件。
安装内核
make install
默认会把vmlinuz-3.16.0ydoing, initrd.img-3.16.0ydoing, System.map-3.16.0ydoing, config-3.16.0ydoing文件安装到路径是/boot。
修改启动项
我是在Ubuntu14.04的机器上操作的,引导的工具是grub2。这个是默认安装好的,注意不是grub1,所以要修改/boot/grub/grub.cfg。我之前以为是grub1,修改了menu.list,发现根本没用,郁闷了很久。grub.cfg默认是不可写的,所以修改之前要更改文件权限。
chmod +x grub.cfg
vim grub.cfg
模仿已有的menuentry 增加如下:
menuentry 'Ubuntu, with Linux 3.16.0ydoing' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0ydoing-advanced-e65c8b88-8698-45a3-8420-384d43b37119' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root='hd0,msdos6'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos6 --hint-efi=hd0,msdos6 --hint-baremetal=ahci0,msdos6 e65c8b88-8698-45a3-8420-384d43b37119
else
search --no-floppy --fs-uuid --set=root e65c8b88-8698-45a3-8420-384d43b37119
fi
echo 'Loading Linux 3.16.0ydoing ...'
linux /boot/vmlinuz-3.16.0ydoing root=UUID=e65c8b88-8698-45a3-8420-384d43b37119 ro quiet splash $vt_handoff
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-3.16.0ydoing
}
注意要修改有3个地方,一个是menuentry ‘Ubuntu, with Linux 3.16.0ydoing’ ,第二个是linux /boot/vmlinuz-3.16.0ydoing ,第三个是initrd /boot/initrd.img-3.16.0ydoing。
重新启动后就可以在grub的菜单中看到Ubuntu, with Linux 3.16.0ydoing的选项
可以将initrd.img编译进入bzImage
可以将initrd.img和bzImage合二为一,只要在make menuconfig
配置initramfs的路径就再编译一次就行了。
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
//LINUX KERNEL 配置编译中文指南.pdf
### Linux Kernel 2.6 配置指南 #### 一、内核简介 **内核** 是操作系统的核心组件,负责管理系统的进程、内存、设备驱动程序、文件和网络系统等功能,直接影响系统的性能和稳定性。Linux 的一个显著特点是其源...
### Linux Kernel Module编程指南知识点概览 #### 一、引言 《Linux Kernel Module Programming Guide》是一本关于Linux内核模块编程的专业书籍,由Peter Jay Salzman、Michael Burian和Ori Pomerantz共同编著。该...
本指南将详细讲解如何在Linux环境下编译内核,帮助你理解和掌握这一过程。 首先,我们需要理解Linux内核是什么。Linux内核是Linux操作系统的核心,负责管理系统的硬件资源,如处理器、内存、输入/输出设备等,以及...
本文档旨在为 Linux 新手提供一个详细的 Linux 内核编译指南,帮助他们从基础开始学习 Linux 系统。编译内核对于 Linux 新手来说可能有一些困难,但通过本文档的指导,读者可以轻松地完成内核编译过程。 安装内核 ...
### Linux Kernel In A Nutshell:核心知识点概览 #### 编译Linux内核 Linux内核作为操作系统的核心组件,负责管理系统的硬件资源、提供基本的服务,并为其他应用程序提供支持。编译Linux内核是一项重要的技能,它...
以下是一份详细的Linux内核编译指南,适用于新手。 **为什么要编译内核?** 编译内核的主要原因有: 1. **添加功能**:有些功能如iptables的防火墙规则可能需要内核支持,而默认内核可能并未包含这些功能。 2. **...
Linux内核编译文档 根据提供的文件信息,本文档旨在...本文档提供了详细的Linux内核编译指南,包括rpmbuild工具的使用、SRPM和SPEC文件的应用、编译Linux内核、修改源代码和制作patch、应用编译好的RPM包等知识点。
通过以上章节的详细介绍,《Professional Linux Kernel Architecture》这本书为读者提供了一个全面深入的Linux内核学习指南。无论是初学者还是有经验的开发者,都可以从中获得有价值的知识和启发。通过学习这本书,...
2. **获取源码**:从Linux内核官方仓库(如git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git)克隆最新或者特定版本的内核源码。 3. **配置内核**:使用`make menuconfig`或`make xconfig`命令...
本书"Linux Kernel Development 3rd Edition"是理解Linux内核工作原理的权威指南,由知名Linux专家Robert Love编写。第三版涵盖了最新的Linux 4.x版本的内核开发信息,为开发者提供了深入的洞察力,以了解如何构建、...
目录: 1 交叉编译环境配置 1.1 交叉编译工具链的获取 1.2 交叉编译工具链的安装和验证 2 Linux Kernel 编译过程 2.1 获取Linux Kernel 源代码及补丁 2.2 内核配置详解 2.3 内核编译操作过程 ...
《Linux Kernel Programming Guide》是为那些想要深入了解Linux内核机制并进行系统级编程的开发者准备的一本详实指南。Linux内核是操作系统的核心部分,它负责管理系统的硬件资源,如处理器时间、内存以及输入/输出...
- **知识点**:指导读者如何获取Linux内核源码以及如何编译和调试内核。 - **重要性**:这对于想要深入研究Linux内核内部机制的开发者来说非常有用。 - **附录C:C语言笔记** - **知识点**:提供了一些C语言...
《Linux内核简明手册》这本书旨在为读者提供一个全面的指南,以正确构建、定制和安装Linux内核所需的所有知识。对于无编程经验的读者来说,这本书也是友好的,它不需要读者具备编程背景。 虽然这本书不打算深入探讨...
《Linux Kernel Development (2nd Edition)》是一本专为初学者设计的Linux内核开发指南,作者通过清晰的讲解和实例,帮助读者深入理解Linux内核的工作原理和开发过程。这本书是Linux爱好者和系统开发者理想的入门...
- **书籍概述**:《Linux Kernel In A Nutshell》是一本深入介绍Linux内核构建、定制及使用的指南。 - **主要目标**:为用户提供一套完整的流程来理解、编译、配置并运行Linux内核。 #### 第一部分:构建内核 - **...
《LINUX KERNEL技术手册》是一本深度探讨Linux内核的权威指南,对于任何希望深入了解Linux操作系统核心机制的读者来说,都是不可或缺的参考资料。这本影印版的英文手册,提供了全面且深入的Linux内核技术解析,涵盖...