Linux内存管理
未读
d0d24970799a25be2d4e5fd72228e7a027df3dc369c735532463a6ceae4851eb366b6a5a00d08fa6aed8e60ba9edac8761f2063b182a0e30d3a6e1d81a83c953733c55f3bbd33d61508de8a1015a962764cf32090d4b58d8e91523c489e63063cffef08824b091eb44fb145b4e8404764780e6f93e63e0f544500e6fff0eb611e3cadf7aecef989decd3592e97b31c6b7b7d1443658eeaac8128f75c5df183af9d10e8d786818e008ce26e90a8a7956618e924d6d301f251fce4864a514744476927141109d4992c4e25ccb49d003b9eccc21e2740d39f83b2dc538ae15d25920032c912928eb2339feb34c5847d11686ce6252e13e8315a1 ...
Linux内存管理
未读
0. 前言此节点是显示memblock的这部分内存的具体使用情况的。我们可以看到这部分内存很明显不属于虚拟地址,而是物理地址,和设备树中的地址保持一致!
1234567891011121314151617181920spring:/ # cat /proc/iomem00208000-00208fff : 208000.qcom,ipcc qcom,ipcc@20800000400000-00bfffff : 400000.pinctrl pinctrl@40000001400000-015effff : 1400000.clock-controller clock-controller@140000001628000-01629fff : 1628000.qcom,msm-eud eud_base0162a000-0162afff : 162b000.hsphy eud_enable_reg0162b000-0162b113 : 162b000.hsphy hsusb_phy_base...82a00000-864fffff : System RAM85200000-85effff ...
0. 前言 Linux驱动开发中,设备寄存器的物理地址如何被内核管理并映射到虚拟地址空间,是一个非常核心的知识点。本文将从memblock和ioremap的机制入手,梳理相关流程和原理。
1. 什么是memblock?memblock 是 Linux 内核在启动阶段管理物理内存的核心工具。它的主要作用是记录和管理物理内存的分布情况,并确保特定的物理地址范围不被错误分配。
memblock 的功能
内存管理:
记录系统中所有的物理内存块(memory)。
标记已分配或保留的内存块(reserved)。
设备寄存器保留: -通过 memblock_reserve() 标记设备寄存器所在的物理地址范围为 reserved,防止这些地址被动态分配器(如 kmalloc())分配。
分配的时机:
引导阶段:在内核初始化期间使用,启动完成后交由更高级的内存管理器(如 buddy allocator)接管。
详细请查看:[linux内存管理] 第008篇 memblock子系统详解
2. 什么是ioremap?ioremap 是 Linux 内核用于将物理地址映射到虚拟地址的函数。由 ...
0. 问题现象
死机
1. 问题分析1.1 dmesg_TZ.txt12345678910111213141516171819202122232425262728293031323334353637383940414243[ 9.188060][ T175] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000102[ 9.188065][ T175] Mem abort info:[ 9.188067][ T175] ESR = 0x0000000096000005[ 9.188069][ T175] EC = 0x25: DABT (current EL), IL = 32 bits[ 9.188072][ T175] SET = 0, FnV = 0[ 9.188074][ T175] EA = 0, S1PTW = 0[ 9.188075][ T175] FSC = 0x05: level ...
Android稳定性
未读
0. 问题现象目前协调FAE 从印度前线客户服务中心收集3份日志,初步分析 Slab占用过大3.9G,有Slab内存泄漏的问题,目前需要异常机复现现场问题后确认泄漏的原因。Slab内存占用高问题,同平台窗口和性能模块核对,case:ALPS09052161,目前来看屏幕卡住不动,跟WMS关系不大,binder方面看起来不算是完全耗尽卡死,但是可以肯出执行都比较缓慢,low memory和 cpu 95% 太高了,是比较可能导致问题的异常点,在这种performance情况下UI是会出现无法及时响应的,Performance team建议,cpu loading重的高负载场景,优化方向只能尽量降低出现的概率,无法完全避免。
1. 问题分析1.1 打开slabtrace123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858 ...
0. 前言内存管理是一个相对复杂的内核模块,错综复杂的 数据结构 和管理逻辑。 Linux 内核为了帮助开发者从宏观上把握内存的使用情况,在几大核心数据结构中都有相应的计数统计,如物理页面使用情况、伙伴系统分配情况、内存管理区的页面使用情况、内存回收扫描回收情况、内存规整触发情况等等。
在 start_kernel() 中,会通过 setup_arch() 、 build_all_zonelists() 、 page_alloc_init() 、 mm_init() 等函数对内存相关模块进行初始化,最后会通过 arch_call_rest_init() 对 Linux 系统做剩余的初始化工作,此函数中会调用 rest_init(),并在此调用 kernel_init() 启动init 线程,这里创建了本文将要剖析的虚拟文件节点 /proc/zoneinfo 。
1. zoneinfo_show12345678910111213141516171819202122232425262728static int zoneinfo_show(struct seq_file ...
0. 问题现象工厂老化测试中,出现卡视频现象。插上usb可以识别到adb口。
1. 问题分析12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849[ 7952.504953] warn_alloc: 427 callbacks suppressed[ 7952.504959] kworker/7:1H: page allocation failure: order:0, mode:0x10800(GFP_NOWAIT|__GFP_NORETRY), nodemask=(null),cpuset=/,mems_allowed=0[ 7952.524812] CPU: 7 PID: 12247 Comm: kworker/7:1H Tainted: G OE 6.1.90-android14-11-maybe-dirty-qki-consolidate #1[ 7952.524824] Hardware name: Qualcomm T ...
Android稳定性
未读
4f0f05ce26d5a43eed29a6768e1af61af18f157e1479bf682c8c8d8252017768bcfc7c26c69bd00eac995ca94850216cec747c5e656170a9bf066850c7db4405236d4ae9bac8855e1cd0abee9e4a6b9def11c997dc3c3f3488a3e65d78d133c251946faed71dd923fde9dff04af808948d2acd637c1d5da698a8b3af104f7630024460e182c1f1b57e8394fdedd4910a95339d813ff3886da5e26681602fff51931da90e14a53c1beb844c33e80249f94b7410e7cf90e8d851a09a912a711163b958b59efc7359abe730495e7f853c481d44161d97e1b7ccfc04dfa672a4707f5bd1eaa049750790bb1a45ee2f6a3d7c2b021297c4116395e ...
一、什么是minidump?各个subsystem 都会注册在 memory 映射表中,当system 发⽣crash的时候,boot subsystem 会去加密并保存注册过的memory信息,保存到RAM EMMC 分区。
一、MINIDUMP流程图
二、MINIDUMP代码流程2.1 HLOS侧流程2.1.1 defconfig配置12345678910CONFIG_QCOM_MINIDUMP=m# CONFIG_QCOM_VA_MINIDUMP is not set# CONFIG_QCOM_DYN_MINIDUMP_STACK is not setCONFIG_QCOM_MINIDUMP_FTRACE=yCONFIG_QCOM_MINIDUMP_PANIC_DUMP=y# CONFIG_QCOM_MINIDUMP_PANIC_CPU_CONTEXT is not setCONFIG_QCOM_MINIDUMP_PSTORE=yCONFIG_MINIDUMP_MAX_ENTRIES=200CONFIG_IPC_LOG_MINIDUMP_BUFFERS=16CONFIG_QC ...
0. 问题现象收到研发提供的反馈,服务器打包的daliy版本刷机后出现900E口,出现死机问题。
1. 问题分析1.1 dmesg_TZ.txt123456789101112131415161718192021222324252627282930313233343536373839[ 51.674148][ T1598] xiaomi_touch_dev_open[ 51.674189][ T1598] xiaomi_touch_dev_ioctl cmd:0, mode:100, value:0[ 51.674197][ T1598] Unexpected kernel BRK exception at EL1[ 51.674203][ T1598] Internal error: BRK handler: 00000000f2005512 [#1] PREEMPT SMP[ 51.681890][ T1598] Dumping ftrace buffer:[ 51.686014][ T1598] (ftrace buffer empty)[ 51 ...