centos6系统编译grub-0.97

2024-09-02 01:08
文章标签 编译 系统 centos6 grub 0.97

本文主要是介绍centos6系统编译grub-0.97,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题一:编译报错

centos5.X和centos6.X系列的系统默认使用的是grub legacy(grub-0.97)版本的引导程序,有定制化需求的就需要对grub进行编译。

尝试在centos6.5系统上进行编译:

./configure 之后报错:configure: error: GRUB requires a working absolute objcopy; upgrade your binutils

1、网上参考其他大佬的方案,是由于gcc版本的问题导致的,使用gcc3.5版本即可。6.5默认的gcc版本是4.4.7,所以该方案没有验证。

2、还有一种方案是去掉--build-id 段,打开configure文件,找到“for link_addr in 2000 8000 7C00; do”位置,在下面的ac_try变量中加入"-Wl,--build-id=none"。

原文如下:

if { ac_try='${CC-cc} ${CFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr conftest.o -o conftest.exec'

修改之后如下:

if { ac_try='${CC-cc} ${CFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr -Wl,--build-id=none conftest.o -o conftest.exec'

此时执行configure,报错消失了。

问题二、stage2等文件过大

1、问题描述

参照上述流程解决了configure问题之后,执行make编译,顺利编译stage1.5阶段和stage2阶段的文件,以stage2为例子,大小居然有250多兆。boot分区要是分配空间过小,生成的stage2等文件是无法进行装载的。

2、修复方法

修复方法也很简单,跟第一个问题一样,只需要加入-Wl,--build-id=none参数即可

为了简单,就不对configure和Makefile.in进行任何修改,只对现成的stage2/Makefile进行修改

找到“PRE_STAGE2_LINK"和“START_LINK”位置,加入“-Wl,--build-id=none”

修改前:

修改之后:

 make之前别忘记make clean清理一下,make编译之后发现生成的stage2文件变小了,还不足100K。

将修改过的stage2放到对应的系统目录中去,执行:

grub-install $(cat /boot/grub/device.map | grep "\/dev\/" | awk '{print $2}' | head -n 1)

就可以愉快的进行测试了!

这篇关于centos6系统编译grub-0.97的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1128565

相关文章

linux系统中java的cacerts的优先级详解

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式... 目录Java 默认使用哪个?如何检查当前使用的信任库?简要了解Java的信任库总结了解 Java 信

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默

在Linux系统上连接GitHub的方法步骤(适用2025年)

《在Linux系统上连接GitHub的方法步骤(适用2025年)》在2025年,使用Linux系统连接GitHub的推荐方式是通过SSH(SecureShell)协议进行身份验证,这种方式不仅安全,还... 目录步骤一:检查并安装 Git步骤二:生成 SSH 密钥步骤三:将 SSH 公钥添加到 github

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