我使用的是 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)。不确定它们是否兼容 - 也许问题出在已安装的内核版本字符串上?
答案1
但是,如果我删除“(subbotin@avs234)”,内核编译得很好。
您在 LOCALVERSION 中不需要这个。 “subbotin@avs234”只是编译内核的那个(user@host)。它不是版本字符串的一部分,也不是与内核编译相关的任何内容所需要的。