괄호 안에 vermagic 커널 문자열을 사용하여 make를 실행하면 /bin/sh 구문 오류가 발생합니다.

괄호 안에 vermagic 커널 문자열을 사용하여 make를 실행하면 /bin/sh 구문 오류가 발생합니다.

저는 Ubuntu Server 12.04 x86_64를 사용하고 있으며 Android CyanogenMod 7.2 커널 모듈을 빌드해야 합니다. 내 휴대폰에는 맞춤 ROM과 패치된 커널이 있습니다.

adb shell cat /proc/version

생산하다

Linux version 2.6.37.3-cyanogenmod-gf3345ef-dirty (subbotin@avs234) (gcc version 4.4.0 (GCC) ) #2 PREEMPT Sun Mar 13 14:55:50 MSK 2011

툴체인 변수 외에도 이 변수가 설정되어 있습니다.

export LOCALVERSION="-cyanogenmod-gf3345ef-dirty (subbotin@avs234)"

이것을 실행하면 make( Ubuntu에서 bash)dash 다음과 같은 결과를 얻습니다.

CHK    include/linux/version.h
/bin/sh: 1: Syntax error: "(" unexpected (expecting ")")
make: ***[include/generated/utsrelease.h] Error 2

그러나 "(subbotin@avs234)"를 제거하면 커널이 제대로 컴파일됩니다. 버전 문자열의 차이로 인해 커널 모듈을 로드할 수 없는 것으로 의심되므로 전체 vermagic 문자열이 필요합니다. 괄호에 무슨 문제가 있나요?

더 자세한 설명: 장치는 HTC Desire(bravo) GSM이고 앱은 EDS Lite(http://play.google.com/store/apps/details?id=com.sovworks.edslite). 나는 이것을 부분적으로 따랐다.http://oldwiki.yanogenmod.org/wiki/Building_Kernel_from_source다음은 커널 모듈 컴파일 가이드입니다.http://www.sovworks.com/details.html#compileModule. 후자의 링크에서는 vermagic 문자열이 아마도 정확히 일치해야 한다고 언급되어 있습니다. 응용 프로그램 설치 메뉴에서 이 모듈을 로드하려고 하면 "커널 모듈을 로드하지 못했습니다"라는 메시지가 나타납니다.

    #get repo tool
    mkdir -p ~/bin 
    curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo 
    chmod a+x ~/bin/repo 
    
    #clone repo for cm-kernel
    mkdir -p ~/Android/kernel 
    cd ~/Android/kernel 
    git clone git://github.com/CyanogenMod/cm-kernel.git 
    cd cm-kernel
    
    #pull the kernel configuration from the device
    #my config file is here: http://pastebin.com/aHA2mETG
    adb pull /proc/config.gz ~/Android/kernel/cm-kernel
    cd ~/Android/kernel/cm-kernel
    gunzip config.gz
    #replace CONFIG_LOCALVERSION and CONFIG_LOCALVERSION_AUTO with null string
    sed 's/CONFIG_LOCALVERSION\([[:alnum:][:punct:]]\)*//' config > .config
    cp config .config
    
    #toolchain from http://developer.android.com/sdk/index.html#download (sdk tools)
    
    export CROSS_COMPILE=~/Android/Toolchain/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
    export CCOMPILER=~/Android/Toolchain/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
    export ARCH=arm
    export SUBARCH=arm
    export LOCALVERSION="-cyanogenmod-gf3345ef-dirty (subbotin@avs234)"
    make oldconfig

    #Answer "no" CONFIG_LOCALVERSION_AUTO (the second prompt) request.
    make
    
    #download EDS kernel module src http://www.sovworks.com/downloads.html
    #extract to ~/Android/km
    cd ~/km
    make -C ~/Android/kernel/cm-kernel\
     ARCH=arm CROSS_COMPILE=~/Android/Toolchain/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-\
     EXTRA_CFLAGS=-fno-pic\
     SUBDIRS=~/Android/km modules

    #if LOCALVERSION="-cyanogenmod-gf3345ef-dirty" then vermagic string is as in the following
    modinfo eds.ko
    #...
    vermagic:       2.6.37.6-cyanogenmod-gf3345ef-dirty preempt mod_unload ARMv7 

upd: 현재 설치된 커널 안정 버전(3)이 빌드된 커널 안정 버전(6)과 동일하지 않다는 사실을 방금 확인했습니다. 호환되는지 확실하지 않습니다. 설치된 커널 버전 문자열에 문제가 있는 것일까요?

답변1

그러나 "(subbotin@avs234)"를 제거하면 커널이 제대로 컴파일됩니다.

LOCALVERSION에서는 이것이 필요하지 않습니다. "subbotin@avs234"는 커널(user@host)을 컴파일한 것입니다. 버전 문자열의 일부가 아니며 커널 컴파일과 관련된 항목에는 필요하지 않습니다.

관련 정보