linux 内核代码学习(八)

news2024/11/16 0:00:47

总体目标:由于fedora10 linux发行版中自带的linux2.6.xx内核源码规模太庞大了,对于想通读内核源码的爱好者来说太困难了,因此选择了linux2.4.20内核来进行测试(最终是希望能够实现linux1.0内核的源码完全编译和测试)。

实施步骤:根据redhat9发行版的gcc和binutils版本,在fedora10中构建相同的编译环境并进行linux2.4.20内核的编译和测试,制作2.4.20内核的软盘启动盘,然后通过虚拟机启动,能够看到linux2.4.20内核启动成功。后续低内核版本也按照低gcc版本和对应的binutils版本来构建编译环境进行内核的编译测试。

编译linux2.4.20内核的时候,我的内核源码时放在win10的主机上,通过wmware10文件共享功能fedora10虚拟机共享内核源代码,然后利用fedora10中安装的编译环境来编译内核,由于ln命令不支持跨文件系统建立软硬连接,所以修改makefile文件,注释了箭头指示的两个地方,然后直接在内核源码include目录中按照所需要编译的目标系统,拷贝一份,将文件夹名字修改为asm。

内核编译或者make dep操作出现错误:“/mnt/hgfs/linux-2.4.20/include/linux/kernel.h:10:20: stdarg.h: 没有那个文件或目录”,但系统上能够查询到此文件

我的解决方法:因为我用的是gcc-3.2.2编译器,源程序在/home目录,安装在/opt/目录,因此我直接将/home/gcc-build/gcc/include/stdarg.h文件拷贝到内核源码目录linux-2.4.20/include中,能够顺利编译和通过make dep。

Linux2.4.20内核编译过程中出现汇编错误如下解决:后面在fedora10中将安装的as-2.13.2.1拷贝到/usr/bin目录中更名为as,发行版自带的as先备份为as_bak,后续准备创建一个封闭的gcc3.2.2+as-2.13.2.1编译环境,不影响发行版的编译环境。

出现这个汇编错误,是因为as的版本跟gcc的版本不配套导致的,redhat9 linux的发行版里面gcc和as版本如下,编译没有问题:gcc3.2.2+as 2.13.90+ld 2.13.90。

目前我使用的fedora10 linux发行版自带的gcc和as版本是:gcc4.3.2+as 2.18.50+ld 2.18.50

解决办法是在fedora10 linux发行版中安装gcc3.2.2+as 2.13.90+ld 2.13.90编译环境。

Gcc的安装如下,网络搜索了安装方法,有通过YUM工具进行安装,因为linux发行版的原因,这种方式一般都不能安装到自己需要的gcc版本,yum工具搜索到的都是跟发行版接近的版本;因此我先用fedora10的yum工具安装gcc3.4,Index of /gnu/binutils上直接下载gcc3.2.2源码,再用gcc3.4编译gcc3.2.2并安装gcc3.2.2。

通过上面的步骤,将gcc3.2.2安装到了/opt/gcc-3.2.2目录,这样系统中就有了多个版本的gcc编译器。

Fedora10下yum安装低版本gcc

  1. Fedora10下gcc位置及其版本如下:

2、根据需要,要安装低版本的gcc,如果直接用"yum install gcc"安装时默认是安装最新版本的gcc。

3.可先通过“yum list compat-gcc*”查看版本,然后再利用“yum install compat-gccXXX”安装,如下:

4.接下来指定要安装的版本进行安装:

5.输入y就开始下载并自动安装,并在目录“/usr/bin/”目录下生成如下gcc34:

6.接下来进行测试,在命令终端查看gcc版本,"gcc -v"和"gcc34 -v":

多个版本gcc并实现快捷切换

在实际生成过程中可能需要不同gcc版本来完成编译工作。可以在环境中配置好不同版本的gcc,方便快捷的实现版本的切换。Fedora10发行版中gcc是4.3.2版本,名字就是gcc,如果有多个版本的时候不好区分,后面将默认的gcc修改为gcc43。

linux下gcc默认保存路径:/usr/bin,有两个版本的gcc,gcc3.4.6和gcc4.3.2如下:

通过update-alternatives工具实现不同版本gcc之间的快捷切换

1、不同版本gcc的配置与切换

update-alternatives是ubuntu系统中专门维护系统命令链接符的工具,通过它可以很方便的设置系统默认使用哪个命令、哪个软件版本。设置多个版本gcc可用选择调用:

