11 2021 档案
摘要:linux memory barrier barrier() macro 2). 关于barrier()宏,jkl大师是这么说的: CPU越过内存屏障后,将刷新自己对存储器的缓冲状态。这条语句实际上不生成任何代码,但可使gcc在 barrier()之后刷新寄存器对变量的分配。 也就是说,barrie
阅读全文
摘要:arm-linux-gnueabihf、aarch64-linux-gnu等ARM交叉编译GCC的区别 link: https://blog.csdn.net/Namcodream521/article/details/88379307
阅读全文
摘要:ARM C函数调用堆栈入栈顺序 堆栈指针是在函数一开头就确认了的,比如如下的xxx_func.cfi函数,它在函数的开头就将sp自减了0x170,这个0x170是xxx_fun.cfi函数局部变量total size + 需要入栈的reg total size 然后会设置x29(fp,栈底指针),这
阅读全文
摘要:syscall SYSCALL_DEFINE*()实现 include/linux/syscalls.h #define SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARGS__) #define SYSCALL_DEFIN
阅读全文
摘要:ko kallsyms 在layout_symtab()里确认哪些symbol(symbol包括函数与变量)是属于core_layout里的,将这些属于core_layout的symbol的string长度累加起来,然后会将这个累加长度加到core_layout.size,到时也给它分配内存空间。
阅读全文
摘要:elf文件结构解析 elf文件格式,许多文件类型都是elf格式,比如.ko、.so、.o,vmlinux也是这种格式 如下图是elf文件结构: 查看是否为elf文件,使用file cmd file slub_debug_test_module.ko slub_debug_test_module.ko
阅读全文
摘要:ko module加载flow insmod ko都是在user space发起的,通过系统调用finit_module或者init_module来加载ko 其中finit_module系统调用是user space只传ko file的fd,kernel里根据这个fd直接读ko,将ko读到内存上来,
阅读全文
摘要:链接脚本(link script)语法 语法 1. 定义一个section,如下是define一个.init.data section *(.init.rodata.* .init.bss)最前面的*是通配符,表示所有.o文件的(.init.rodata.*、.init.bss section) .
阅读全文
摘要:ARM kernel panic misc Code <0>[22925.503588] Code: 05b1a000 ffffffc0 00000000 00000000 (00000ee3) code表示kernel panic时PC地址指向的地址里的数据,用括号括起来是PC地址指向的地址的in
阅读全文
摘要:linux signal framework 信号产生&处理流程 信号产生(signal generate) 信号的产生可以是user space通过kill等系统调用给某个线程(目标线程)发送某个signal,此时signal generate的流程如下: 1. 根据pid确定对应的task_st
阅读全文
摘要:user space进程退出时,进程的mmap资源将由kernel进行unmap user space进程退出时,会调用exit_mmap()将mmap都释放掉,callstack如下: do_exit exit_mm mmput __mmput exit_mmap mm/mmap.c /* Rel
阅读全文