`

Linux内核的配置与编译(X86平台)

 
阅读更多

说明:只供学习交流

目的:

1):配置、编译X86平台下的Linux-2.6.29内核

2):在vmware下安装编译好的内核并启动

工具:

Gcc编译器, Linux-2.6.29内核

步骤:

():清除临时文件,中间文件和配置文件等(刚从网上下载下来的文件这步可省略)。

make clean

删除大多数的由编译生成的文件、但会保留内核的配置文件.config

make mrproper

删除所有的编译生成的文件,还有内核配置文件,再加上各种备份文件。

make distclean

mrproper删除的文件,加上编辑备份文件和一些补丁文件。

(二)选择参考配置文件

使用正在运行的内核配置文件作为参考配制文件,该配置文件在/boot目录下,使用命令

cp /boot/config-2.6.18-53.el5 .config

()配置内核

配置内核有如下命令:

make config:基于文件模式的交互式配置(也就是一问一答)。

make menuconfig:基于文本模式的菜单式配置(强烈推荐)。

make oldconfig:使用已有的配置文件(.config)但是会询问新增的配置选项。

make xconfig:图形化配置(需要安装图形化系统)。

make menuconfig是最为常用的内核配置方式,使用方法如下:

1、使用方向键在各选项间移动;

2、使用“Enter”键进入下一层选单;每个选项上的高亮字母是键盘快捷方式,使用它可以快速地到达想要设置的选单项。

3、在括号中按“y”将这个项目编译进内核中,按“m”编译为模块,按“n”为不选择(按空格键也可在编译进内核、编译为模块和不编译三者间进行切换),按“h”将显示这个选项的帮助信息,按“Esc”键将返回到上层选单。

内核配置通常在一个已有的配置文件基础上,通过修改得到新的配置文件Linux内核提供了一系列可供参考的内核配置文件,位于Arch/$cpu/configs

注意:要运行make menuconfig的界面需要调整终端的窗口大小,至少为80*19

(四)编译内核

(1):make zImage

(2):make bzImage

区别:在X86平台,在zImage只能用于小于512Kd的内核(注意是X86平台)

如需获取详细编译信息,可使用:

make zImage V=1

make bzImage V=1

编译好的内核位于arch/<cpu>/boot目录下

(五)编译内核模块

使用命令make modules

内核模块编译的时间比较长,一般需要1~2小时的时间。这些模块源于使用命令make menuconfig启动的菜单型配置界面中选择<m>的项。

(六)安装内核模块

使用命令:make modules_install,完成安装后,编译好的内核模块会从内核源代码目录拷贝至/lib/modules/2.6.29目录下。

(七)制作init ramdisk

使用cd跳动linux-2.6.29/,目录的上层目录,使用命令:mkinitrdinitrd-$version $version(mkinitrd initrd-2.6.29 2.6.29)将上一步中产生的模块目录/lib/modules/2.6.29制作成initrd-2.6.29

提示:initrd是“initial ramdisk”的缩写,initrd是在实际根文件系统可用之前挂载到系统中的一个初始根文件系统。在桌面或服务器Linux系统中,initrd是一个临时的文件系统。其生命周期很短,只会用作真实文件系统的一个桥梁。在没有存储设备的嵌入式系统中,initrd可以是永久的根文件系统。

Linux的众多发行版之所以使用initrd主要是为了在内核启动之后能够判断哪些硬件驱动需要加载,哪些不需要,文件系统有没有问题等,最终使得根分区能顺利加载。在scsisata设备上启动,usb启动盘,无盘服务器等都需要initrd来做判断,这样可以提高Linux内核的通用性。

(八)安装内核

由于Linux系统启动时,会从/boot目录下寻找内核文件与init ramdisk,所以需要将内核和initrd拷贝至/boot目录。使用命令:

cp initrd-2.6.29 /boot

cp linux-2.6.29/arch/x86/boot/bzImage /boot/vmlinuz-2.6.29

()修改/etc/grub.conf或者/etc/lilo.conf

为了让grub在启动时能提供一项我们自己制作的linux内核的选项,需要修改grub的配置文件/etc/grub.conf。(添加的代码为title My Linux2.6.29)以下的)

注意:/etc/grub.conf实际上是/boot/grub/grub.conf的一个链接,因此真正的配置文件存在与/boot/grub目录下。

(十):重启系统

使用命令reboot,重新启动系统,按住空格键不放,直到进入grub界面,选择My Linux2.6.29)启动。

分享到:
评论

相关推荐

    x86_64内核kernel4.19.152编译的vmlinux

    x86_64内核kernel4.19.152编译的vmlinux、vmlinx.bin及config文件

    基于x86的linux编译流程及内核启动流程

    分析了内核源码下如何生成x86 bzImage及x86内核的启动流程

    Linux内核3.6.x及以上版本的xr21v1414驱动编译

    Linux内核3.6.x及以上版本的xr21v1414驱动,X86编译和ARM平台交叉编译,实践文档指导,绝对可用

    linux3.5内核

    嵌入式linux系统,3.5版本内核,用于内核编译,linux内核裁剪。Linux是一种开源电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。 Linux最早是由芬兰黑客 Linus Torvalds为尝试在英特尔x86...

    linux 4.4内核配置选项详解.pdf

    本文仅讲述x86_64(AMD64)平台的内核编译,所以这个是必选项. Cross-compiler tool prefix CONFIG_CROSS_COMPILE 交叉编译工具前缀(比如"arm-linux-"相当于使用"make CROSS_COMPILE=arm-linux-"进行编译).除非你想配置...

    linux内核调试分析指南

    linux内核调试分析指南 linux内核调试分析指南--上篇 本文档已经转到下面的网址,位于zh-kernel.org的文档停止更新,请访问新网址 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一...

    SAIL-IMX7D Linux开发环境搭建与内核编译(1)

    SAIL-IMX7D Linux开发环境搭建与内核编译(1)Linux开发环境搭建与内核编译

    疯狂内核之——Linux预备知识.pdf

    1.3.1 Linux内核中的链表 15 1.3.2 Linux双循环链表综合实例 29 1.4 内核汇编语言规则 30 1.4.1 GNU的x86汇编语言 32 1.4.2 嵌入式汇编语言 33 1.5 必要的硬件知识 37 1.5.1 EU模块 38 1.5.2 SU模块 39 1.5.3 PU模块...

    qemu调试arm linux 内核环境搭建.doc

    arm, x86 两个平台的qemu 模拟器的安装,gdb 的安装,内核的编译的核调试 ,包括根文件系统的制作,实测的启动参数

    gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.gz

    gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.tar是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。 可用于交叉编译64-bit Armv8 Cortex-A, little-endian目标中的裸机程序、u-boot、Linux kernel、...

    内核阅读心得.pdf

    这段时间在看《Linux内核源代码情景分析》,顺便写了一些感悟。 。 读内核源代码是一件很有意思的事。它像一条线,把操作系统,编译原理,C语言, 数据结构与算法,计算机体系结构等等计算机的基础课程串起来。 我看...

    OracleLinux-R7-U0-Server-x86_64-dvd.iso

    Oracle Enterprise Linux现在是,并旨在保持为,与Red Hat Enterprise Linux完全兼容。 Oracle Linux 包含了两个内核: Unbreakable Enterprise Kernel - 紧紧跟随官方 Linux 内核,并且提供最新的功能和优化的...

    基于INTEL X86平台的32位多任务操作系统内核设计与实现文档.doc

    本文分析了操作系统的体系架构,简述了在Windows平台与Linux平台上编写操作系统的设计方法,并给出详细的设计与实现过程。 本系统内核采用了C语言和汇编语言编写,外围支撑软件采用Windows下VC++编写。汇编语言采用...

    gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz

    用于交叉编译linux内核 请自行解压 7z格式 适用于jetson板子gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz

    Visual EmbedLinux Tools-0.1.4

    利用这个插件,将可以在visual studio的IDE中进行Linux应用程序的开发(包括编译和调试),也可以进行uboot和linux内核的编译,并根据编译时的错误信息正确定位到源码。下面是它的基本功能: 1.支持x86 Linux,hi...

    Visual EmbedLinux Tools 0.1.6

    利用这个插件,将可以在visual studio的IDE中进行Linux应用程序的开发(包括编译和调试),也可以进行uboot和linux内核的编译,并根据编译时的错误信息正确定位到源码。下面是它的基本功能: 1.支持x86 Linux,hi...

    Visual EmbedLinux Tools-0.1.3

    VELT的全称是Visual EmbedLinuxTools...4.完成LINUX内核的配置。 5.不使用Makefile进行Linux应用程序的编译。 6.使用SSH连接目标机器并用gdb进行应用程序的调试。 7.使用Telnet连接目标机器并用gdb进行应用程序的调试。

    gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz.gz

    gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARMv8 64位目标中的裸机程序、u-boot、Linux kernel、filesystem和App应用程序。gcc-linaro-...

    LINUX编程白皮书 (全集)

    第一部分 Linux内核 前言 第1章 硬件基础与软件基础 6 1.1 硬件基础 6 1.1.1 CPU 7 1.1.2 存储器 8 1.1.3 总线 8 1.1.4 控制器和外设 8 1.1.5 地址空间 9 1.1.6 时钟 9 1.2 软件基础 9 1.2.1 计算机语言 9 1.2.2 ...

    vscode-linux-kernel:适用于Linux内核源代码的Visual Studio Code项目-linux kernel source code

    适用于Linux内核源代码的Visual Studio Code项目 确保已构建内核(至少应生成所有*.cmd文件): $ make defconfig $ make 将此存储库克隆为“ .vscode”: $ git clone git@github....

Global site tag (gtag.js) - Google Analytics