linux 内核编译不能打字,linux系统升级后,手动编译的kernel无法启动问题

linux系统升级后,手动编译的kernel无法启动问题

linux系统升级后,手动编译的kernel无法启动问题

做开发相关,需要编译3.18的kernel,x86_64的,但是我的deepin升级v20之后,编译的kernel就无法启动了,引导不了,直接重启。

解决办法在最后

启动打印如下,然后重启

early console in decompress_kernel

Decompressing Linux... Parsing ELF...

因为重启很快,打印很快闪过,添加启动参数,需要将earlyprintk打印到串口记录下来。

APPEND root=/dev/sda1 rw earlyprintk=ttyS0,115200

grep kernel代码,加了一点打印,发现内核解压完之后,在将程序段复制到内存时失败,memcpy阶段重启了。

还看了下编译过程,但也就限于了解下是如何编译的。

使用readelf分析了下各个文件的信息,和之前可以启动的相比,arch/x86/boot/comprssed/vmlinux.bin程序段个数不一样多。

能力有限,就只能分析到这里了。

因为系统升级前可以,所以问题肯定出在一些软件包,库等更新了,导致编译的东西有问题,但是无法定位哪个软件包有问题。

怀疑对象:ld,objcopy,nm等

编译了master上最新的kernel,启动正常,所以怀疑是kernel是后面修复了这个问题的。

主要怀疑的代码为:arch/x86/boot目录里面的代码

几经曲折,终于发现一个可疑点:

启动失败就是在这个函数,标识位置为最新kernel上有的。

a45b5f0c239ab39da01fed8feaede059.png

合并到我的kernel里面后,系统果然卡在这个位置里面,可见是对齐问题。

然后查看kernel开发日志,找出patch

查找修改这个文件的日志,可以很快找到那次日志

提交日志

从提交记录可以知道,当binutils软件包升级到2.31后,为了减少x86-64可执行文件和共享对象的大小,最大页面大小从2MB减少到4KB。但是x86-64内核必须对齐到2MB,所以出了问题。

修改办法为,添加编译参数,强制2M。

在arch/x86/Makefile中添加如下补丁

diff --git a/arch/x86/Makefile b/arch/x86/Makefile

index 498c1b8123006..1c4d012550ec5 100644

--- a/arch/x86/Makefile

+++ b/arch/x86/Makefile

@@ -223,6 +223,15 @@ KBUILD_CFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr)

LDFLAGS := -m elf_$(UTS_MACHINE)

+ifdef CONFIG_X86_64

+LDFLAGS += $(call ld-option, -z max-page-size=0x200000)

+endif

+

# Speed up the build

KBUILD_CFLAGS += -pipe

# Workaround for a gcc prelease that unfortunately was shipped in a suse release

在arch/x86/boot/compressed/misc.cz中添加检查

--- a/arch/x86/boot/compressed/misc.c

+++ b/arch/x86/boot/compressed/misc.c

@@ -309,6 +309,10 @@ static void parse_elf(void *output)

