今天为了研究linux的slub分配器.编译了um来调试.但是由于linux内核默认情况下使用-O2,而最低要求需要-O1才能编译成功.在打开优化的情况下,调试起来源代码会乱跳.为了解决这个问题,我折腾了几分钟.发现有三个地方需要修改就可以了
第一处 include/linux/compiler-gcc.h 在里面inline __inline这些定义之后都有 aways_inline的attribute,要把这个属性删除
另一处, 在menuconfig里,kernel hack里面不选中"Force gcc to inline functions marked inline"
当然,最后,Makefile里面那个-O2要删除掉,也就是不用任何优化来编译(貌似这个时候就是-O0)
之后用make ARCH=um 就可以编译成功了. 我精简过的um编译出来大概15M.(选择了compile the kernel with debug info)