♥LinuxKernel ♥
文章平均质量分 96
CHENG Jian
天将降大任于是人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,曾益其所不能。
展开
-
Intel CPU 上使用 pmu-tools 进行 TopDown 分析
title: Intel CPU 上使用 pmu-tools 进行 TopDown 分析date: 2021-01-24 18:40author: gatiemetags:- debug- linux- todowncategories:- debugthumbnail:blogexcerpt: 这篇文章旨在帮助希望更好地分析其应用程序中性能瓶颈的人们. 有许多现有的方法可以进行性能分析, 但其中没有很多方法既健壮又正式. 而 TOPDOWN 则为大家进行软硬协同分析提供了无限可能. .原创 2021-01-27 20:13:28 · 4667 阅读 · 0 评论 -
Perfetto for linux-使用 Perfetto 分析调度问题
title: Perfetto for linux-使用 Perfetto 分析调度问题date: 2020-11-21 22:40author: gatiemetags:- scheduler- linux- debugcategories:- schedulerthumbnail:blogexcerpt: Perfetto 工具是 Android 下一代全新的统一的 trace 收集和分析框架, 在 Android 9.0(API级别28)或更高版本的设备上, 可以使用 Syste.原创 2020-11-28 23:23:32 · 6111 阅读 · 0 评论 -
Systrace for Linux-使用 systrace 分析 linux & android 的调度问题
title: Systrace for Linux-使用 systrace 分析 linux & android 的调度问题date: 2020-11-21 20:22author: gatiemetags:- scheduler- linux- debugcategories:- schedulerthumbnail:blogexcerpt: 笔者在日常内核性能优化的工作中, 主要涉及 终端(Android) 和 服务器(Server) 和 嵌入式 (RTOS) 等多个场景,.原创 2020-11-28 23:14:20 · 3723 阅读 · 1 评论 -
使用 INSTALL_MOD_STRIP 在 modules_install 的时候 strip 驱动, 减少磁盘占用
#1 问题描述最近自己编译内核安装内核的时候, 总是遇到 /lib/modules 下空间不够, 导致内核安装有问题. 所以就想裁剪下.分析的时候发现, 系统原生内核 /lib/modules/uname -r` 目录驱动大小只有 100M 左右, 但是我自己编译的驱动目录 1.4G 左右.#2 问题分析##2.1 问题原因如果我们内核开启了 CONFIG_DEBUG_...原创 2020-04-19 19:08:01 · 6160 阅读 · 0 评论 -
Linux Kernel PANIC(一)--概述(Hard Panic/Aieee和Soft Panic/Oops)
======= CSDN GitHub Linux Kernel PANIC概述(Hard Panic/Aieee和Soft Panic/Oops) LDD-LinuxDeviceDrivers/study/debug/modules/panic/01-kernel_panic 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处 1原创 2017-06-25 12:19:55 · 6352 阅读 · 4 评论 -
内核新的ioctl方式--unlocked_ioctl和compat_ioctl(解决error:unknown field 'ioctl' specified in initializer)
CSDN GitHub 内核新的ioctl方式–unlocked_ioctl和compat_ioctl解决error:unknown field ‘ioctl’ specified in initializer LDD/problem/port/ioctl本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作1 问题把早期 2.6原创 2017-05-08 23:19:31 · 15348 阅读 · 0 评论 -
线程的3种实现方式--内核级线程, 用户级线程和混合型线程
之前降解过内核线程、轻量级进程、用户线程三种线程概念解惑(线程≠轻量级进程), 但是一直对其中提到的线程的实现模型比较迷惑, 这次就花了点时间怎么学习了一下子1 线程的3种实现方式在传统的操作系统中,拥有资源和独立调度的基本单位都是进程。在引入线程的操作系统中,线程是独立调度的基本单位,进程是资源拥有的基本单位。在同一进程中,线程的切换不会引起进程切换。在不同进程中进行线程切换,如从一个进程内原创 2016-07-12 20:51:52 · 50722 阅读 · 45 评论 -
Ubuntu14.04搭建LXR本地服务器阅读Linux内核代码
CSDN GitHub Ubuntu14.04搭建LXR本地服务器阅读Linux内核代码 AderXCoding/system/tools/lxr 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处 我开始打算使用 apache2 + mysql + lxr 搭建的. 毕竟嘛网上教程都是这个, 有点坑爹的是网上的教程都是以前的, 和现在原创 2016-11-06 16:58:52 · 4301 阅读 · 7 评论 -
内核添加对yaffs2文件系统的支持
CSDN GitHub 内核添加对yaffs2文件系统的支持 AderXCoding/system/tools/yaffs2 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作 1 yaffs介绍YAFFS, Yet Another Flash File System, 是一种类似于 JFFS/JFFS2 的专门为 Fla原创 2016-11-14 12:38:42 · 6483 阅读 · 0 评论 -
Ubuntu搭建OpenGrok环境阅读Linux内核源代码
CSDN GitHub Ubuntu搭建OpenGrok环境阅读Linux内核源代码 AderXCoding/system/tools/opengrok 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处 1 OpenGrok介绍OpenGrok 是一个快速, 便于使用的源码搜索引擎与对照引擎, 它能够帮助我们快速的搜索、定位、对照代码原创 2016-11-08 16:42:56 · 9413 阅读 · 2 评论 -
构建源码树----Linux内核剖析(三)
linux源码树结构参考 http://www.360doc.com/content/13/0410/17/7044580_277403053.shtml 目录 描述 arch 目录包括了所有和体系结构相关的核心代码。它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel CPU及与之相兼容体系结构的子目录。PC机一般都基于此目录。 block 块设原创 2015-04-10 11:32:15 · 17582 阅读 · 0 评论 -
为arm内核构建源码树----Linux内核剖析(四)
前面说到要做linux底层开发或者编写Linux的驱动,必须建立内核源码树,之前我们提到过在本机上构建源码树—-Linux内核剖析(三),其建立的源码树是针对i686平台的,但是我么嵌入式系统用的是arm平台,这就需要我们为arm板交叉构建一份板子可用的内核源码树。首先下载与你嵌入式系统平台版本号一致的linux内核,我的版本为2.6.35,当然如果你使用的是之前做好的板子,那么内核源码可能已经有了原创 2015-10-01 17:24:00 · 4211 阅读 · 0 评论 -
深入理解计算机系统-之-内存寻址(五)--页式存储管理
前景回顾前面我们讲解了操作系统段式存储管理的主要内容。32位,在保护方式下,其能够访问的线性地址空间可达4GB,而且允许几乎不受存储空间限制的虚拟存储器程序。虚拟存储器地址空间能够可达64TB。它还提供了复杂的存储管理和硬件辅助的保护机构和增加了支持多任务操作系统的特别优化的指令。实际上,64TB的虚拟地址空间是有磁盘等外部存储器的支持下实现的。在编写程序是可以放在磁盘存储器上,但在执行时,必须把原创 2016-02-12 20:36:15 · 8030 阅读 · 0 评论 -
服务器体系(SMP, NUMA, MPP)与共享存储器架构(UMA和NUMA)
1 3种系统架构与2种存储器共享方式1.1 架构概述从系统架构来看,目前的商用服务器大体可以分为三类对称多处理器结构(SMP:Symmetric Multi-Processor)非一致存储访问结构(NUMA:Non-Uniform Memory Access)海量并行处理结构(MPP:Massive Parallel Processing)。共享存储型多处理机有两种模型均匀存储器存取转载 2016-08-02 22:25:29 · 21792 阅读 · 0 评论 -
init_MUTEX被废除(解决error: implicit declaration of function ‘init_MUTEX’)
CSDN GitHub init_MUTEX被废除解决rror: implicit declaration of function ‘init_MUTEX’ LDD/problem/port/init_MUTEX 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处 1 问题近期在移植驱动的时候, 提示了如下错误 error: imp原创 2017-05-10 22:12:45 · 5175 阅读 · 0 评论 -
Linux 内核代码风格--Kernel Coding Style(持续更新-20170616)
CSDN GitHub kernel代码风格 LDD-LinuxDeviceDrivers/tree/study/pattern/code_style 本文创建日期 2017-06-16 10 : 55 基于Linux Kernel V4.11.5 英文原版 参见内核文档 Documentation/process/coding-style.rst 英文原转载 2017-06-16 10:57:44 · 5172 阅读 · 1 评论 -
Linux Kernel PANIC(三)--Soft Panic/Oops调试及实例分析
本文信息 CSDN GitHub Linux Kernel PANIC(三)–Soft Panic/Oops调试及实例分析 LDD-LinuxDeviceDrivers/study/debug/modules/panic/03-soft_panic同类博文信息 CSDN GitHub Linux Kernel PANIC(一)–概述(Hard Panic/Aieee和Sof原创 2017-06-25 13:03:49 · 10934 阅读 · 3 评论 -
qemu中使用 9p virtio, 支持 host 和 guest 中共享目录
title: qemu中使用 9p virtio, 支持 host 和 guest 中共享目录date: 2018-09-30 19:24author: gatiemetags: hexocategories:- hexothumbnail:blogexcerpt: 博文摘要CSDNGitHubHexoAderstep–紫夜阑珊-青伶巷草AderXCod...原创 2018-09-30 19:30:55 · 14239 阅读 · 1 评论 -
Ubuntu 安裝 GNU Global(gtags) 阅读Linux内核源码
CSDN GitHub Ubuntu 安裝 GNU Global(gtags) 阅读Linux内核源码 AderXCoding/system/tools/global本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 也欢迎大家提供一些其他好的调试工具原创 2017-12-16 14:26:51 · 29679 阅读 · 1 评论 -
Linux下用火焰图进行性能分析
CSDN GitHub Linux下用火焰图进行性能分析 LDD-LinuxDeviceDrivers/study/debug/tools/perf/flame_graph本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 也欢迎大家提供一些其他好的调原创 2017-12-24 17:12:48 · 62700 阅读 · 8 评论 -
Linux 内核编译 LOCALVERSION 配置(分析内核版本号自动添加的“+“号)
CSDN GitHub Linux 内核编译 LOCALVERSION 配置(分析内核版本号自动添加的”+”号) AderXCoding/system/tools本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 也欢迎大家提供一些其他好的调试工具以供原创 2017-11-12 10:51:00 · 13422 阅读 · 1 评论 -
kptr_restrict 向用户空间内核中的指针(/proc/kallsyms-modules显示value全部为0)
CSDN GitHub kptr_restrict 向用户空间内核中的指针(/proc/kallsyms-modules显示value全部为0) LinuxDeviceDrivers/study/debug/filesystem/procfs/kptr_restrict本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作因本人技术原创 2017-10-22 18:33:38 · 12009 阅读 · 0 评论 -
获得内核函数地址的四种方法
CSDN GitHub 获得内核函数地址的四种方法 LinuxDeviceDrivers/study/debug/filesystem/procfs/func_addr本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 也欢迎大家提供一些其他好的调试工原创 2017-10-22 14:50:24 · 12013 阅读 · 0 评论 -
Linux强制卸载内核模块(由于驱动异常导致rmmod不能卸载)
CSDN GitHub Linux强制卸载内核模块(由于驱动异常导致rmmod不能卸载) LDD-LinuxDeviceDrivers/study/driver/force_rmmod 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处 1 问题描述在进行驱动编程的时候, 如果驱动出现了异常, insmod, rmmod 或者使用过程中原创 2017-07-14 14:31:21 · 59898 阅读 · 15 评论 -
Linux内核调试的方式以及工具集锦
CSDN GitHub Linux内核调试的方式以及工具集锦 LDD-LinuxDeviceDrivers/study/debug 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作 因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 也欢迎大家提供一些其他好的调试工具以供收录, 鄙人在此谢谢啦原创 2017-04-01 21:31:55 · 33327 阅读 · 3 评论 -
Linux Kernel PANIC(二)--Hard Panic/Aieee实例分析
本文信息 CSDN GitHub Linux Kernel PANIC(二)–Hard Panic/Aieee实例分析 LDD-LinuxDeviceDrivers/study/debug/modules/panic/02-hard_panic同类博文信息 CSDN GitHub Linux Kernel PANIC(一)–概述(Hard Panic/Aieee和Soft原创 2017-06-25 12:25:07 · 3970 阅读 · 0 评论 -
linux下进程的进程最大数、最大线程数、进程打开的文件数和ulimit命令修改硬件资源限制
linux系统中ulimit查看和更改系统限制ulimitulimit用于shell启动进程所占用的资源,可以用来设置系统的限制语法格式 ulimit [-acdfHlmnpsStvw] [size]在/etc/security/limits.conf文件中定义 限制。 命令参数 描述 例子 -H 设置硬资源限制,一旦设置不能增加。 ulimit – Hs 64;限制硬原创 2016-04-04 22:57:29 · 74476 阅读 · 9 评论 -
Linux下套接字详解(十)---epoll模式下的IO多路复用服务器
epoll模型简介epoll可是当前在Linux下开发大规模并发网络程序的热门人选,epoll 在Linux2.6内核中正式引入,和select相似,其实都I/O多路复用技术而已,并没有什么神秘的。其实在Linux下设计并发网络程序,向来不缺少方法,比如典型的Apache模型(Process Per Connection,简称PPC),TPC(Thread PerConnection)模型,以及se原创 2016-03-25 15:10:54 · 7683 阅读 · 3 评论 -
深入理解计算机系统-之-数值存储(二)--C程序打印变量的每一字节或者位
大端与小端前面我们提到了依据CPU端模式的不同,数据的存储顺序也不一样。采用大小模式对数据进行存放的主要区别在于在存放的字节顺序,BE big-endian 大端模式 ,最直观的字节序 ,地址低位存储值的高位,地址高位存储值的低位 ,不需要考虑对应关系,只需要把内存地址从左到右按照由低到高的顺序写出 ,把值按照通常的高位到低位的顺序写出 ,两者对照,一个字节一个字节的填充进去LE little-en原创 2016-02-18 19:20:52 · 4866 阅读 · 1 评论 -
深入理解计算机系统-之-数值存储(三)-- 原码、反码、补码和移码详解
原码 如果机器字长为n,那么一个数的原码就是用一个n位的二进制数,其中最高位为符号位:正数为0,负数为1。剩下的n-1位表示概数的绝对值。PS:正数的原、反、补码都一样:0的原码跟反码都有两个,因为这里0被分为+0和-0。 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制: [+1]原 = 0000 0001 [-1]原 =原创 2016-02-21 15:19:30 · 3444 阅读 · 0 评论 -
深入理解计算机系统-之-数值存储(四)--整数在内存中的存储方式
前景回顾前面我们了解到依据CPU的端模式的架构不同,数据的存储的字节序也不同 BE big-endian 大端模式,最直观的字节序 地址低位存储值的高位,地址高位存储值的低位 ,数据填写时,不要考虑对应关系,只需要把内存地址从左到右按照由低到高的顺序写出,把值按照通常的高位到低位的顺序写出,两者对照,一个字节一个字节的填充进去。 LE little-endian 小端模式,则最符合人的原创 2016-02-21 16:04:16 · 9523 阅读 · 0 评论 -
linux系统启动过程详解-开机加电后发生了什么 --linux内核剖析(零)
http://www.mamicode.com/info-detail-243819.html总的来说在操作系统加电启动之后到main函数执行之前操作系统经历了以下3个大步骤 * 启动BIOS。这个时候位于实模式下,加载中断向量和中断服务程序 * 加载操作系统内核并为保护模式做准备。这个时候操作系统一共加载了3部分代码:引导程序bootsect,内核代码setup,内核代码system模原创 2016-03-17 16:35:32 · 15805 阅读 · 2 评论 -
Linux驱动开发常用调试工具---之内存读写工具devmem和devkmem
问题这段时间实验室要完成一个内存故障注入工具和寄存器故障注入工具,在编写驱动的过程中,调试起来很麻烦(一般都是printk打印出来的,调试起来太不方便),于是想 “可不可以在调试设备驱动的时候,利用一个小工具来读写内存某块区域的值以及CPU中寄存器的值?这点前辈的大神已经为我们找到了,参见《LDD3》的《第十五章 内存映射和DMA》目前已经有这样的工具了devmem和devkmem,就是通过m原创 2016-03-23 18:11:46 · 7383 阅读 · 0 评论 -
Linux下套接字详解(九)---poll模式下的IO多路复用服务器
参照 poll调用深入解析-从poll的实现来讲poll多路复用模型,很有深度poll多路复用poll的机制与select类似,与select在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数量的限制。poll和select同样存在一个缺点就是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述原创 2016-03-25 13:41:37 · 5631 阅读 · 0 评论 -
进程间通信之-信号signal--linux内核剖析(九)
信号及信号来源什么是信号信号是UNIX和Linux系统响应某些条件而产生的一个事件,接收到该信号的进程会相应地采取一些行动。通常信号是由一个错误产生的。但它们还可以作为进程间通信或修改行为的一种方式,明确地由一个进程发送给另一个进程。一个信号的产生叫生成,接收到一个信号叫捕获。信号本质信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是原创 2016-03-27 13:22:21 · 9414 阅读 · 0 评论 -
进程间通信之-信号量semaphore--linux内核剖析(十)
信号量什么是信号量信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。 信号量的值为正的时候,说明它空闲。所测试的线程可以锁定而使用它。若为0,说明它被占用,测试的线程要进入睡眠队列中,等待被唤醒。为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域。临界区域原创 2016-03-28 23:37:37 · 31048 阅读 · 5 评论 -
进程间通信之-共享内存Shared Memory--linux内核剖析(十一)
共享内存共享内存是进程间通信中最简单的方式之一。共享内存是系统出于多个进程之间通讯的考虑,而预留的的一块内存区。共享内存允许两个或更多进程访问同一块内存,就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针。当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更改。关于共享内存当一个程序加载进内存后,它就被分成叫作页的块。通信将存在内存的两个页之间或者两个独立的进程之原创 2016-03-29 15:11:10 · 20253 阅读 · 1 评论 -
进程间通信之-IPCS/IPCRM命令详解--linux内核剖析(十二)
SystemV的IPC通信System V IPC共有三种类型: * System V消息队列System V 信号量System V 共享内存区。 ipcs命令用于报告Linux中进程间通信设施的状态,显示的信息包括消息列表、共享内存和信号量的信息。 SystemV控制选项 选项 描述 -a 显示全部可显示的信息 -q 显示活动的消息队列信息 -m 显示活原创 2016-03-31 15:04:13 · 3097 阅读 · 0 评论 -
linux内核链表以及list_entry--linux内核数据结构(一)
链表是一种复杂的数据结构,其数据之间的相互关系使链表分成三种:单链表、循环链表、双向链表,而内核中的链表又是如何实现的呢? linux内核主要是有C和汇编写成的,C是面向过程的语言,但是linux内核却用C实现了一套面向对象的设计模式,linux内核中处处体现着面向对象的思想传统的链表实现之前我们前面提到的链表都是在我们原数据结构的基础上增加指针域next(或者prev),从而使各个节点原创 2016-04-07 14:03:54 · 4486 阅读 · 2 评论 -
深入理解计算机系统-之-数值存储(一)-CPU大端和小端模式详解
大端与小端在嵌入式开发中,大端(Big-endian)和小端(Little-endian)是一个很重要的概念。MSB与LSB最高有效位(MSB)指二进制中最高值的比特。在16比特的数字音频中,其第1个比特便对16bit的字的数值有最大的影响。例如,在十进制的15,389这一数字中,相当于万数那1行(1)的数字便对数值的影响最大。比较与之相反的“最低有效位”(LSB)。LSB(Least Signif原创 2016-02-18 16:07:00 · 8595 阅读 · 0 评论