`
Ydoing
  • 浏览: 106065 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Linux kernel编译指南

 
阅读更多

最近帮一个项目编译内核,特别学习了一下,记下了过程。如果问题,可以及时联系我

编译命令

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 配置编译中文指南.pdf

    Linux kernel 2.6 配置指南

    ### Linux Kernel 2.6 配置指南 #### 一、内核简介 **内核** 是操作系统的核心组件,负责管理系统的进程、内存、设备驱动程序、文件和网络系统等功能,直接影响系统的性能和稳定性。Linux 的一个显著特点是其源...

    Linux Kernel Programming Guide.pdf

    ### Linux Kernel Module编程指南知识点概览 #### 一、引言 《Linux Kernel Module Programming Guide》是一本关于Linux内核模块编程的专业书籍,由Peter Jay Salzman、Michael Burian和Ori Pomerantz共同编著。该...

    Compiling_the_Linux_kernel.rar_linux kernel_linux 编译

    本指南将详细讲解如何在Linux环境下编译内核,帮助你理解和掌握这一过程。 首先,我们需要理解Linux内核是什么。Linux内核是Linux操作系统的核心,负责管理系统的硬件资源,如处理器、内存、输入/输出设备等,以及...

    linux内核编译文档

    本文档旨在为 Linux 新手提供一个详细的 Linux 内核编译指南,帮助他们从基础开始学习 Linux 系统。编译内核对于 Linux 新手来说可能有一些困难,但通过本文档的指导,读者可以轻松地完成内核编译过程。 安装内核 ...

    linux kernel in a nutshell

    ### Linux Kernel In A Nutshell:核心知识点概览 #### 编译Linux内核 Linux内核作为操作系统的核心组件,负责管理系统的硬件资源、提供基本的服务,并为其他应用程序提供支持。编译Linux内核是一项重要的技能,它...

    Linux内核编译指南

    以下是一份详细的Linux内核编译指南,适用于新手。 **为什么要编译内核?** 编译内核的主要原因有: 1. **添加功能**:有些功能如iptables的防火墙规则可能需要内核支持,而默认内核可能并未包含这些功能。 2. **...

    kernel RPM包编译文档.docx

    Linux内核编译文档 根据提供的文件信息,本文档旨在...本文档提供了详细的Linux内核编译指南,包括rpmbuild工具的使用、SRPM和SPEC文件的应用、编译Linux内核、修改源代码和制作patch、应用编译好的RPM包等知识点。

    Professional Linux Kernel Architecture

    通过以上章节的详细介绍,《Professional Linux Kernel Architecture》这本书为读者提供了一个全面深入的Linux内核学习指南。无论是初学者还是有经验的开发者,都可以从中获得有价值的知识和启发。通过学习这本书,...

    基于Arm的Linux内核编译指导及bootloader

    2. **获取源码**:从Linux内核官方仓库(如git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git)克隆最新或者特定版本的内核源码。 3. **配置内核**:使用`make menuconfig`或`make xconfig`命令...

    linux kernel development 3rd

    本书"Linux Kernel Development 3rd Edition"是理解Linux内核工作原理的权威指南,由知名Linux专家Robert Love编写。第三版涵盖了最新的Linux 4.x版本的内核开发信息,为开发者提供了深入的洞察力,以了解如何构建、...

    Linux 2.6.X内核编译指南

    目录: 1 交叉编译环境配置 1.1 交叉编译工具链的获取 1.2 交叉编译工具链的安装和验证 2 Linux Kernel 编译过程 2.1 获取Linux Kernel 源代码及补丁 2.2 内核配置详解 2.3 内核编译操作过程 ...

    Linux Kernel Programing Guide,Linux内核编程指南

    《Linux Kernel Programming Guide》是为那些想要深入了解Linux内核机制并进行系统级编程的开发者准备的一本详实指南。Linux内核是操作系统的核心部分,它负责管理系统的硬件资源,如处理器时间、内存以及输入/输出...

    Professional Linux Kernel Architecture, 精通Linux内核架构

    - **知识点**:指导读者如何获取Linux内核源码以及如何编译和调试内核。 - **重要性**:这对于想要深入研究Linux内核内部机制的开发者来说非常有用。 - **附录C:C语言笔记** - **知识点**:提供了一些C语言...

    Linux Kernel in a Nutshell

    《Linux内核简明手册》这本书旨在为读者提供一个全面的指南,以正确构建、定制和安装Linux内核所需的所有知识。对于无编程经验的读者来说,这本书也是友好的,它不需要读者具备编程背景。 虽然这本书不打算深入探讨...

    Linux Kernel Development (2nd edition)

    《Linux Kernel Development (2nd Edition)》是一本专为初学者设计的Linux内核开发指南,作者通过清晰的讲解和实例,帮助读者深入理解Linux内核的工作原理和开发过程。这本书是Linux爱好者和系统开发者理想的入门...

    Linux Kernel In A Nutshell.pdf

    - **书籍概述**:《Linux Kernel In A Nutshell》是一本深入介绍Linux内核构建、定制及使用的指南。 - **主要目标**:为用户提供一套完整的流程来理解、编译、配置并运行Linux内核。 #### 第一部分:构建内核 - **...

    LINUX KERNEL技术手册(影印版)(英文)

    《LINUX KERNEL技术手册》是一本深度探讨Linux内核的权威指南,对于任何希望深入了解Linux操作系统核心机制的读者来说,都是不可或缺的参考资料。这本影印版的英文手册,提供了全面且深入的Linux内核技术解析,涵盖...

Global site tag (gtag.js) - Google Analytics