今天在Cygwin上编译了一个不带O2优化的linux内核,这样结合QEMU和CDT就很容易进行内核的代码单步跟踪和调试。把对内核的修改记录一下:
1.将内核主目录下的Makefile中所有的-O2删除掉。
sed -i s/-O2//g Makefile
2.在.config 中使能CONFIG_HIGHMEM=y
3.修改 arch/arm/mm/highmem.c 加上如下的dummy函数。
void *kmap_high_l1_vipt(struct page *page, pte_t *saved_pte)
{
}
void kunmap_high_l1_vipt(struct page *page, pte_t saved_pte)
{
}
4.注释文件arch/arm/kernel/Setup.c中的如下行。
//#ifdef MULTI_TLB
struct cpu_tlb_fns cpu_tlb;
//#endif
5.注释mm/slab.c中的如下行。
static __always_inline int index_of(const size_t size)
{
// extern void __bad_size(void);
// if (__builtin_constant_p(size)) {
int i = 0;
#define CACHE(x) \
if (size <=x) \
return i; \
else \
i++;
#include <linux/kmalloc_sizes.h>
#undef CACHE
// __bad_size();
// } else
// __bad_size();
return 0;
}