生产力工具记录
下面是一些生产力工具
经过之前的汇编实践-解析命令行参数学习,发现在进行系统调用时,不管是调用syscall(), 还是libc封装的系统调用,最终都是通过int $0x80(32位 i386)或者syscall(x86_64)进入内核态从而调用对应的底层实现,x86_32是通过一个0x80的软中断实现的,而x86_64是通过汇编指令syscall实现。
疑问:
在代码编译前宏展开时,需要进行条件编译,这需要gcc指定参数,而指定什么参数由Makefile来控制.
trace.c在编译时gcc中的参数中会带有 -D__KERNEL__, -DMODULE, -D__KBUILD_MODNAME=kmod_trace, 可以参考linux-likely学习,这用在之后的宏展开。
Kbuild的学习主要从三部分学习的
关于Kbuild,可以参考Kbuild官方文档
关于Makefile构建linux的大体框架,见Makefile框架
在linux学习过程中,需要针对内核和动态模块进行调试,最常用的方法是gdb,但是linux gdb文档中描述的不够详细,在学习调试过程中碰到了不少坑并做如下记录。