使用帶括號的 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.cyanogenmod.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)。不確定它們是否兼容——也許問題出在安裝的核心版本字元串上?
但是,如果我刪除“(subbotin@avs234)”核心編譯就好了。
您在 LOCALVERSION 中不需要這個。“subbotin@avs234”只是編譯核心(user@host)的那個。它不是版本字元串的一部分,也不是與核心編譯相關的任何內容。