Linux-Kernel
編譯一個linux核心文件
我想為此編譯一個 linux 核心源文件(/net/rds/recv.c),呼叫 gcc,如下所示:
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) cc1 -E -quiet -nostdinc -v -imultiarch x86_64-linux-gnu -iprefix ../lib/gcc/x86_64-linux-gnu/5/ -D __attribute__(x)= -D __restrict= -D __extension__= -D __asm__= -D __asm__(x)= -D __const= -D __inline__= -D __inline= -D __volatile__= -D __builtin_va_list=int -D __KERNEL__ -isystem /lib/modules/4.7.0-rc1+/build/ -isystem /home/username/Desktop/linux/include/ -isystem /home/username/Desktop/linux/usr/include/ -isystem /home/username/workspace/Repositories/4.7.0-rc1+- headers/linux/arch/x86/include/ -isystem /home/username/workspace/Repositories/4.7.0-rc1+- headers/linux/arch/x86/include/uapi/ -isystem /home/username/workspace/Repositories/4.7.0-rc1+- headers/linux/arch/x86/include/generated/ -isystem /home/username/workspace/Repositories/4.7.0-rc1+- headers/linux/arch/x86/include/generated/uapi/ -isystem /usr/lib/gcc/x86_64-linux-gnu/5/include/ -isystem /usr/include/ home/myfolder/linux/net/rds/recv.c -mtune=generic -march=x86-64 -std=c99 - fstack-protector-strong -Wformat -Wformat-security
但是 gcc 返回錯誤:
/home/username/linux/include/linux/jiffies.h:40:3: error: #error Invalid value of HZ. # error Invalid value of HZ. /home/username/linux/include/linux/jiffies.h:257:31: error: division by zero in #if #if !((((NSEC_PER_SEC << 2) / TICK_NSEC) << (SEC_JIFFIE_SC - 2)) & 0x80000000) ^ /home/username/linux/include/linux/jiffies.h:293:42: error: division by zero in #if #if HZ <= MSEC_PER_SEC && !(MSEC_PER_SEC % HZ) ^ /home/username/linux/include/linux/jiffies.h:366:20: error: division by zero in #if #if !(USEC_PER_SEC % HZ) /home/username/linux/include/linux/mm_types.h:163:45: error: missing binary operator before token "(" #if defined(CONFIG_TRANSPARENT_HUGEPAGE) && USE_SPLIT_PMD_PTLOCKS
. . .
我該如何解決這個錯誤。非常感謝您的幫助。
嘗試
make net/rds/recv.o
但是你應該意識到你需要一個配置好的核心來編譯文件。核心配置設置它使用哪種架構,要包含哪些主要功能(例如多核/多處理器)等。許多核心標頭檔需要這些資訊來生成圍繞常用功能的正確包裝器。
注意:該
make
命令將為您(如果您處於詳細模式V=1
)提供編譯該文件所需添加的參數(例如要包含的目錄)。