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的路径就再编译一次就行了。

时间: 2024-08-02 06:58:58

Linux kernel编译指南的相关文章

Linux Kernel Makefile简析 之 make zImage

本文将简要分析Linux Kernel编译zImage的过程.读者需具备GNU Make.Bash Shell.Python脚 本.编译器.链接器等方面的基础知识.虽然重点是分析kernel的构建过程,但是也会顺带的分析一些 其他的小的知识点.我们坐车去远行,欣赏沿途的风景,并不会妨碍我们最终抵达我们的目的地,不是 吗? 先描述一下具体开发环境: . host os: ubuntu 14.04 server LTS . cross toolchain: crosstool-ng生成的交叉编译器

linux kernel的中断子系统之(七):GIC代码分析

一.前言 GIC(Generic Interrupt Controller)是ARM公司提供的一个通用的中断控制器,其architecture specification目前有四个版本,V1-V4(V2最多支持8个ARM core,V3/V4支持更多的ARM core,主要用于ARM64服务器系统结构).目前在ARM官方网站只能下载到Version 2的GIC architecture specification,因此,本文主要描述符合V2规范的GIC硬件及其驱动. 具体GIC硬件的实现形态有两

linux kernel对于浮点运算的支持

目前大多数CPU都支持浮点运算单元FPU,FPU作为一个单独的协处理器放置在处理器核外,但是对于嵌入式处理器,浮点运算本来就少用,有些嵌入式处理器就会去掉浮点协处理器. X86处理器一般都是有FPU的.而ARM PPC MIPS处理器就会出现没有FPU的现象. linux kernel如何处理浮点运算,我们就分为带FPU的处理器和不带FPU的处理器来讨论. (以下为个人知识总结,研究不深,错误之处希望大家指正,共同学习) 一 对于带FPU的处理器 1 对于linux kernel来说,kerne

使用 linux kernel +busybox 定制linux系统

目的: 了解linux的启动过程 主要内容: 1.grub 是启动程序的bootloader 2.linux-kernel 是linux的开源内核 3.busybox 是linux的工具集合 启动顺序: grub-> bzimage > initrd > init > chroot sbin/init (从内存镜像转换成rootfs)>/etc/inittab > fstab>etc/init.d/rcS 实验环境: 操作系统(编译使用): CentOS 7.4K

Linux Kernel - Debug Guide (Linux内核调试指南 )

http://blog.csdn.net/blizmax6/article/details/6747601 linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 建立调试环境 发行版的选择和安装 安装交叉编译工具 bin工具集的使用 qemu的使用 initrd.img的原理与制作 x86虚拟调试环境的建立 arm虚拟调试环境的建立 arm开发板调试环

Linux Kernel 4.2.2 编译安装教程

安装linux的最新内核其实不难,搞linux就不要怕尝试. 我配置是AMD Athlon X2 64 4600+的处理器和DDR2 2GB的内存条,系统为Xubuntu 15.04. 现在我与大家分享一下经验,由于我写这个帖子的时候,4.2.2是最新的正式版内核,所以就以4.2.2为例了. 首先去官网下载4.2.2的内核包,官网地址:https://www.kernel.org/ linux-4.2.2.tar.gz官网下载地址:https://www.kernel.org/pub/linux

Linux重新编译内核指南

Linux的一个重要的特点就是其源代码的公开性,全世界任何一个软件工程师都可以将自己认为优秀的代码加入到其中,由此引发的一个明显的好处就是Linux修补漏洞的快速以及对最新软件技术的利用.而Linux的内核则是这些特点的最直接的代表. 为什么要升级内核 正如它的名字的字面意义,Linux的内核承担着Linux操作系统的最为核心的任务,是其它程序和硬件等运行过程中的仲裁者:它要管理所有进程的内存,保证它们都能平等得到处理器的时隙.此外,它还提供程序和硬件之间的接口等功能. 通常,更新的内核会支持更

[总结]给pcDuino v2编译Linux kernel

1.版本问题 推荐选择pcdunio提供的官方的kernel. 当然可以选用www.github.com/linux-sunxi 中的kernel,不过有很多驱动都用不了包括arduino. 我尝试了以下的几个版本,3.29,3.79,3.90,下面是我这些时间的总结,会慢慢更新. 2.具体问题 (1)gen_initramfs_list.sh的问题 Cannot open '../../linux-sunxi/rootfs/rootfs.cpio.xz' make[1]: *** [usr/i

编译Linux Kernel

最近编译 Linux Kernel 被 header 所在的文件骗了,使用命令如下 cd /usr/src/linux-headers-3.11.0-24-generic/ make menuconfig make make menuconfig都还是正常 make的时候就缺很多文件,headers 文件夹下面缺很多 src文件 后来经过同事指点,使用了下面的步骤,成功了 sudo apt-get install libncurses5-dev kernel-package mkdir ~/ke