리눅스 커널을 빌드할때 매크로로 작성된 부분을 전처리 하여 빌드 할 수 있다.
MakeFile에서 421번줄로 이동한다. vim 에디터에서 줄이동은 줄번호를 입력후 shift+G를 누르면 된다. MakeFile은 당연히 빌드할 커널의 폴더에 있는 MakeFile이다.
정상적으로 이동했다면 아래와 같은 모습을 볼수 있다.
417 KBUILD_AFLAGS := -D__ASSEMBLY__
418 KBUILD_CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
419 -fno-strict-aliasing -fno-common -fshort-wchar \
420 -Werror-implicit-function-declaration \
421 -Wno-format-security \
422 -std=gnu89
이제 421번 줄과 422번 줄 사이에 -save-temps=obj \
코드를 추가해준다.
이전 글에서 본 리눅스 커널 빌드 하는 쉘 스크립트에서 조금만 추가되면 된다.
이전글 보기 - 리눅스 커널 빌드 법
#!/bin/bash
echo "configure build output path"
KERNEL_TOP_PATH="$( cd "$(dirname "$0")" ; pwd -P )"
BUILD_LOG="$KERNEL_TOP_PATH/preprocess_build_log.txt"
OUTPUT="$KERNEL_TOP_PATH/out"
echo "$OUTPUT"
// 이부분 추가됨 !!!!!!!!!!!!!!!!!
PREPROCESS_FILE=$1
echo "build preprocessed file : $PREPROCESS_FILE"
echo "cd linux-4.*"
cd linux-4.19.60
echo "copy config"
cp /boot/config-`uname -r` ./.config
echo "set config"
make O=$OUTPUT menuconfig
echo "clen config"
make mrproper
make clean
// 이부분 추가됨 !!!!!!!!!!!!!!!!!
echo "kernel build"
make $PREPROCESS_FILE O=$OUTPUT -j4 2>&1 | tee $BUILD_LOG
위에 코드를 보면서 추가된 부분의 주석을 확인하여 추가 해주면 된다.
실행은 아래 처럼 하면 된다.
./스크립트_파일명.sh 전처리할_파일_경로/파일명.i
이전글과 연결 하여 전체 커널을 빌드하는 스크립트, 특정 파일만 전처리하여 빌드하는 스크립트 두개를 나눠서 사용할 수 있게 되었다.
현재 문제점은 전처리된 코드가 OUTPUT 경로로 나와야하는데 원본 리눅스 커널 폴더에서 나온다.
이점은 감안하고 사용하며 추후에 고쳐 보도록 하겠다.