【学习笔记】编译Linux内核(上)--编译基于x86平台的Linux内核的过程

基于Qemu搭建x86_64虚拟环境运行Linux内核 主机软件版本信息 主机系统: wxer@wxer:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.1 LTS Release: 20.04 Codename: focal 模拟器版本(Qemu版本): wxer@wxer:~$ qemu-system-x86_64 --version QEMU emulator version 4.2.0 Copyrig 阅读详情

编译Linux内核。

 

 

 

第一步:下载源码并存入Linux目录,我是放到了/usr/src目录下,别的目录也可以。一般下载下来的源码都是文件名为"linux-$版本号.tar.bz2"的数据包格式,比如"linux-2.6.15.5.tar.bz2”。

 

 

 

第二步:将数据包解压。这里一定要注意,解压这个过程必须在linux内完成,不要在windows下解压,如果在windows下解压,编译内核的时候会出现error,提示缺少某些文件,这是因为在windows下,文件名是不区分大小写的,比如direct.c和Direct.c,而在Linux下却区分大小写。在解压过程中windows会把这两个文件解压成一个文件从而导致文件丢失。linux内核源码里同目录下有很多这样的"同名"文件。

对于 .tar.bz2   后缀的文件,用tar -jxvf来解压。如"tar -jxvf linux-2.6.15.5.tar.bz2",解压后会在当前目录中生成名为 "linux-2.6.15.5"的文件夹。