设置多个版本的gcc可供选择。70,60数字代表的是不同版本的优先级,默认最大数字版本的优先级:

update-alternatives --install /usr/bin/gcc  gcc  /usr/bin/gcc 70

update-alternatives --install /usr/bin/gcc gcc  /usr/bin/gcc34 60

这里通过update-alternatives用alternatives也行,设置了gcc3.4.6和gcc4.3.2两个版本的gcc。因为gcc4.3.2的优先级更高,所以默认是gcc4.3.2。

切换gcc版本:alternatives --config gcc

通过输入版本序号就能方便快捷的实现gcc版本的切换了。将发行版默认的gcc修改为gcc43方便区分。

由于系统默认的安装目录是/usr/bin,运行时都是在这些目录中寻找可执行文件,将gcc安装到其他目录后需要设置环境变量才能使用新安装的gcc文件。

下面是进行binutils工具的安装(包含as,ld)。下载地址:Index of /gnu/binutils

从服务器上下载源代码,用gcc3.2.2编译安装,在配置的时候提示CC错误,如下设置CC变量,并安装到/opt/binutils-2.13.2.1目录中。

创建binutils-2.13.2.1源文件makefile成功,然后执行make;make install

下图所示为不同版本的binutils中的as的管理和切换:

通过make menuconfig;make bzImage配置和编译一个最小内核,使用虚拟机设置里面的创建软盘功能,创建一个名为:boot2.4.20的flp类型的软盘来作为内核2.4.20的启动盘,在fedora10中连接这个软盘,然后执行make bzdisk,创建启动盘,在一个新的测试虚拟机中直接冲软盘引导,启动linux2.4.20内核,如下图所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2110837.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《互联网内容审核实战》:搭建团队到绩效激励,一书在手全搞定!“

🌐在数字时代的浩瀚海洋中,互联网视频、图片、文字等内容如同潮水般汹涌澎湃,它们以惊人的速度传播,连接着世界的每一个角落。这股信息洪流不仅丰富了我们的视野,也带来了前所未有的挑战——如何在享受信息便利的同时&…

docker-compose 快速部署nacos2.3.1-standalone单节点

一、nacos 介绍 官网: https://nacos.io/ 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台 二、如何使用docker-compose 快速部署nacos2.3.1 ⚠️ : nacos-standalone 部署方式 依赖于 数据库,请先配置好数据库实例&…

如何利用AI快速总结论文文献内容?试试这2款大学生必备文献翻译神器

推荐2款支持AI快速总结论文文献内容的神器! 1、包阅AI 点击链接直达官网>>https://baoyueai.com/ 一款高效提取文字信息的AI阅读工具,上传文献就能帮你快速完成【全文概述、分章节总结、智能导读】等,非常适用于总结论文文献内容。 支…

AI流程编排产品调研实践

随着AI技术的发展,AI应用和相关的生态也在不断地蓬勃发展,孵化这些AI应用的平台也在这几年也逐渐成熟。大模型应用开发平台像是淘金者必不可少的铲子一样,成为很多云平台厂商和互联网公司必不可少的平台与工具。 提起大模型流程编排或者大模型…

CSDN的Markdown编辑器语法

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

4个图片编辑神器,简单好用,可以快速出图

图片编辑是我们生活中常见的需求,有很多好用的图片编辑软件可以推荐,按照端口不同可以给大家分享4个分别在电脑和手机上使用的图片编辑神器,简单好用,可以快速出图。 一、电脑软件 1.改图鸭 图片编辑软件中的全能选手&#xff0…

CleanMyMac X2024最新官方中文破解版本下载

🧹 嘿,Mac用户们,你们的小助手来了! 今天要跟大家分享的,是一个能让你们的电脑焕发新生的神器——CleanMyMac X。这可不是一般的清洁工,它可是拥有超能力的超级英雄哦!🌟 CleanMyMa…

AIGC与数据分析融合,引领商业智能新变革(TOP企业实践)

AIGC与数据分析融合,引领商业智能新变革(TOP企业实践) 前言AIGC与数据分析融合 前言 在当今数字化时代,数据已成为企业发展的核心资产,而如何从海量数据中挖掘出有价值的信息,成为了企业面临的重要挑战。随…

