自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 深入理解overlayfs(二):使用与原理分析

在初步了解overlayfs用途之后,本文将介绍如何使用overlayfs以及理解该文件系统所特有的一些功能特性。由于目前主线内核对overlayfs正在不断的开发和完善中,因此不同的内核版本改动可能较大,本文尽量与最新的内核版本保持一致,但可能仍会存在细微的出入。内核版本:Linux-4.14示例环境:pi3挂载文件系统挂载文件系统的基本命令如下:mount -t overlay overlay...

2017-12-10 18:16:21 50533 17

原创 深入理解overlayfs(一):初识

Overlayfs是一种类似aufs的一种堆叠文件系统,于2014年正式合入Linux-3.18主线内核,目前其功能已经基本稳定(虽然还存在一些特性尚未实现)且被逐渐推广,特别在容器技术中更是势头难挡。本文先来大致认识一下什么是Overlayfs,它有什么应用场景和使用限制。

2017-09-09 16:49:04 36337 7

原创 Ext4 Project Quota磁盘配额使用介绍

Disk quota磁盘配额技术是一种限制用户使用文件系统空间使用的技术,本文介绍其中Linux最新的project quota技术在ext4文件系统中的基本概念和应用方法。

2017-07-26 22:48:49 12590

原创 Linux内核调试技术——Fault-injection故障注入

Fault-injection用于模拟各种内核的异常场景,包括内存slab分配失败、内存页分配失败、磁盘IO错误、磁盘IO超时、futex锁错误以及专门针对mmc的IO错误。本文介绍Fault-injection的用法和实现。

2017-05-21 19:17:37 16491 11

原创 Linux fsync和fdatasync系统调用实现分析(Ext4文件系统)

本文将介绍Linux系统中的fsync和fdatasync的功能和区别,并以Ext4文件系统为例,详细分析内核如何将文件数据同步到磁盘。

2017-03-18 23:49:38 13822 3

原创 Linux内核调试技术——kretprobe使用与实现

前两篇博文介绍了kprobes探测技术中kprobe和jprobe的使用与实现。本文介绍kprobes中的最后一种探测技术kretprobe,它同样基于kprobe实现,可用于探测函数的返回值以及计算函数执行的耗时。本文首先通过一个简单的示例程序介绍kretprobe的使用方式,然后通过源码分析它是如何实现的。

2017-02-02 18:37:36 8021

原创 Linux内核调试技术——jprobe使用与实现

本文介绍Linux kprobes调试技术中第二种探测技术jprobe,它基于kprobe实现,内核开发人员可以非常方便的用它来探测函数的运行与入参值。本文首先通过一个简单的示例介绍jprobe的使用方式,然后通过源码详细分析jprobe的实现流程。

2017-01-28 18:26:00 10736 2

原创 Linux内核调试技术——kprobe使用与实现

Linux kprobes调试技术是内核开发者们专门为了便于跟踪内核函数执行状态所设计的一种轻量级内核调试技术。利用kprobes技术,内核开发人员可以在内核的绝大多数指定函数中动态的插入探测点来收集所需的调试状态信息而基本不影响内核原有的执行流程。

2016-12-18 16:43:03 47836 6

原创 Linux内核调试技术——进程上下文R状态死锁监测

本文介绍另一种死锁状态的监测手段——R状态死锁监测。R状态死锁指的是某一任务一直处于TASK_RUNNING态且一直占用着CPU,从而导致其他进程得不到调度而饿死的情况。一般情况下,R状态死锁较可以出现在内核态的进程上下文中(内核配置为非抢占式,soft lockup),也可以出现在中断上下文中的中断处理程序中(hard lockup)。这种死锁现象较难定位,内核也同样提供了一种检测手段来检测这种死锁并向用户发出告警——LOCKUP_DETECTOR,本文仅分析其中SOFTLOCKUP_DETECTOR中的

2016-09-04 19:44:25 6622 1

原创 Linux内核调试技术——进程D状态死锁检测

Linux的进程有一种状态等待为TASK_UNINTERRUPTIBLE,称为D状态,该种状态下进程不接收信号,只能通过wake_up唤醒。处于这种状态的情况有很多,例如mutex锁就可能会设置进程于该状态,有时候进程在等待某种IO资源就绪时(wait_event机制)会设置进程进入该状态。一般情况下,进程处于该状态的时间不会太久,但若IO设备出现故障或者出现进程死锁等情况,进程就可能长期处于该状态而无法再返回到TASK_RUNNING态。因此,内核为了便于发现这类情况设计出了hung task机制专门用于

