かっこ内で 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)"

これを実行するとmakeUbuntuでbashdash次のような結果が得られます。

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)をコンパイルしたものです。バージョン文字列の一部ではなく、カーネルのコンパイルに関連する項目には必要ありません。

関連情報