索尼的Web3蓝图:从技术创新到现实应用的全方位布局

近年来,随着区块链技术和加密资产的迅猛发展,全球科技巨头纷纷投入其中,力图在Web3浪潮中占据一席之地。作为传统科技行业的巨头,索尼(Sony)也不甘落后,积极推动其Web3战略布局,展现出其在新兴领域的强烈野…

OpenHarmony鸿蒙开发( Beta5.0)智能手表应用开发实践

样例简介 本项目是基于BearPi套件开发的智能儿童手表系统,该系统通过与GSM模块(型号:SIM808)的通信来实现通话和定位功能。 智能儿童手表系统可以通过云和手机建立连接,同步时间和获取天气信息,通过手机下…

Qt/C++开源项目 TCP客户端调试助手(源码分享+发布链接下载)

这是一个TCP客户端调试助手,具有简洁直观的界面,用户能够方便地测试TCP协议的通信功能,并可同时作为客户端与服务器端使用。以下是该程序的功能特点及用途介绍: 功能特点: TCP客户端与服务器调试:支持同时…

C++11 --- 可变参数模板

序言 不知道大家有没有细细研究过在 C 语言 中的 printf 函数,也许我们经常使用他,但是我们可能并不是那么了解他。先看一下调用格式:int printf ( const char * format, ... );,在这里的 format 代表我们的输出格式,后…

若依库存管理 ruoyi-wms V2.0发布:升级到jdk17和vue3,支持一物一码

开源地址 https://gitee.com/zccbbg/wms-ruoyi 项目代码、文档 均开源免费可商用 遵循开源协议在项目中保留开源协议文件即可 活到老写到老 为兴趣而开源 为学习而开源 为让大家真正可以学到技术而开源 若依wms是一套基于若依的wms仓库管理系统,支持lodop和网页…

Windows环境虚拟机安装

一、软件安装 1. vmware官网地址 点进去选这个products 然后往下滑选这个查看桌面虚拟机管理程序 然后点击这个桌面虚拟机管理程序 然后下拉找到download now下载 然后会跳转到broadcom网站,选择注册账号,这里我是使用谷歌邮箱注册的 注册完之后点击这个链接&…

【LeetCode】07.整数反转

题目要求 解题思路 这道题的难点在于怎么判断越界,我们无法直接与最大值或最小值比较,但是由于每一次我们的ret都需要乘10这个特性来使用ret与最大值或最小值除10进行比较 代码实现 class Solution { public:int reverse(int x) {int ret0;while(x){…

JS生成二维码QRCode代码

JavaScript是一种广泛使用的前端编程语言,它不仅用于网页交互,还可以实现许多实用功能,如生成二维码。本篇文章将深入探讨如何使用JavaScript生成二维码,以及如何确保这种生成的二维码在各种浏览器和手机端都能正常工作&#xff0…

C语言-程序环境 #预处理 #编译 #汇编 #链接 #执行环境

文章目录 前言 一、程序的环境翻译和执行环境 二、翻译环境 (一)、整体把握 (一)、编译 1、预处理(预编译) 2、编译 a、词法分析 b、语法分析 c、语义分析 d、符号汇总 3、汇编 (二)、链接 三、运行环境 总结​​​​​​​ 前言 路漫漫其修远兮,吾将…

波导模式分析2 用于圆TE01模式高功率传输线的大型多模波导滤波器

摘要: 一种对于大型多模波导滤波器的设计方法,其能衰减掉(deteriorate)不想要的模式而不影响所需要的工作模式,被提出来抑制用于圆TE01模式高功率传输线的受限模式谐振。为了从TE10模式中分离出不期望的模式&#xff…

【蓝桥杯嵌入式(二)Led、Key、Lcd】

蓝桥杯嵌入式(二)Led、Key、Lcd 五、Led模块1.原理图配置2. 知识点3.底层代码 六、Key模块1.原理图配置2.知识点3.底层代码底层代码(四⾏代码版本)底层代码(状态机版本) 七、LCD模块1.原理图配置2.知识点底…

文章改写工具,帮你进行文章修改润色提升文章质量

在文字的世界里,每一篇文章都是创作者心灵的结晶。然而,即使是经验丰富的作家,也难免会在创作过程中遇到表达上的瓶颈。此时,文章改写工具便显得尤为重要,它以其独特的功能,对文章进行精准的修改与润色&…