linux 内核代码学习(八)

总体目标:由于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.rhkb.cn/news/417696.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

了解一下HTTP 与 HTTPS 的区别

介绍: HTTP是超文本传输协议。规定了客户端(通常是浏览器)和服务器之间如何传输超文本,也就是包含链接的文本。通常使用TCP【1】/IP协议来传输数据,默认端口为80。 HTTPS是超文本传输安全协议,具有CA证书。…

【RLHF】浅谈ChatGPT 等大模型中的RLHF算法

本文收录于《深入浅出讲解自然语言处理》专栏,此专栏聚焦于自然语言处理领域的各大经典算法,将持续更新,欢迎大家订阅!​个人主页:有梦想的程序星空​个人介绍:小编是人工智能领域硕士,全栈工程…

TCP的流量控制深入理解

在理解流量控制之前我们先需要理解TCP的发送缓冲区和接收缓冲区,也称为套接字缓冲区。首先我们先知道缓冲区存在于哪个位置? 其中缓冲区存在于Socket Library层。 而我们的发送窗口和接收窗口就存在于缓冲区当中。在实现滑动窗口时则将两个指针指向缓冲区…

STM32F103调试DMA+PWM 实现占空比逐渐增加的软启效果

实现效果:DMAPWM 实现PWM输出时,从低电平到输出占空比逐渐增加再到保持高电平的效果,达到控制 MOS 功率开关软启的效果。 1.配置时钟 2.TIM 的 PWM 功能配置 选择、配置 TIM 注意:选择 TIM 支持 DMA 控制输出 PWM 功能的通道&a…

使用Unity的准备

下载Unity 下载Unity Hub Unity - 实时内容开发平台 | 3D、2D、VR & AR可视化https://unity.cn/ 创建账号或者登入账号 Unity安装 路径尽量为英文路径 登入账号 点击头像登入账号 这里已经登入 打开偏好 设置中文 添加许可证 获取免费版的即可 安装编辑器 新建项目…

mysql-PXC实现高可用

mysql8.0使用PXC实现高可用 什么是 PXC PXC 是一套 MySQL 高可用集群解决方案,与传统的基于主从复制模式的集群架构相比 PXC 最突出特点就是解决了诟病已久的数据复制延迟问题,基本上可以达到实时同步。而且节点与节点之间,他们相互的关系是…

PHP一站式解决方案高级房产系统小程序源码

一站式解决方案,高级房产系统让房产管理更轻松 🏠【开篇:告别繁琐,迎接高效房产管理新时代】🏠 你是否还在为房产管理的繁琐流程而头疼?从房源录入、客户咨询到合同签订、售后服务,每一个环节…

【CSS】如何写渐变色文字并且有打光效果

效果如上,其实核心除了渐变色文字的设置 background: linear-gradient(270deg, #d2a742 94%, #f6e2a7 25%, #d5ab4a 48%, #f6e2a7 82%, #d1a641 4%);color: #e8bb2c;background-clip: text;color: transparent;还有就是打光效果,原理其实就是两块遮罩&am…

7、关于LoFTR

7、关于LoFTR LoFTR论文链接:LoFTR LoFTR的提出,是将Transformer模型的注意力机制在特征匹配方向的应用,Transformer的提取特征的机制,在自身进行,本文提出可以的两张图像之间进行特征计算,非常适合进行特…

“弹性盒子”一维布局系统(补充)——WEB开发系列31

弹性盒子是一种一维布局方法,用于根据行或列排列元素。元素可以扩展以填补多余的空间,或者缩小以适应较小的空间,为容器中的子元素提供灵活的且一致的布局方式。 一、什么是弹性盒子? CSS 弹性盒子(Flexible Box Layo…

提高开发效率的实用工具库VueUse

VueUse中文网:https://vueuse.nodejs.cn/ 使用方法 安装依赖包 npm i vueuse/core单页面使用(useThrottleFn举例) import { useThrottleFn } from "vueuse/core"; // 表单提交 const handleSubmit useThrottleFn(() > {// 具…

策略模式的小记

策略模式 策略模式支付系统【场景再现】硬编码完成不同的支付策略使用策略模式,对比不同(1)支付策略接口(2)具体的支付策略类(3)上下文(4)客户端(5&#xff0…

python 交互模式怎么切换目录

假如要用交互界面调用一个.py文件: (1)用cmd界面定位到文件位置,如cd Desktop/data/ #进入desktop下data目录。 (2)接着打开python(输入python) 调用os (1&#xff0…

Linux df命令详解,Linux查看磁盘使用情况

《网络安全自学教程》 df 一、字段解释二、显示单位三、汇总显示四、指定目录五、指定显示字段六、du和df结果不一样 df(disk free)命令用来查看系统磁盘空间使用情况。 参数: -h:(可读性)显示单位&#…

Mobile-Agent赛题分析和代码解读笔记(DataWhale AI夏令营)

前言 你好,我是GISer Liu,一名热爱AI技术的GIS开发者,本文是DataWhale 2024 AI夏令营的最后一期——Mobile-Agent赛道,关于赛题分析和代码解读的学习文档总结;这边作者也会分享自己的思路; 本文是对原视频的…

万象奥科参展“2024 STM32全国巡回研讨会”—深圳站、广州站

9月3日-9月5日,万象奥科参展“2024 STM32全国巡回研讨会”— 深圳站、广州站。此次STM32研讨会将会走进全国11个城市,展示STM32在智能工业、无线连接、边缘人工智能、安全、图形用户界面等领域的产品解决方案及多样化应用实例,深入解读最新的…

指针之旅(3)—— 指针 与 数组

目录 1. 数组名的两种意义 2. 指针访问数组(指针也能下标引用) 3. 一维数组传参的本质 和 sizeof在函数中失效的原因 4. 指针数组 4.1 指针数组的概念 4.2 一级指针数组 4.3 一级指针数组模拟实现二维数组 5. 数组、指针 与 字符串 6. 数组指针…

微信小程序接入客服功能

前言 用户可使用小程序客服消息功能,与小程序的客服人员进行沟通。客服功能主要用于在小程序内 用户与客服直接沟通用,本篇介绍客服功能的基础开发以及进阶功能的使用,另外介绍多种客服的对接方式。 更多介绍请查看客服消息使用指南 客服视…

多头切片的关键:Model 类 call解释;LlamaModel 类 call解释;多头切片的关键:cache的数据拼接

目录 Model 类 call解释 LlamaModel 类 call解释 方法签名 方法体 总结 Model 类 call解释 这段代码定义了一个特殊的方法 __call__,它是Python中的一个魔术方法(magic method),允许类的实例像函数那样被调用。在这个上下文中,这个方法很可能被定义在一个封装了某种…

【2025】公司仓库管理系统的设计与实现(公司仓库信息管理系统,仓库信息系统,管理系统,信息管理系统,货物仓管系统)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…