switch (phdr->p_type) {

case PT_LOAD:

+#ifdef CONFIG_X86_64

+if ((phdr->p_align % 0x200000) != 0)

+error("Alignment of LOAD segment isn't multiple of 2MB");

+#endif

#ifdef CONFIG_RELOCATABLE

dest = output;

dest += (phdr->p_paddr - LOAD_PHYSICAL_ADDR);

binutils包里有什么?

ld,as,strip,ojbcopy,readelf等

GNU_Binutils

linux系统升级后,手动编译的kernel无法启动问题相关教程

Linux邮件服务器搭建实验

Linux邮件服务器搭建实验 Linux邮件服务器搭建实验 本文重点在于后面的搭建过程,前面会简单介绍邮件服务原理与工作流程,如果有什么错误或遗漏的地方,欢迎大家指正批评,谢谢。 电子邮件服务器是处理邮件交换的软硬件设施的总称,包括电子邮件程序、电子邮

Linux的crontab任务调度

Linux的crontab任务调度 目录 任务调度概述 crontab任务调度的流程图 crontab命令的基本语法 实战 任务调度概述 任务调度,是指系统在某个时间执行的特定的命令或程序。任务调度分类:1.系统工作:有些重要的工作必须周而复始地执行。如病毒扫等。2.个别用户工

(一)自己动手写操作系统——环境搭建

(一)自己动手写操作系统——环境搭建 (一)自己动手写操作系统——环境搭建 环境:Mac OS 10.15.4 一、安装NASM brew install nasm NASM全称The Netwide Assembler,是一款基于80x86和x86-64平台的汇编语言编译程序 注:需要先安装brew,使用的版本为:2.1

Linux下安装 SkyWalking 分布式追踪系统--完全无代码入侵【落地

Linux下安装 SkyWalking 分布式追踪系统--完全无代码入侵【落地】 Linux下安装 SkyWalking 分布式追踪系统--完全无代码入侵【落地】 背景: 由于现系统拆分为了分布式系统,对于线上查看错误日志有点费劲 方案: 部署搭建 SkyWalking的分布式追踪系统 一、Sky

ROS启动小海龟

ROS启动小海龟 ROS启动小海龟是检验自己的ROS系统以及UBANTU系统是否安装完全的一个小进程,也是新手入门的试手工具。首先打开终端1(ctrl+alt+t)启动ROS Master 即输入:roscore 第二步打开终端2 启动小海龟仿真器即输入:rosrun turtlesim turtlesim_node

linux下安装tomcat

linux下安装tomcat linux下安装tomcat 1、解压缩安装 前提先把JDK安装好! 上传解压包到tomcat,可以使用下列方式 方式一:使用SecureCRT的上传功能 方式二:不会的可以看这里文件传输软件 WinSCP及xftp的使用 上传后解压:用tar -zxvf 命令解压缩安装tomcat

JAVA简单图书管理系统

JAVA简单图书管理系统 //建议采用不同的类来保存众多方法 import java.util.ArrayList; import java.util.Iterator; import java.util.Scanner; import javax.swing.JOptionPane; public class Main { static Scanner input = new Scanner(System.in);static

Linux下mysql安装

Linux下mysql安装 Linux下mysql安装 下载 压缩包解压 配置my.cnf, 解压、安装mysql 启动mysql 配置root账号自定义密码 设置root账号远程可连接 防火墙开放端口 版本说明 环境:windows10 hyper Linux:centos 8.2 mysql:8.0.20 ps:由于博主只是想在本地的

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

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

相关文章

arcgis api 3.x for js 入门开发系列六地图分屏对比(附源码下载)

前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类的介绍,还有就是在线例子:esri 官网在线例子,这个也是学…

SVN版本管理trunk及branch相关merge操作

先说说什么是branch。按照Subversion的说法,一个branch是某个development line(通常是主线也即trunk)的一个拷贝,见下图: branch存在的意义在于,在不干扰trunk的情况下,和trunk并行开发&#xf…

线程之间通信 等待(wait)和通知(notify)

线程通信概念: 线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程之间的通信就成为整体的必用方式之一。当线程存在通信指挥,系统间的交互性会更强大,在提高CPU利用率的同时还会对线…

女生适合linux运维吗,女生适不适合做Linux运维工程师进入IT行业?

很多人对于女生做Linux运维工程师进入IT还有都存在质疑。因为大多数人认为女生不适合IT行业,IT is a men’sworld,女生学IT是件匪夷所思的事情。在传统的思维当中,女生只适合从事像教师、会计、公务员等稳定的职业。然而,这一莫名…

WPF强制更新

,更新的时候选择最小版本号,就是强制更新 转载于:https://www.cnblogs.com/damsoft/p/6119509.html

a的n次方的最后三位数c语言,求13的n次方(12n≤130000000000)的最后三位数,用c++编程...

#includeintmain(){longlonginti,x,y,last;/*变量last保存求X的Y次方过程中的部分乘积的后三位*///输入while(scanf("%lld,%lld",&x,&y)2){last1;x%1000;//因为一个三位数的n次方的最后三位数只和这个数的最后三位数有关y%100;//因为可以发现这个是一个轮回&…

Selenium2+python自动化5-操作浏览器基本方法

前言 前面已经把环境搭建好了,这从这篇开始,正式学习selenium的webdriver框架。我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可视化工具,我们要学的是webdriver框架的API。 本篇主要讲如何用Python调用we…

deepin20自带c语言,deepin 20.1终于找到你-国产操作系统deepin之初体验

deepin 20.1终于找到你-国产操作系统deepin之初体验前几天刚安装了国产操作系统deepin20.1,使用了几天体验非常好,推荐大家安装使用。这款操作系统确实做的很用心,很不错。日常使用、办公学习、影音娱乐已经完全可以替代Win了。界面简洁友好上…

c语言链表内存分配失败,链表的C语言实现之动态内存分配

链表的C语言实现之动态内存分配來源:互聯網 2008-06-01 02:05:07 評論一、为什么用动态内存分配但我们未学习链表的时候,假如要存储数量比较多的同类型或同结构的数据的时候,总是使用一个数组。比如说我们要存储一个班级学生的某科分数,总是…

android分享图片功能实现原理,Android:简单实现并理解图片三级缓存

学习Android网络开发的过程中,势必会经历很多痛苦的过程,其中一个大坑就是图片缓存,当然现在有很多现成的库非常方便,常常几行代码就可以实现想要的功能,但不懂其中的原理是不行的,所以对于刚开始学习网络编…

连载 3:利用 matlab计算卷积

转载于:https://www.cnblogs.com/WHaoL/p/6155544.html

鸿蒙第一款手机,拿下“国内第一手机商”的OPPO,打算弃用华为鸿蒙?

在华为开发鸿蒙系统之前,我国是没有完全属于自己国家的手机系统,国内的操作系统一直被安卓ios系统所占据。尤其是在国产机中最主要的系统就是安卓,而安卓系统的所属方谷歌每年仅凭这一项系统就可以在中国净收数百亿的利益。许多国人也习惯了使…

安卓手机上运行 PC-E500 程序

目录 第1章安卓手机上运行 PC-E500 程序 1 1 PockEmul 1 2 下载 1 3 打包BASIC程序 2 4 配置PC-E500模拟器 5 5 载入e500.pkm 7 6 载入40000.bin 8 7 解包 10 第1章安卓手机上运行 PC-E500 程序 1 PockEmul 安卓手机上运行PC-E500程序,需要…

2021安徽省高考成绩怎么查询系统,2021年安徽省教育招生考试院成绩查询登录入口...

一、2020年安徽高考成绩查询登录入口二、安徽高考成绩查询新闻资讯最新消息!安徽高考预计7月23日划定各批次录取线并公布高考成绩!7月14日上午,记者跟随省人大代表、省政协委员们一同走进安徽省教育招生考试院网评现场。“今年,我省高考的网上评卷工作继…

Java Web之网上购物系统(提交订单、查看我的订单)

作业终于做完了,好开心。。。。。。虽然这一周经历不是那么顺利,但是觉得还是收获了不少,有过想哭的冲动,代码不会写,事情办不好,各种发愁。空间里发小发了带父母出去游玩的照片,瞬间能量值不知…

html路径详解,详解HTML相对路径和绝对路径

相对路径:以引用文件之网页所在位置为参考基础,而建立出的目录路径。因此,当保存于不同目录的网页引用同一个文件时,所使用的路径将不相同,故称之为相对。绝对路径:以Web站点根目录为参考基础的目录路径。之…

#65279导致页面顶部空白一行解决方法

今天做了两个静态html页面,在浏览器中测试的时候,发现其中一个html页面的顶部多出了些许空白,而另一个页面显示正常。在浏览器中进行了审查对比,发现有空白的那个页面的head标签里面的元素全部跑到了body里面,而且body…

怎么把桌面计算机放到快速启动栏,怎么把桌面图标放到快速启动栏

1. 如何把桌面图标放于快速启动栏拖动图标到任务栏,之后删除桌面图标不行的话点击“开始”菜单→“运行”命令,在弹出的“运行”对话框中输入 regsvr32 /n /i:u shell32 后回车,丢失的图标便又重新回到快速启动栏了再不行的话在Windows操作系…

js 两个map合并为一个map_ArcGIS API for JS3.x教程二:构建第一个简单的程序

本文衔接上文&#xff1a;不睡觉的怪叔叔&#xff1a;ArcGIS API for JS3.x教程一&#xff1a;本地开发环境配置​zhuanlan.zhihu.com一、创建简单的HTML文档创建一个简单的HTML文档&#xff1a;<!DOCTYPE html> <html lang"en"> <head><meta c…

计算机主机组成部分和功能,电脑的组成部分及作用

对于很多人来讲&#xff0c;电脑的使用似乎是一件很稀松平常的事情了。但是对于一些新手或者是一些初学者来说&#xff0c;电脑的相关组成部件还有相应的作用都不是很熟悉&#xff0c;那么电脑的组成部分及作用是什么呢?下面是学习啦小编收集的关于电脑的组成部分及作用&#…