kernel
文章平均质量分 60
chenpuo
这个作者很懒,什么都没留下…
展开
-
Arm64内存屏障
一、内存类型ARMv8架构将系统中所有的内存,按照它们的特性,划分成两种,即普通内存和设备内存。并且它们是互斥的,也就是说系统中的某段内存要么是普通内存,要么是设备内存,不能都是。1)普通内存(Normal Memory)普通内存的特性是,在没有别的写入的情况下,每次读取出来的值都是一样的。针对普通内存,Arm处理器会采用比较激进的优化方式,从而导致指令重排序的问题。普通内存可以被指定为支持缓存(Cached)或不支持缓存(Non-Cached)。如果两个模块之间不支持数据一致性协议,那么它们之转载 2021-05-14 18:11:04 · 872 阅读 · 0 评论 -
ebpf
x86 ubuntu 18.04先装bcc http://kerneltravel.net/blog/2020/ebpf_ljr_no1/再装bptracehttps://www.sohu.com/a/415376553_476857Androidhttps://blog.csdn.net/grackergao/article/details/107054390android 10上直接 external/adeb...原创 2021-01-01 19:18:46 · 299 阅读 · 0 评论 -
内核编程--task struct
查找线程 struct pid *pid; int level = 4090; struct task_struct *task; pid = find_vpid(level); task = pid_task(pid, PIDTYPE_PID);遍历所有进程 for_each_process(task) { printk(KERN_ERR "comm=%s pid=%d \n", task->comm, tas...原创 2020-12-11 15:58:35 · 212 阅读 · 0 评论 -
reserved-memory和memreserve 区别
转载自:http://www.voidcn.com/article/p-qxdokkft-bqd.htmlDevicetree 提供了两种方式预留内存: reserved-memory和memreservememreserve示例/memreserve/ 0x40000000 0x01000000reserved-memory示例 rese...转载 2020-04-21 14:54:47 · 2434 阅读 · 0 评论 -
linux rcu锁的使用
https://blog.csdn.net/xuchenhuics/article/details/78777347?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242网上RCU相关的技术博客比较多,先列几个可供参考的:MagicBoy201写的《再谈Linux内核中的RCU机制》http://blog.chinaunix....转载 2020-04-18 13:53:42 · 657 阅读 · 0 评论 -
softlockup/hardlockup原理详细介绍
转载自https://blog.csdn.net/hzj_001/article/details/100054659主体涉及到了3个机制:kernel watchodog线程,高精度定时器(时钟中断),基于PMU硬件perf event的NMI(不可屏蔽中断)。基本思想:1.)(soft lockup):抢占被长时间关闭而导致其余进程无法调度2.)(har...转载 2020-01-15 20:55:58 · 1811 阅读 · 0 评论 -
Linux中断管理机制
转自https://www.cnblogs.com/arnoldlu/p/8659981.html新的linux kernel 及 arm不支持 中断嵌套。关键词:GIC、IAR、EOI、SGI/PPI/SPI、中断映射、中断异常向量、中断上下文、内核中断线程、中断注册。由于篇幅较大,简单梳理一下内容。本章主要可以分为三大部分:讲解硬件背景的1.A...转载 2020-01-13 15:05:44 · 548 阅读 · 0 评论 -
内核死锁案例
出问题附近出现了anr, 很多进程blocked。 ps 看UN状态crash_arm> ps | grep UN 4 2 0 eea39440 UN 0.0 0 0 [kworker/0:0] 106 2 2 ed9c6540 UN 0.0 0 0 [bm_perf]...原创 2018-09-13 16:41:05 · 1554 阅读 · 0 评论 -
Linux内核调试方法总结之sysrq
转载自 https://www.cnblogs.com/justin-y-lin/p/5424555.html sysrq【用途】Sysrq被称为”魔术组合键”, 是内建于Linux内核的调试工具。只要内核没有完全锁住,不管内核在做什么事情,使用这些组合键都可以搜集包括系统内存使用、CPU任务处理、进程运行状态等系统运行信息。【原理】【内核帮助文档kernel/Documen...转载 2018-09-13 16:41:36 · 355 阅读 · 0 评论 -
workqueue之内核公共部分
struct workqueue_struct *__alloc_workqueue_key(const char *fmt, unsigned int flags, int max_active, ...原创 2018-07-06 00:51:18 · 1017 阅读 · 0 评论 -
class 属性使用
static u32 s_addr = 0;static ssize_t efuse_class_show(struct class *class, struct class_attribute *attr, char *buf){ return scnprintf(buf, PAGE_SIZE, "s_addr=0x%x...原创 2018-11-21 21:37:23 · 1201 阅读 · 0 评论 -
二叉查找树、平衡二叉树、红黑树、B-/B+树性能对比
转载自 https://blog.csdn.net/z702143700/article/details/49079107前言:BST、AVL、RBT、B-tree都是动态结构,查找时间基本都在O(longN)数量级上。下面做出详细对比。1. 二叉查找树 (Binary Search Tree)概念二叉查找树又称二叉搜索树,二叉排序树,特点如下: ...转载 2018-06-28 22:55:29 · 610 阅读 · 0 评论 -
用slub track调试use after free问题
死机重启问题中,有部分是访问了已释放的内存导致,这就是典型的userafter free问题.打开CONFIG_SLUB_DEBUG和CONFIG_SLUB_DEBUG_ON宏开关后,系统就可以监测内存的释放与分配调用栈. 1. slab 内存布局slub的内存管理原理这里就不在详述.直接给出slabobject对象的内存布局,object内存包含下面四个部分:object_s...原创 2018-09-13 16:42:12 · 724 阅读 · 0 评论 -
进程调度笔记
static void update_curr(struct cfs_rq *cfs_rq){ curr->sum_exec_runtime += delta_exec; // (1) 累计当前进程的实际运行时间 schedstat_add(cfs_rq, exec_clock, delta_exec); curr->vruntime += calc_de...原创 2018-06-26 15:11:06 · 188 阅读 · 0 评论 -
Linux ioremap 的实现
转载自 https://blog.csdn.net/njuitjf/article/details/40745227在 linux kernel 的代码中,经常看到 ioremap 函数。其功能是将给定的物理地址映射为虚拟地址。注意,此处的物理地址并不是真正内存的物理地址,而是cpu上的io memory。可以参考芯片《Reference Manual》中断 memory map 章节。 0x40...转载 2018-06-18 13:34:27 · 2809 阅读 · 0 评论 -
内存泄漏案例一
如果有其它信息来源,尽量不必要使用crash 工具。原理和之前分析的一致,只是meminfo 来源不一样。1. 首先使用kmem -z 查看系统内存的整体情况发现ANON 占用内存较多为系统中有528MB + 195MB = 733MB 的匿名页 这对于1GB 的内存的机器来说这本身是不正常的。NODE: 0 ZONE: 0 ADDR: c0a8c0c0 NAME: "Normal"S...原创 2018-09-13 16:44:17 · 1658 阅读 · 0 评论 -
task_struct 时间成员相关
[31942.572631] [SC2331]timer[3][31942.572692] [SDIOTRAN]gpio_timer_handler:gpio_opt_tag=0[31942.572814] [SC2331]time[0]crash32> task d9c4ad00 4238PID: 4238 TASK: d9c4ad00 CPU: 0 COMMAN...原创 2018-09-13 16:39:57 · 1190 阅读 · 0 评论 -
linux基础之completion
信号量可以用于实现同步,但往往可能会出现一些不好的结果。例如:当进程A分配了一个临时信号量变量,把它初始化为关闭的MUTEX,并把其地址传递给进程B,然后在A之上调用down(),进程A打算一旦被唤醒就撤销给信号量。随后,运行在不同CPU上的进程B在同一个信号量上调用up()。然而,up()和down()的目前实现还允许这两个函数在同一个信号量上并发。因此,进程A可以被唤醒并撤销临时信号量,而进程原创 2017-01-09 16:15:44 · 644 阅读 · 0 评论 -
hw_breadpoint + kallsyms
转载自关于kallsyms 见下面连接https://blog.csdn.net/xushx_bigbear/article/details/49764199关于hw_breadpoint 见kernel/sample/hw_breakpoint/data_breakpoint.c 目录,data_breakpoint.c 可以直接编译进内核实验ht...转载 2019-08-08 15:22:42 · 155 阅读 · 0 评论 -
uart+ tty+ console
http://man7.org/linux/man-pages/man3/termios.3.html //终端设备各flag 含义, termbits.hhttps://www.cmrr.umn.edu/~strupp/serial.htmlhttp://www.voidcn.com/article/p-ridwjfzg-bba.html查看实际串口对应ttyS...转载 2019-06-11 20:59:31 · 2724 阅读 · 0 评论 -
Linux 时间系统分析
转载自: https://www.binss.me/blog/linux-time-system-analysis/新年新气象,掏出写了很长时间的文章和大家分享。Linux kernel 发展至今,已经形成了一套强大的、复杂的时间系统,用来支撑上层建筑,其主要提供以下两项功能:提供当前的时间和日期 维护定时器,在某个时间点到达时调用回调函数没有良好的时钟系统,时序的...转载 2019-03-13 21:09:42 · 3061 阅读 · 0 评论 -
device tree笔记
参考博客: https://blog.csdn.net/radianceblau/article/details/74722395 1. status 属性一般再.dtsi 里置为disabled,dts里重写为okay;如果不重写为okay,那么driver和deivce不会match,走不到驱动的probe函数。 sdhci0: sdhci@ff160000 {...原创 2018-11-27 11:04:09 · 427 阅读 · 0 评论 -
genalloc
转载自 https://www.douban.com/group/topic/47566535/?refer=related 内核的genalloc是给一些需要自己维护内存分配的内核模块使用的,如SRAM, TCM, Shared-memory等。它提供了最先适配 fist-fit和最佳匹配 best-fit两种分配算法。 first-fit 和 best-fit 这两种都是通过Bi...转载 2018-11-13 10:08:29 · 753 阅读 · 0 评论 -
linux调度器/proc信息解读
转载自 https://blog.csdn.net/wudongxu/article/details/8574755 注下面的时间或时刻都是从rq->clock中获得的,而这个值是由update_rq_clock底层cpu来更新的。并且很多信息是需要内核配置CONFIG_SCHEDSTATS才有。/proc/<pid>/sched $cat /proc/287...转载 2018-09-07 20:22:20 · 1187 阅读 · 0 评论 -
mutex_lockdep_test
#include <linux/init.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/kthread.h>#include <linux/freezer.h>#include <linux/mutex.h>#include <li...原创 2018-06-13 22:57:41 · 200 阅读 · 0 评论 -
linux的page cache&buffer
转自https://blog.csdn.net/fall221/article/details/46290563https://blog.csdn.net/damontive/article/details/805525661.buffer与cached 执行free命令出来的结果,包括buff和cache,实际可用的内存需要看第二行。[root@localhostchenmi...转载 2018-06-12 15:10:44 · 248 阅读 · 0 评论 -
内核线程创建
#include <linux/module.h>#include <linux/kthread.h>#include <linux/delay.h>static int test_func (void *name){ int i = 0; while (1){ printk("test_func of %s...原创 2017-06-15 16:36:37 · 1722 阅读 · 2 评论 -
ARM协处理器CP15寄存器详解
转自 http://blog.csdn.net/gameit/article/details/13169405用于系统存储管理的协处理器CP15MCR{cond} coproc,opcode1,Rd,CRn,CRm,opcode2MRC {cond} coproc,opcode1,Rd,CRn,CRm,opcode2coproc转载 2017-07-04 15:58:11 · 931 阅读 · 0 评论 -
arm linux之data abort异常处理
data abort是ARM体系定义的异常之一。异常发生时,ARM会自动跳转到异常向量表中,通过向量表中的跳转命令跳转到相应的异常处理中去 svc模式进入data abort svc模式进入data abort,也就是Linux的内核模式进入data aboart时,会跳转到__dabt_svc。__dabt_svc: svc_ent...转载 2017-06-30 11:22:02 · 5311 阅读 · 0 评论 -
函数及变量跨模块调用
有时候要获取一个关键接口时,本地没有就需要各种调用了,虽然方法有点暴力,但没辙时还是很有效果的,稍作总结一、C调用C++common/libs/audio/audio_hw.c //再audio hal层调用C++的函数typedef void* FMPcmHandler;extern FMPcmHandler fm_pcm_open(int sampl原创 2017-05-18 16:24:24 · 2384 阅读 · 0 评论 -
linux之softirq
中断处理函数经常拆分成中断上半部分top half和中断下半部分。top half用来执行中断发生后最关键的操作,执行时间尽量短。Bottom half则执行一些比较的耗时的工作。Linux的Bottom Half机制有两个缺点,也即: (1)在任意一时刻,系统只能有一个CPU可以执行Bottom Half代码,以防止两个或多个CPU同时来执行Bottom Half函数而相互干扰。因此...原创 2017-01-24 18:16:29 · 1314 阅读 · 0 评论 -
linux之自旋锁、信号量、互斥锁
===========================自旋锁==========================1)动态定义初始化:spinlock_t sleep_spinlock;//动态初始化制定的spinlock_tspin_lock_init(&sleep_spinlock);2)静态定义初始化:DEFINE_SPINLOCK(sl...原创 2017-01-11 17:11:45 · 687 阅读 · 0 评论 -
linux进程状态
文章基本转载自 http://www.ibm.com/developerworks/cn/linux/l-task-killable/关于进程状态在进程的生命周期内,可能会经历一系列互斥的状态。内核将进程的状态信息保存在 struct task_struct 的 state 字段中。图 1 展示了进程状态之间的转换。图 1. 进程状态转换转载 2017-01-11 11:26:37 · 930 阅读 · 0 评论 -
Linux内核调度算法
转载自 http://www.linuxidc.com/Linux/2012-02/53369.htmLinux内核调度算法================================快速找到最高优先级进程===================为什么要了解内核的调度策略呢?呵呵,因为它值得我们学习,不算是废话吧。内核调度程序很先转载 2017-02-04 14:17:07 · 1185 阅读 · 0 评论 -
linux基础之workqueue
一、workqueue简介workqueue与tasklet类似,都是允许内核代码请求某个函数在将来的时间被调用(抄《ldd3》上的)每个workqueue就是一个内核进程。workqueue与tasklet的区别: 1.tasklet是通过软中断实现的,在软中断上下文中运行,tasklet代码必须是原子的 workqueue是通过内核进程实现的,就没有上述原创 2017-01-09 19:01:24 · 513 阅读 · 0 评论 -
无线资源管理 IEEE802.11K
http://blog.chinaunix.net/uid-20235674-id-159134.html 提供负载均衡 802.11k着眼于两个关键性的WLAN组成要素,即接入点(AP)和客户端,其目的在于使OSI协议栈的一层和二层,即物理层和数据链路层的测量数据能用于上一层。这就意味着上一层将能够做出有关无线环境的决策,并确定在那种无线环境中所需进行的测量。该标准将能实现的一个转载 2016-05-18 17:45:25 · 7355 阅读 · 0 评论 -
linux 内核栈及crash信息介绍
本文转载自 http://blog.chinaunix.net/uid-20788636-id-4377271.html 在工作中经常会遇到一些内核crash的情况,本文就是根据内核出现crash后的打印信息,对其进行了分析,使用的内核版本为:Linux2.6.32。每一个进程的生命周期内,其生命周期的范围为几毫秒到几个月。一般都是和内核有交互,例如用户空间程序使用系统调用转载 2017-09-26 18:12:27 · 2465 阅读 · 0 评论 -
spinlock 及原子操作实现详解
文章转自: http://m.blog.csdn.net/arm7star/article/details/77092650 1、自旋锁结构typedef struct {union {u32 slock;struct __raw_tickets {#ifdef __ARMEB__u16 next; ------ 下一个可以获取自旋锁的处理器,处理器请求自旋...转载 2017-10-20 17:40:51 · 1754 阅读 · 0 评论 -
arm上获取寄存器的值
http://blog.chinaunix.net/uid-20228521-id-1971079.html 本来说在arm上获取寄存器的值是因为需要调试一个很古怪的问题,而在自己的机器上测试的386结构的代码似乎还不如arm上对register的访问自由。大致的想了想似乎arm上得到寄存器的值很简单的样子。所以之前才说可能在arm上会比较简单。结果今天上午一试还是当头一棒,毕转载 2017-11-16 14:29:41 · 4824 阅读 · 0 评论 -
调用栈打印
非android平台的用户空间C 调用栈打印,因为android 平台使用的是bionic,不是glibc,所以android 平台不能使用:#include <execinfo.h>int MAX_CALLSTACK_DEPTH = 32;void *traceback[MAX_CALLSTACK_DEPTH];int depth = backtrace(tracebac...转载 2018-05-24 15:06:12 · 958 阅读 · 0 评论