首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
linux内核的oops
】的更多相关文章
linux内核的oops
什么是Oops?从语言学的角度说,Oops应该是一个拟声词.当出了点小事故,或者做了比较尴尬的事之后,你可以说"Oops",翻译成中国话就叫做“哎呦”.“哎呦,对不起,对不起,我真不是故意打碎您的杯子的”.看,Oops就是这个意思. 在Linux内核开发中的Oops是什么呢?其实,它和上面的解释也没什么本质的差别,只不过说话的主角变成了Linux.当某些比较致命的问题出现时,我们的Linux内核也会抱歉的对我们说:“哎呦(Oops),对不起,我把事情搞砸了”.Linux内核在发生ker…
Linux内核crash/Oops异常定位分析方法
在内核开发的过程中,经常会碰到内核崩溃,比如空指针异常,内存访问越界.通常我们只能靠崩溃之后打印出的异常调用栈信息来定位crash的位置和原因.总结下分析的方法和步骤. 通常oops发生之后,会在串口控制台或者dmesg日志输出看到如下的log,以某arm下linux内核的崩溃为例, <2>[515753.310000] kernel BUG at net/core/skbuff.c:1846! <1>[515753.310000] Unable to handle kernel…
linux内核发生Oops时怎么办?
1. 定位发生Oops的代码 1.1 通过addr2line命令定位 aarch64-openwrt-linux-gnu-addr2line -e vmlinux ffff000008087f00 1.2 查询内核符号表和反汇编信息定位 1.2.1 查询对应函数的地址 aarch64-openwrt-linux-gnu-nm vmlinux |grep __memcpy_toio 输出: ffff000008087ec0 T __memcpy_toio 1.2.2 获取指定地址之间的反汇编信息…
《Linux内核设计与实现》课本第十八章自学笔记——20135203齐岳
<Linux内核设计与实现>课本第十八章自学笔记 By20135203齐岳 通过打印来调试 printk()是内核提供的格式化打印函数,除了和C库提供的printf()函数功能相同外还有一些资深的特殊功能 健壮性 在任何时候内核的任何地方都能调用printk()函数,只有在终端还未初始化的时候不能调用. 在中断上下文和进程上下文中被调用 在任何持有锁时被调用 在多处理器上同时被调用,并且不必使用锁. 解决办法是提供一个变体函数early _ printk(),但这种办法在某些硬件体系结构上无法…
linux 内核邮件列表
第一节 - 一般性问题 1. 为什么有些时候使用“GNU/Linux"而另一些时候使用“Linux”? 答:在这个FAQ中,我们尝试使用“linux”或者“linux kernel”来表示内核,而GNU/Linux用于表示整个GNU/GPL的操作系统软件.我们需要分清:) FAQ的目的是提供linux内核更多的信息并避免语义上的歧义.更多GNU软件和linux关系的讨论可以在http://www.gnu.org/gnu/linux-and-gnu.html获取.看上去很多人都忽视了linux内核…
《linux内核设计与实现》读书笔记第十八章
第18章 调试 18.1 准备开始 准备工作需要的是: 一个bug 一个藏匿bug的内核版本 相关内核代码的知识和运气 18.2 内核中的bug 内核中bug的产生原因 从明白无误的错误代码——没有把正确的值存放在恰当的位置 同步时发生的错误——共享变量锁定不当 错误地管理硬件——错误的控制寄存器发送错误的指令 危害: 从降低所有程序的运行性能到毁坏数据 使得系统处于死锁状态 18.3 通过打印来调试 prink()是内核的格式化打印程序. 18.3.1 健壮性 prink()函数健壮性——任何…
《Linux内核设计与实现》CHAPTER18阅读梳理
<Linux内核设计与实现>CHAPTER18阅读梳理 [学习时间:2hours] [学习内容:bug的来源分析:bug调试途径] 一.bug来源 1.内核中的bug 内核中的bug表现得不像用户级程序中那么清晰——因为内核.用户以及硬件之间的交互会很微妙: 从隐藏在源代码中的错误到展现在目击者面前的bug,往往是经历一系列连锁反应的事件才可能触发的. bug二.调试方法 1.通过打印来调试 优势: 健壮性是printk()函数最容易让人们接受的一个特质(使用环境和时机很广泛): printk…
《Linux内核设计与实现》课本第一章&第二章学习笔记
<Linux内核设计与实现>课本学习笔记 By20135203齐岳 一.Linux内核简介 Unix内核的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆文件,对数据和设备的操作都是通过一套相同的系统调用接口进行的. Unix内核和相关的系统工具都是用C语言编写成的. Unix进程创建非常迅速. Unix提供了一套简单而稳定的进程间通信原语. Unix现在已经发展为一个支持抢占式多任务.多线程.虚拟内存.换页.动态链接和TCP/IP网络的现代化操作系统. 操作系统…
Linux内核分析——跟踪分析Linux内核的启动过程
万子惠 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程 实验部分 menu程序: cd LinuxKernel/ qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img 其中: 1.qemu 是一个快速的动态译指的虚拟机 2.-kernel bzImage: 内核镜像 3.-initrd file使用file作为初始的ram磁盘. gdb (gdb)file linux-3.18.6/vmlinu…
Linux内核分析之跟踪分析Linux内核的启动过程
一.实验过程 使用实验楼虚拟机打开shell cd LinuxKernel/ qemu -kernel linux-/arch/x86/boot/bzImage -initrd rootfs.img 内核启动进入 menu 程序.下面是用 gbd 来跟踪内核的启动过程: gdb (gdb)file linux-/vmlinux # 在gdb界面中targe remote之前加载符号表 (gdb)target remote: # 建立gdb和gdbserver之间的连接,按c 让qemu上的Lin…
《Linux内核设计与实现》读书笔记(十八)- 内核调试
内核调试的难点在于它不能像用户态程序调试那样打断点,随时暂停查看各个变量的状态. 也不能像用户态程序那样崩溃后迅速的重启,恢复初始状态. 用户态程序和内核交互,用户态程序的各种状态,错误等可以由内核来捕获并显示. 而内核是直接和硬件交互的,内核出错之后整个系统就无法正常运行了,所以要想熟练的进行内核调试, 首先要熟悉内核已经给我们提供的工具,然后实实在在的去做一些内核功能的开发,在开发的过程中不断熟悉内核代码,增加内核调试的经验. 主要内容: 内核调试的难点 内核调试的工具和方法 总结 1. 内…
Linux内核启动分析过程-《Linux内核分析》week3作业
环境搭建 环境的搭建参考课件,主要就是编译内核源码和生成镜像 start_kernel 从start_kernel开始,才真正进入了Linux内核的启动过程.我们可以把start_kernel看做平时用C编程时的main函数. 在平时应用程序编程中,main函数并不是一开始就启动的,而是先使用汇编和C准备一些变量,例如我们使用的argc和argv参数,以及一些全局变量的初始化.所以我们使用gdb调试程序时,使用bt打印栈痕迹,发现最下面的函数并不是main,而是__libc_start_main…
《linux内核设计与实现》读书笔记第一、二章
第一章 Linux内核简介 1.1 Unix的历史 1971年,Unix被移植到PDP-11型机中. 1973年,Unix操作系统用C语言改写——为Unix系统的广泛移植铺平了道路. 1977年,伯克利推出1BSD系统 1994年,伯克利推出Unix系统的最终官方版——4.4BSD unix强大的根本原因 (1)简洁:仅提供系统调用并有一个非常明确的设计目的 (2)抽象:所有东西都被当做文件对待 (3)可移植性:使用C语言编写,可移植能力强 (4)进程:创建迅速,独特的fork系统调用 : (5…
Linux内核调试方法总结【转】
转自:http://my.oschina.net/fgq611/blog/113249 内核开发比用户空间开发更难的一个因素就是内核调试艰难.内核错误往往会导致系统宕机,很难保留出错时的现场.调试内核的关键在于你的对内核的深刻理解. 一 调试前的准备 在调试一个bug之前,我们所要做的准备工作有: 有一个被确认的bug. 包含这个bug的内核版本号,需要分析出这个bug在哪一个版本被引入,这个对于解决问题有极大的帮助.可以采用二分查找法来逐步锁定bug引入版本号. 对内核代码理解越深刻越好,同…
从linux内核代码分析操作系统启动过程
朱宇轲 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 在本次的实验中,我们将通过简单分析Linux内核代码来探讨操作系统的启动过程. 计算机启动的过程其实在Andrew S.Tanenbaum所著的<现代操作系统>(中文版第18页)中就有大略的描述: 1.计算机启动时,存储在RAM中的BIOS程序检查计算机的所有设备,包括RAM.键盘.鼠标.ISA及PCI总线上的设…
linux内核调试指南
linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 建立调试环境 发行版的选择和安装 安装交叉编译工具 bin工具集的使用 qemu的使用 initrd.img的原理与制作 x86虚拟调试环境的建立 arm虚拟调试环境的建立 arm开发板调试环境的建立 gdb基础 基本命令 gdb之gui gdb技巧 gdb宏 汇编基础--X86篇 用户手册 AT&…
通过从代码层面分析Linux内核启动来探知操作系统的启动过程
通过从代码层面分析Linux内核启动来探知操作系统的启动过程 前言说明 本篇为网易云课堂Linux内核分析课程的第三周作业,我将围绕Linux 3.18的内核中的start_kernel到init进程启动过程来深入探知操作系统的启动,文中的代码来自Linux Kernel Organization的3.18.9内核源码 本篇关键词:init进程,idle进程,Linux内核启动 分析 分析说明 分析过程将把主要精力放在关键代码的分析上,代码分析的方式我是采用注释说明的方法,这样比较简洁直观,对于…
linux内核启动参数
Linux内核启动参数 Console Options 参数 说明 选项 内核配置/文件 console=Options 用于说明输出设备 ttyn 终端 ttySn[,options], ttyUSB0[,options] 串口uart,io,addr[,options],uart,mmio,addr[,options]&<60; netconsole=[src-port]@[src-ip]/[dev],[target-por…
LINUX 内核调试基础+编程基础
http://blog.chinaunix.net/uid-20564848-id-73208.html 内核文档:[root@localhost Documentation]# pwd /usr/src/kernels/linux-/Documentation [root@localhost Documentation]# ls -INDEX i2o parport.txt ABI ia64 PCI accounting ics932s401 pcmcia acpi ide pi-futex.…
【转】Linux内核调试方法总结
目录[-] 一 调试前的准备 二 内核中的bug 三 内核调试配置选项 1 内核配置 2 调试原子操作 四 引发bug并打印信息 1 BUG()和BUG_ON() 2 dump_stack() 五 printk() 1 printk函数的健壮性 2 printk函数脆弱之处 3 LOG等级 4 记录缓冲区 5 syslogd/klogd 6 dmesg 7 注意 8 内核printk和日志系统的总体结构 9 动态调试 六 内存调试工具 1 MEMWATCH 2…
ARMv8 Linux内核异常处理过程分析
NOTE:为了方便大家阅读,制作了PDF版文档.下载请猛戳这里 老样子,为了赚点积分下载其它人的文件,下载以上资料须要资源分2分. 假设没有积分请留言全部文档,留下邮箱就可以. 看了Linaro提供的开源ARMv8 Linux内核源代码,发现ARMv8异常处理与ARMv7及之前的架构有所不同,简单分析. LinaroARMv8工程:http://www.linaro.org/engineering/engineering-projects/armv8 1.1 Linux内核异常处理相关文件 Li…
Linux内核分析(七)----并发与竞态
原文:Linux内核分析(七)----并发与竞态 Linux内核分析(七) 这两天家里的事好多,我们今天继续接着上一次的内容学习,上次我们完善了字符设备控制方法,并深入分析了系统调用的实质,今天我们主要来了解一下并发和竞态. 今天我们会分析到以下内容: 1. 并发和竞态简介 2. 竞态解决办法 3. 为我们的虚拟设备增加并发控制 在前几次博文我们已经实现了简单的字符设备,看似完美但我们忽视了一个很严重的问题,即并发问题,那么什么是并发,又如何解决并发呢,我们下面进行…
Linux内核探索之路——关于方法
转载自:http://blog.chinaunix.net/uid-20608849-id-3014502.html Linux内核实践之路 -给那些想从Linux内核找点乐趣的人 一个不能回避的尴尬问题:研究Linux内核是不是必须要通过研读那些错综复杂的"邪恶"代码,才能真正理解它? 关于方法 "术业要有专攻".还记得大学时候训练英语的听说能力.每天到多媒体教室上一个多小时 的课,但是一个学期下来,英语听说水平不但没有任何进展,还导致了对英语学习的厌…
2018-2019-1 20189201《Linux内核原理与分析》第四周作业
1. 阴天☁️ 你说你爱烟雨微茫,雨来时你却伞遮霓裳: 你说你爱春光灿烂,阳光普照时你却孑然惆怅: 你说你爱微风轻柔,风拂发梢时你却紧闭门窗: 这便是为何你说你也深深爱我,我却眼波成霜. 2. 今日发问,如何写博客.如何排版 一.书本第三章知识总结 计算机的三大法宝 存储程序计算机 函数调用堆栈 中断 操作系统的两把宝剑 中断上下文的切换--保存现场和恢复现场 进程上下文的切换 Linux内核源码的目录结构如下所示. 关键的目录 arch:arch目录在Linux内核目录中占比相当庞大,主要原因…
Linux内核线程kernel thread详解--Linux进程的管理与调度(十)
内核线程 为什么需要内核线程 Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进程的种种合理以及不合理的请求). 内核需要多个执行流并行,为了防止可能的阻塞,支持多线程是必要的. 内核线程就是内核的分身,一个分身可以处理一件特定事情.内核线程的调度由内核负责,一个内核线程处于阻塞状态时不影响其他的内核线程,因为其是调度的基本单位. 这与用户线程是不一样的.因为内核线程只运行在内核态 因此,它只能使用大于PAGE_OFFSET(传统的x86_32上是3G)的地址空间. 内核线程概述 内…
Linux内核同步
Linux内核剖析 之 内核同步 主要内容 1.内核请求何时以交错(interleave)的方式执行以及交错程度如何. 2.内核所实现的基本同步机制. 3.通常情况下如何使用内核提供的同步机制. 内核如何为不同的请求服务 哪些服务? ====>>> 为了更好地理解内核是如何执行的,我们把内核看做必须满足两种请求的侍者:一种请求来自顾客,另一种请求来自数量有限的几个不同的老板.对于不同的请求,侍者采用如下的策略: 1.老板提出请求时,如果侍者空闲,则侍者开始为老板服务. 2.如果老板提出请…
Linux内核调试方法总结
Linux内核调试方法总结 一 调试前的准备 二 内核中的bug 三 内核调试配置选项 1 内核配置 2 调试原子操作 四 引发bug并打印信息 1 BUG()和BUG_ON() 2 dump_stack() 五 printk() 1 printk函数的健壮性 2 printk函数脆弱之处 3 LOG等级 4 记录缓冲区 5 syslogd/klogd 6 dmesg 7 注意 8 内核printk和日志系统的总体结构 9 动态调试 六 内存调试工具 1 ME…
《Linux内核原理与分析》第四周作业
课本:第3章 MenuOS的构造 内容总结 计算机的"三大法宝" 存储程序计算机 函数调用堆栈 中断 操作系统的"两把宝剑" 中断上下文切换:保存现场和恢复现场 进程上下文切换 在接触linux内核源代码时,linux是基于一个稳定版的内核Linux-3.18.6.其内核源码的目录结构如下: 其中,arch目录是与体系结构相关的子目录列表,里面存放了许多CPU体系结构的相关代码.arch目录中的代码在linux内核代码中占比相当庞大,主要是因为arch目录中的代码可…
《Linux内核设计与实现》 第一二章学习笔记
<Linux内核设计与实现> 第一二章学习笔记 第一章 Linux内核简介 1.1 Unix的历史 Unix的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆文件,对数据和设备的操作都是通过一套相同的系统调用接口进行的. Unix内核和相关的系统工具都是用C语言编写成的. Unix进程创建非常迅速. Unix提供了一套简单而稳定的进程间通信原语. Unix现在已经发展为一个支持抢占式多任务.多线程.虚拟内存.换页.动态链接和TCP/IP网络的现代化操作系统. 1.…
《Linux内核设计与实现》第十八章读书笔记
1.内核中的bug 内核中的bug表现得不像用户级程序中那么清晰——因为内核.用户以及硬件之间的交互会很微妙: 从隐藏在源代码中的错误到展现在目击者面前的bug,往往是经历一系列连锁反应的事件才可能触发的. 内核调试的难点 重现bug困难 调试风险比较大 定位bug的初始版本困难 2. 内核调试的工具和方法 2.1 输出 LOG 输出LOG不光是内核调试, 即使是在用户态程序的调试中, 也是经常使用的一个调试手段. 通过在可疑的代码周围加上一些LOG输出, 可以准确的了解bug发生前后的一些重要…