2016-07-17 15:02:53 19231 6

原创 Linux应用程序错误使用pthread_mutex_lock互斥锁触发SIG_ABRT信号的原因分析

本文分析在Linux应用程序中错误使用pthread_mutex锁时会概率性触发SIG_ABRT信号而导致程序崩溃(库打印输出 :Assertion `mutex->__data.__owner == 0' failed)的原因。

2016-06-05 21:00:42 18116 2

原创 树莓派启用看门狗watchdog

树莓派内核默认没有启用看门狗功能,当内核挂死时将进入“死机”状态或kgdb调试状态,并不会自动重启系统。本文为树莓派开启看门狗功能,当出现系统崩溃时会自动重启Linux系统。

2016-05-08 13:35:11 12433 2

原创 Generic Netlink内核实现分析(二):通信

前一篇博文中分析了Generic Netlink的消息结构及内核初始化流程,本文中通过一个示例程序来了解Generic Netlink Family的注册初始化以及内核和应用层之间的通信流程。

2016-05-01 20:24:58 15054 3

原创 Generic Netlink内核实现分析(一):初始化

Generic Netlink 是内核专门为了扩展netlink协议簇而设计的“通用netlink协议簇”,它基于Netlink子系统。本文以Generic Netlink为例来深入分析一下Netlink和Generic Netlink的消息结构以及子系统的创建初始化流程。

2016-04-22 23:27:50 13131 1

原创 Netlink 内核实现分析(二):通信

Netlink 是一种用于内核与用户空间通信的IPC(Inter Process Commumicate)机制,本文主要分析内核空间和用户空间使用netlink进行通信的具体流程。

2016-04-03 16:15:24 10297 1

原创 Netlink 内核实现分析(一):创建

Netlink 是一种用于内核与用户空间通信的IPC(Inter Process Commumicate)机制,本文主要讲解netlink子系统的初始化、内核套接字的创建、用户层套接字的创建及绑定。

2016-03-20 14:38:24 21990 3

原创 构建Linux内核驱动demo子系统示例

本文参考内核RTC子系统并提取出一个简单的demo驱动子系统框架示例程序,可作为模板,适用于一些简单的具有类似多外设Linux设备驱动归一化开发。

2016-02-09 15:51:25 4425 2

原创 树莓派添加DTS功能

本文基于u-boot-2005和linux4.1.y,使用最新的DTS方式从外接U盘来引导树莓派b的Linux系统。

2016-01-10 12:51:20 5231

原创 ARM Linux启动流程分析——start_kernel前启动阶段(汇编部分)

本文整理了ARM Linxu启动流程的第二阶段——start_kernel前启动阶段(汇编部分),内核版本为3.12.35。我以手上的树莓派b(ARM11)为平台示例来分析Linux内核在自解压后到跳转运行start_kernel之前所做的主要初始化工作:包括参数有效性验证、创建初始页表和MMU初始化等。

2015-04-26 13:08:34 8963

原创 ARM Linux启动流程分析——内核自解压阶段

本文整理了ARM Linxu启动流程的第一阶段——内核自解压,内核版本为3.12.35。我以手上的树莓派b(ARM11)为平台示例来分析uboot跳转到Linux内核运行后做了哪些初始化动作,以及如何转入真正的内核开始运行。

2015-03-29 12:46:40 7741 6

原创 Linux设备驱动模块自加载示例与原理解析

本文介绍Linux设备驱动模块在设备注册时如何实现自动加载和创建设备节点。在Linux系统中,基于sysfs文件系统、设备驱动模型和udev工具可以实现在设备模块“冷、热”加载时自动加载设备对应的驱动程序,同时可以按需在/dev目录下创建设备节点。本文中我搭建好环境并写了两个简单的示例程序demo_device.c和device_driver.c来模拟“设备”与“驱动”的自动加载和设备节点自动创建的过程。最后通过内核源代码来理解其中的原理知识。

2015-03-14 17:45:39 15859 1

原创 移植u-boot到树莓派

u-boot:官网下载的u-boot-2014.4(ftp://ftp.denx.de/pub/u-boot/) 单板:树莓派b1、 添加自己的单板 首先解压uboot源码,进入根目录,在帮助文档README中有如何添加单板的说明: If the system board that you have is not listed, then you will need to port

2015-02-26 23:39:40 9848

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除