
[linux内存管理] 第016篇 /proc/iomem的详细解析
0. 前言 此节点是显示memblock的这部分内存的具体使用情况的。我们可以看到这部分内存很明显不属于虚拟地址,而是物理地址,和设备树中的地址保持一致! spring:/ # cat /proc/iomem 00208000-00208fff : 208000.qcom,ipcc qcom,ipc

[linux内存管理] 第015篇 理解Linux内核中的memblock和ioremap机制
0. 前言 Linux驱动开发中,设备寄存器的物理地址如何被内核管理并映射到虚拟地址空间,是一个非常核心的知识点。本文将从memblock和ioremap的机制入手,梳理相关流程和原理。 1. 什么是memblock? memblock 是 Linux 内核在启动阶段管理物理内存的核心工具。它的主要

[Android稳定性] 第015篇 [问题篇] Unable to handle kernel NULL pointer dereference
0. 问题现象 死机 1. 问题分析 1.1 dmesg_TZ.txt [ 9.188060][ T175] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000102 [ 9

[Android稳定性] 第014篇 [问题篇] slab内存泄露
0. 问题现象 目前协调FAE 从印度前线客户服务中心收集3份日志,初步分析 Slab占用过大3.9G,有Slab内存泄漏的问题,目前需要异常机复现现场问题后确认泄漏的原因。 Slab内存占用高问题,同平台窗口和性能模块核对,case:ALPS09052161,目前来看屏幕卡住不动,跟WMS关系不大

[linux内存管理] 第014篇 /proc/zoneinfo的详细解析
0. 前言 内存管理是一个相对复杂的内核模块,错综复杂的 数据结构 和管理逻辑。 Linux 内核为了帮助开发者从宏观上把握内存的使用情况,在几大核心数据结构中都有相应的计数统计,如物理页面使用情况、伙伴系统分配情况、内存管理区的页面使用情况、内存回收扫描回收情况、内存规整触发情况等等。 在 sta

[Android稳定性] 第013篇 [问题篇] page allocation failure: order:0内存分配失败的异常报错
0. 问题现象 工厂老化测试中,出现卡视频现象。 插上usb可以识别到adb口。 1. 问题分析 [ 7952.504953] warn_alloc: 427 callbacks suppressed [ 7952.504959] kworker/7:1H: page allocation fail

[Android稳定性] 第010篇 [问题篇] 数组越界导致的内核panic
0. 问题现象 收到研发提供的反馈,服务器打包的daliy版本刷机后出现900E口,出现死机问题。 1. 问题分析 1.1 dmesg_TZ.txt [ 51.674148][ T1598] xiaomi_touch_dev_open [ 51.674189][ T1598] xiaomi_

[linux内存管理] 第013篇 zone的初始化
0. 前言 紧接前文[linux内存管理] 第012篇 物理内存管理三大结构体之zone,本文将介绍zone的初始化,这也是继bootmem_init函数的后半部分(前半部分为sparse_init)。这次让我们来到下半部分吧,下半部分主要是围绕zone_sizes_init函数展开。 start_

[Android稳定性] 第009篇 [问题篇] 数组越界导致的内核panic
0. 问题现象 收到研发提供的反馈,部分机器插着usb后出现死机。 1. 问题分析 1.1 dmesg_TZ.txt [ 111.851460][ T2674] CPU: 6 PID: 2674 Comm: android.hardwar Tainted: G W OE

[Android稳定性] 第008篇 [原理篇] 动态设置kernel cmdline
0. 前言 有时候我们会遇到一些问题,需要去打开内核的一些参数进行一些调试,比如initcall_debug、debug、log_buf_len等等。每次遇到这些问题时,我们都需要去重新打包。这不仅仅浪费时间,而且有时候在遇到问题时重新编译后反而不复现了,妥妥的浪费时间。基于这样的需求,我实现了这样