今天為了研究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)
[火星人
]
以-O0 -g編譯Linux內核的辦法已經有423次圍觀
http://coctec.com/docs/linux/show-post-188124.html