附:(关于tar命令的用法详解,参考http://www.cnblogs.com/eoiioe/archive/2008/09/20/1294681.html)

 

 

 

第三步:进入上一步生成的内核源码目录      cd linux-2.6.15.5

 

 

第四步:清除内核源码目录中可能存在的以前编译过程中留下的中间文件。

一般用make clean命令即可,也可用make distclean。

二者的区别:

make clean 只清除中间文件不清除配置文件。

make distclean 全部清除。

 

 

 

第五步:配置内核

此处有多个命令可用:

make config:这个命令最不好用,必须在命令行里根据提示一项一项的配置,而很多项我们可能根本不了解是什么意思。所以如果不是对内核特别了解别用这个命令。咱们这种菜鸟级的可以直接无视它。

make menuconfig:这个命令不错,推荐。跟make config相比用这个命令会有菜单项辅助我们配置,结构清晰。而且有默认设置供我们参考。

make oldconfig:比第一个好点,也是命令行输出提示信息,不过只提示新项的配置。也不好用

make Xconfig:适用于桌面系统,最直观。不过还是推荐用make menuconfig。

配置时,对于每一项,一般都有Y,M,N三种选择。选择Y表示Yes,就是将这一项编译到内核中;选择N表示不编译此项;选择M表示编译此项,但是不是直接编译到内核中,而是编译成内核模块。

配置完相应项后,保存设置。这时候内核源码目录项就多了个   .config  文件,该文件是隐藏的,要用  ls -a 才可以看到。.config文件保存了我们刚才的配置信息。

 

 

 

第六步:

一切就绪。开始编译内核,用到的命令:make zImage和make bzImage。在x86平台下,使用make zImage只能编译512K以内的内核,如果编译出的内核大于512K就会报错,而使用make bzImage则可以编译任意大小的内核(bzImage=big zImage)。在其他平台上,这两个命令没有区别。

进入内核源码目录,直接: make bzImage。这时系统开始编译我们再上一步配置过程中选择Y的项。

然后就是漫长的等待,红帽子开始刷屏:

 

 

这个时间段我们最好先玩点别的,因为这个编译过程的确很漫长。

 

二十分钟后,终于刷屏结束,内核编译完成:

 

 这时源码目录下的 arch/<cpu>/boot 目录下会出现一个名为bzImage或zImage的文件(取决于我们编译内核时用的命令是make zImage还是make bzImage),这个就是编译好的内核。

 

 

 

第七步:编译内核模块。用到的命令:make modules。同样是在源码目录下使用这个命令。这时系统开始编译我们在配置过程中选择M的项。

木有截图。

 

 

 

第八步:安装内核模块。用到的命令:make modules_install。这一步执行后系统会将内核模块从内核源码目录拷贝到  /lib/modules  下(该目录下会出现一个以内核版本号命名的文件夹,如"2.6.15.5")。

木有截图。

 

 

第九步:制作init ramdisk。用到的命令 mkinitrd。

如"mkinitrd initrd-2.6.15.5 2.6.15.5"

中间的initrd-2.6.15.5可任意命名,但最好命名成这样子,清晰易懂。而后面的2.6.15.5不能随便写,是那个版本就是那个版本,它对应的是上一步在/lib/modules目录中生成的文件夹。这一步执行后会在源码目录下生成initrd-2.6.15.5文件。

 

 

 

第十步:安装内核。

这一步需要先将第六步中编译生成的内核bzImage 或zImage文件拷贝到  /boot目录下(拷贝后的文件名任意,但最好命名成"vmlinuz-2.6.15.6"这种形式,习惯)。再将第九步生成

的源码目录下的initrd-2.6.15.5文件拷贝到/boot中。

然后修该启动文件grub.conf,此文件位于/etc下。

在grub .conf文件中添加如下内容(加入我要安装的是上面举例用的2.6.15.5版本,而且各文件名也如前所说)

 

--------------------------------------------------------------------------------

title MyOwnLinux                       #(此处名称任意)

        root (hd0,0)

        kernel /boot/vmlinuz-2.6.15.5 ro root=LABEL=/ rhgb quietselinux=0

                 #上面的就是拷贝到/boot文件夹中的内核  

      initrd /boot/initrd-2.6.15.5       #拷贝到/boot目录下的的init ramdisk。

---------------------------------------------------------------------------------

 

grub.conf文件的配置说明参见http://blog.youkuaiyun.com/zhuliting/article/details/5502636。

弄好这一切后,重启  reboot 

然后就会看到这样的开机界面:

 

 

 

 

最后一张插图是我编译2.6.34.13时的插图。前面的几张是2.6.15.5的。由于2.6.15.5我用的源码不是官网下载的所以出现了很多问题没有成功,最后发现它的源码都有问题。所以大家一定要下载官网上的源码,稳定。

 这里说一下,编译内核的过程到第七步就算完成了,第八步往后用到的"make modules_install"、"mkinitrd"等命令不属于“编译”内核的过程,而属于内核的安装。上面我编译完后的内核之所以可以直接安装在我的PC上,是因为我编译的是基于x86平台的Linux内核,而如果编译过程选择的是其他的平台比如arm,编译出来的内核就不能直接往PC上安装了。编译内核时默认的是基于x86平台。编译基于其他平台的Linux内核的方法在  “【学习笔记】编译Linux内核(下)”中会提到。

 

x86平台Linux内核配置编译和安装 1.       配置编译及安装(1)     下载http://www.kernel.org/pub/linux/kernel/v2.6/首先从上面的地址下载内核源码(2)     解压内核到当前目录tar xjvf linux-2.6.37.tar.bz2(3)     清理中间文件配置文件cd linux-2.6.37make distclean(4)     使用正在运行的内核配置作为参考 阅读详情

相关推荐

x86平台内核配置,编译和安装过程(常用操作)

x86平台内核配置,编译和安装过程(常用操作)1,获取linux内核源码 2,清除临时文件,中间文件和配置文件 指令:make distclean 介绍:删除所有配置项和配置文件3,配置内核 指令:make menuconfig 介绍:基于文本模式的菜单型配置 技巧:make menuconfig 是最为常用的内核配置方式,使用方法如下: 1、使用方向键在各选项间移动

daibitao的专栏 1579

X86平台:linux系统下编译配置内核并启动内核

X86平台:linux系统下编译配置内核并启动内核   本文转自:http://blog.chinaunix.net/uid-25811099-id-1704590.html PC机系统: windows XP 虚拟机: VMware 6.5.1 build-126130 虚拟机系统: linux系统(version: 2.6.25-14.fc9.i686 友善光盘中提供

liushi558 1002

x86内核的配置,编译,及安装

在学习的同时,总结    x86内核的配置,编译和安装如下 为掌握在x86的平台下,实现从配置文件到安装内核的完整过程,需经如下步骤: (1)   解压内核。现以linux2.6.29为例,将linux2.6.29压缩文件拷贝到虚拟机linux的目录下,解压在当前的目录,解压命令用: #tar jxvf linux.2.6.29.tar.bz2,由于所解压文件是以bz2结尾的,故使用jx

ITCWD的专栏 2899

linux 内核 x86系统,x86平台linux内核的编译

首先获得内核,这里得到的是linux2.6.29;进入内核目录;make distclean这一步是清理中间文件,配置文件3.然后选择参考配置文件就选择当前运行的linux平台的配置文件吧cp /boot/config-2.6.18-194.el5 .config 4.然后进行配置内核make menuconfig等图形界面出来后,向下移动鼠标,选择Load an Alternate Conf...

weixin_35661054的博客 447

Linux 内核配置与编译

嵌入式系统的一个很重要的特性就是可移植可裁剪配置。这篇博文主要简单总结下在x86体系下配置编译内核的过程。       首先需要得到linux内核的源码,可以直接到linux官网下载。很多arm开发板的光盘都有linux源码,但还是推荐到官网下载,因为开发板的源码可能已经被修改过。       取得源码后的步骤就是配置内核。使用make menuconfig命令,配置成功后保存会在内核源代码目

cbl709的专栏 2301

别再瞎调了!STM32 Systick延时函数避坑指南(正点原子、野火、慧净代码对比)

本文深入解析STM32 Systick延时函数的实现差异与优化策略,对比正点原子、野火、慧净等主流方案的优缺点。针对us和ms级延时精度问题,提供避坑指南和高级优化技巧,帮助开发者根据项目需求选择最佳方案,提升嵌入式系统的定时控制精度。

weixin_28717807的博客 340

X86linux内核编译

** 1.配置编译及安装 ** 编译内核版本为linux2.6.29 运行系统内核为linux2.6.32 注意: 在使用版本差距过大的内核进行编译时工具会出现很多问题; (1) 下载 http://www.kernel.org/pub/linux/kernel/v2.6/ 首先从上面的地址下载内核源码 (2) 将压缩包放到/usr/src解压 如果是.tar.bz2: tar x...

qq_41032508的博客 642

手把手教你用Anaconda安装李沐d2l-zh包(附常见报错解决方案)

本文提供了一份详尽的Anaconda环境下安装李沐d2l-zh包的实战指南。文章从创建虚拟环境、配置国内镜像源加速下载入手,分步讲解核心依赖的预安装策略,并重点剖析了安装过程中常见的报错及其解决方法,旨在帮助初学者和开发者高效、稳定地搭建深度学习实验环境。

efc1234567的博客 1010

基于x86体系结构分析linux的启动过程

仅考虑32位体系结构 不考虑多核多处理器 要求1:分析流程按照开机-->BIOS-->grub-->Linux的顺序进行,到start_kernel结束   第一步——>加载BIOS:   打开计算机电源后,计算机会首先加载BIOS信息,这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。BIOS所做的工作如下: 1.检测连接硬

浮生如梦 1619

空地多无人平台协同路径规划复现:从建模到Matlab仿真全解析

路径规划是机器人领域的核心基础技术,从单机避障到多平台协同,问题复杂度显著提升。空地协同规划融合无人机与无人车的异构优势,通过将地图分层建模为空中与地面栅格,并采用A*算法生成初始路径、B样条平滑以及改进遗传算法进行任务分配与时间同步优化,能够有效处理几何约束、运动学约束和避碰约束等。该技术广泛应用于区域巡逻、目标搜索、物资转运等任务场景,也是高校论文复现和工程仿真的常见课题。本文从问题建模、算法设计到Matlab代码结构,系统梳理了一套空地多无人平台协同路径规划的复现思路,同时给出坐标系校准、遗传算法收敛

weixin_32175665的博客 250

关于LIO-SAM编译时出现错误 /usr/bin/ld: 找不到 -lBoost::timer

关于LIO-SAM编译时出现错误: 下载LIO-SAM代码 进入LIO-SAM文件夹,通过以下代码编译: mkdir build cd build cmake .. make 报错: /usr/bin/ld: 找不到 -lBoost::timer collect2: error: ld returned 1 exit status CMakeFiles/lio_sam_imuPreintegration.dir/build.make:759: recipe for target 'devel/lib/li

wwtx的博客 3648

CentOS 7 x86_64编译运行Linux 0.00系统

本文给出了在CentOS 7 x86_64系统中从零开始编译运行Linux 0.12系统的基础设施搭建过程,以达到如下图所示的最终效果。

qq_38624569的博客 377

[QMT量化交易小白入门]-二、如何用miniQMT获取沪深A股的板块列表、历史行情数据和实时行情数据

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步,自己淋过雨了,希望大家都有一把伞。

木头大左的博客 5659

linux内核基于x86,编译Linux内核(上)--编译基于x86平台的Linux内核的过程

转载自:http://blog.youkuaiyun.com/newthinker_wei/article/details/8014766编译内核。第一步:下载源码并存入Linux目录,我是放到了/usr/src目录下,别的目录也可以。一般下载下来的源码都是文件名为"linux-$版本号.tar.bz2"的数据包格式,比如"linux-2.6.15.5.tar.bz2”。第二步:将数据包解压。这里一定要注意,...

weixin_34025386的博客 673

用 Message Monitoring Overview 打造接口健康驾驶舱:SAP AIF 消息监控实战解析

究竟解决了什么痛点?概括起来,这个应用把SAP AIF的接口监控,从传统的事务码和技术视角,带到了一个更加直观、业务友好的层次:(通过卡片式总览,让你在一个页面上看到所有自己负责的接口及其健康状况。通过和的联动,实现了从接口态势到具体消息的快速钻取。通过Recipient模型和应用,实现了监控职责的灵活分配。借助拖拽排序、搜索过滤等特性,让每个运维人员都可以打造属于自己的接口健康 cockpit。如果你正在做S/4HANA或项目,无论是公有云还是本地部署,只要系统启用了SAP AIF。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 107

电池管理系统(BMS)技术全景解析:从基础原理到智能未来

《BMS技术演进与核心功能解析》摘要: 电池管理系统(BMS)作为新能源系统的智能中枢,已从基础保护电路发展为具备预测能力的智能系统。文章系统梳理了BMS三大技术时代:1.0保护时代(1990-2000)采用硬件保护电路;2.0智能时代(2000-2020)引入SOC算法;3.0云脑时代(2020后)实现AI预测。详细解析了BMS三大核心模块:AFE感知系统(±2mV精度)、功率驱动模块(10μs级保护)和均衡技术(效率提升至85%),并对比了主动/被动均衡技术差异。同时阐释了SOC/SOH等关键参数定义与

bother3000的博客 2985

编译Linux内核(上)--编译基于x86平台的Linux内核的过程

编译Linux内核。   第一步:下载源码并存入Linux目录,我是放到了/usr/src目录下,别的目录也可以。一般下载下来的源码都是文件名为"linux-$版本号.tar.bz2"的数据包格式,比如"linux-2.6.15.5.tar.bz2”。   第二步:将数据包解压。这里一定要注意,解压这个过程必须在linux内完成,不要在windows下解压,如果在windows下解压,编译内核的时...

liangxiaoxi7的博客 3856

【WRF-Chem工具】pyVPRM 计算大气与陆地植被之间的 CO₂ 交换通量

pyVPRM 计算大气与陆地植被之间的 CO₂ 交换通量

WW、forever的博客 210

X86/PC平台下的Linux内核编译

因为我们的软件源自己是无法更新的,你可以将软件源想象成“应用商店”,只是这个“应用商店“自己是无法更新的,那么这个”应用商店“就只有软件的旧版本,并且没有最新发布的一些软件,所以我们得手动更新一下,当然我们不是每次下资源时都要更新,这边建议一天使用一次就行了。这里下载会默认到你当前文件中,红色的就是我们刚刚下载的。这里我们提供两种版本的ARM GCC编译链,EABI效率低,CPU占用高,但适配所有ARM芯片,EAPIHF效率高,但仅适配带FPU的ARM芯片,比如Cortex-A芯片。卸载,节省内核体积。

2403_85029219的博客 926

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

linux内核移植x86平台

前面一段时间弄RTOS弄的比较多了,这段时间主要是计划移植linux,编写相关驱动,以前也各个linux版本都用过,但是久了没用了,因此,大多数都搞忘了,所以说啊,好记性不如烂笔头!下面我们开始移植linux到x86平台上 1、解压下载的linux内核,此处用的是3.2.12版本,如下所示 tar -jxf  [内核名字] 2、清除相关内容 此处,顺便提示下make clean和make

coderlang 2075

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

x86平台linux模块编译,x86平台下Linux配置编译与启动

重新在x86平台上面配置编译了一下linux内核,并且设置启动。所有的工作是在虚拟机下面进行的。下面首先谈谈理论上编译配置内核需要用哪些步骤:1、首先肯定是在www.linux.org上面下载自己需要的linux内核版本啊。建议到官方下载,不要下载经过别人裁剪过的内核。2、解压缩。下载的时候可以下载经过gzip压缩的,也可以选择经过bzip2压缩的。经过gzip压缩的用:tar -xvz -f 来...

weixin_42662171的博客 534

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

linux 编译64位内核,在x86_32环境下编译x86_64linux内核(上篇)

开始之前,先简单唠叨两句。编译并使用一个自定义的内核,若想得到官方的支持是非常困难的。然而你可以增加学习的经验,尽管如此,使用你自己编译的内核是不允许上报bug的。如果你这样做了,将会被官方无任何解释的拒绝。如果你是以下几种情况之一,那么你将有理由去编译自己的内核:你是一个内核开发者。你需要已经编译好的内核的一个特殊的方面,并且官方网站上有没有将其编译进内核(例如,需要开启一些试验阶段的特性)...

weixin_29554335的博客 1014

x86平台下linux配置编译与启动

以前学习的基础知识都忘记了,趁放假回来好好补补基础。今天下午办完签证后,回来重新在x86平台上面配置编译了一下linux内核,并且设置启动。所有的工作是在虚拟机下面进行的。 下面首先谈谈理论上编译配置内核需要用哪些步骤:             1、首先肯定是在www.linux.org上面下载自己需要的linux内核版本啊。建议到官方下载,不要下载经过别人裁剪过的内核。

xgg0602的专栏 2738

x86平台linux模块编译,运行在TQ2440开发板上以及X86平台上的linux内核编译

一、运行在TQ2440开发板上的linux内核编译1、获取源码并解压直接使用天嵌移植好的“linux-2.6.30.4_20100531.tar.bz2”源码包。解压(天嵌默认解压到/opt/EmbedSky/linux-2.6.30.4/中)tar xvjf linux-2.6.30.4_20100531.tar.bz2 -C /2、获取默认配置文件可以使用“config_EmbedSky_W4...

weixin_26875109的博客 334
下一篇: 【学习笔记】编译Linux内核(中)--安装内核时易出现的问题和解决方案
NewThinker_wei
博客等级 码龄14年 521粉丝 51原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值