@[toc]
前言
- 之所以写这个文章,是因为阅读linux源码时被坑了.直接F12跳转到了其他地方.分析了半天都看不明白.晕头转向的.跳回来在分析了一遍才发现有个坑的地方.特除记录说明.
lib/decompress_inflate.c
- 这里的
__gunzip
函数需要进行malloc
.如果直接用F12进行跳转到函数声明与定义的地方,大概率是跳转到include/linux/decompress/mm.h
1 | /* Use defines rather than static inline in order to avoid spurious |
- 实际上这里还未进行内核初始化与内存初始化.
new_kmalloc_cache
并未调用,slab的索引数组并未进行任何赋值定义.进行相关分析,一定是分析错误的.一定是会分析到回收的逻辑去.这就陷入的死循环的僵局了.
arch/arm/boot/compressed/decompress.c
- 这时回头看一下
arch/arm/boot/compressed/decompress.c
- 可以发现
decompress_inflate.c
是使用include
进入,而不是进行引用的
1 |
|
lib/decompress_inflate.c
- 带着
#define STATIC static
再来分析这个源文件 #include <linux/decompress/mm.h>
注意这里的头文件,定义了STATIC
时,malloc
使用的是简单的版本
1 |
|
总结
所以decompress.c在boot阶段还未进入内核时,调用的malloc是简单版本,并不是linux内核中的kmalloc函数.
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 wdfk-prog的个人博客!
评论