如何为 Android 创建可加载内核模块?

新手上路,请多包涵

我知道那里有许多描述此活动的演练和教程,但在阅读了其中的许多内容后,我仍然无法正常工作。如果有人有耐心逐步完成我采取的步骤(在下面发布)并提出我可能偏离轨道的地方,我将非常感激。我花了大约一天半的时间盯着制作文件和阅读演练,所以从字面上看,任何建议都会有所帮助。

环境:

  • 我正在使用 Ubuntu 10.04 32 位虚拟机。
  • 我从 64 位 Windows 7 托管
  • 我的 Core 2 Duo 没有对 64 位虚拟机的硬件支持,所以我正在尝试针对 Android 2.1 内核进行编译
  • 我已经从 Dapper 存储库安装了 Java 1.5 并删除了我的 1.6 安装
  • 其余工具已根据 Android 开发文档获得…

根据 初始化构建环境

爪哇:

 $ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu dapper main multiverse"
$ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu dapper-updates main multiverse"
$ sudo apt-get update
$ sudo apt-get install sun-java5-jdk

其他要求:

 $ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev libx11-dev libreadline5-dev libz-dev libgl1-mesa-dev
$ sudo apt-get install gcc-multilib g++-multilib libc6-i386 libc6-dev-i386

然后从 下载源代码树

回购:

 $ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
$ repo init -u https://android.googlesource.com/platform/manifest -b eclair
$ repo sync
$ gpg --import (imported the huge key)

建立系统

初始化:

 $ source build/envsetup.sh

选择目标:

 $ lunch generic-user

构建代码:

 $ make -j4

添加! make -j4 的输出:

 ============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.1-update1
TARGET_PRODUCT=generic
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=ECLAIR
============================================
build/core/copy_headers.mk:15: warning: overriding commands for target `out/target/product/generic/obj/include/libpv/getactualaacconfig.h'
build/core/copy_headers.mk:15: warning: ignoring old commands for target `out/target/product/generic/obj/include/libpv/getactualaacconfig.h'
/bin/bash: line 0: cd: sdk/layoutopt/app/src/resources: No such file or directory
Install: out/host/linux-x86/bin/acp
target Generated: libclearsilver-jni <= out/host/common/obj/JAVA_LIBRARIES/clearsilver_intermediates/javalib.jar
target Generated: libclearsilver-jni <= out/host/common/obj/JAVA_LIBRARIES/clearsilver_intermediates/javalib.jar
host SharedLib: libneo_cs (out/host/linux-x86/obj/lib/libneo_cs.so)
host C++: aapt <= frameworks/base/tools/aapt/AaptAssets.cpp
host C++: aapt <= frameworks/base/tools/aapt/Command.cpp
error: error reading out/host/common/obj/JAVA_LIBRARIES/clearsilver_intermediates/javalib.jar; error in opening zip file
error: error reading out/host/common/obj/JAVA_LIBRARIES/clearsilver_intermediates/javalib.jar; error in opening zip file
error: error reading out/host/common/obj/JAVA_LIBRARIES/clearsilver_intermediates/javalib.jar; cannot read zip file
error: cannot access org.clearsilver.HDF
class file for org.clearsilver.HDF not found
javadoc: error - Class org.clearsilver.HDF not found.
Error: No classes were specified on the command line.  Try -help.
make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libclearsilver-jni_intermediates/org_clearsilver_HDF.h] Error 15
make: *** Waiting for unfinished jobs....
error: error reading out/host/common/obj/JAVA_LIBRARIES/clearsilver_intermediates/javalib.jar; cannot read zip file
error: cannot access org.clearsilver.CS
class file for org.clearsilver.CS not found
In file included from frameworks/base/tools/aapt/AaptAssets.h:18,
                 from frameworks/base/tools/aapt/AaptAssets.cpp:5:
frameworks/base/tools/aapt/ZipFile.h:65: warning: ‘typedef’ was ignored in this declaration
javadoc: error - Class org.clearsilver.CS not found.
Error: No classes were specified on the command line.  Try -help.
In file included from frameworks/base/tools/aapt/AaptAssets.h:18,
                 from frameworks/base/tools/aapt/Main.h:14,
                 from frameworks/base/tools/aapt/Command.cpp:6:
frameworks/base/tools/aapt/ZipFile.h:65: warning: ‘typedef’ was ignored in this declaration
make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libclearsilver-jni_intermediates/org_clearsilver_CS.h] Error 15

添加!

所以事实证明我在这里遇到了一些问题。我假设一旦我克服了这些问题,我就会拥有一个能够编译内核模块的环境。如果我错了,请纠正我。

接下来我进入包含我的 module.c 文件的目录,它是 makefile。 makefile的内容如下:

 obj-m += mymodule.o

CROSS_COMPILE=~/WORKING_DIRECTORY/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-
KERNEL_DIR ?= /home/<myuser>/WORKING_DIRECTORY
VERSION = v1.1

all:
    make -C $(KERNEL_DIR) M=$(PWD) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) modules
    rm -rf *.c~
    rm -rf *.mod*
    rm -rf *.o
clean:
    make -C $(KERNEL_DIR) M=$(PWD) clean

我对 make 和 makefile 的经验很少,但这对我来说看起来很合理。我对这个文件的主要关注是 KERNEL-DIR 变量。我为该变量尝试了几个不同的值,但在我不使用它的当前值的地方出现了各种错误。当然,它仍然可能是错误的,所以欢迎在这里发表任何评论。

所以,据我所知,我应该能够在没有参数或任何东西的情况下执行 make,并且会弄清楚它需要做什么。我已经尝试过使用和不使用 sudo 进行 make、make -f。所有四种排列产生相同的结果:

 make -C /home/<myuser>/WORKING_DIRECTORY M=/home/<myuser>/Desktop/<MyModuleDir> ARCH=arm CROSS_COMPILE=~/WORKING_DIRECTORY/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi- modules
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.1-update1
TARGET_PRODUCT=generic
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=ECLAIR
============================================
make[1]: Entering directory `/home/<myuser>/WORKING_DIRECTORY'
build/core/copy_headers.mk:15: warning: overriding commands for target `out/target/product/generic/obj/include/libpv/getactualaacconfig.h'
build/core/copy_headers.mk:15: warning: ignoring old commands for target `out/target/product/generic/obj/include/libpv/getactualaacconfig.h'
/bin/bash: line 0: cd: sdk/layoutopt/app/src/resources: No such file or directory
Available sub-modules:
01-test                     dumpsys                     libminui                    LotsOfApps
20-dns.conf                 dvz                     libminzip                   lowstoragetest
95-configured                   dx                      libmp4recognizer_utility            lsd
aapt                        dx-tests                    libmtdutils                 LunarLander
acc                     edify                       libnativehelper                 LunarLanderTests
AccountAndSyncSettings              Email                       libneo_cgi                  MagicSmokeWallpapers
accRuntimeTest                  EmailTests                  libneo_cs                   make_cfst
acp                     emma                        libneo_util                 makedict
adb                     emmalib                     libnetutils                 make_g2g
adbd                        emulator                    libocr                      makekeycodes
add-property-tag                emulator-arm                    libomx_aac_component_lib            make_ve_grammar
afar                        emulator-hw                 libomx_aacdec_sharedlibrary         mediaframeworktest
aidl                        emulator-tcg                    libomx_amr_component_lib            MediaProvider
AlarmClock                  EnabledTestApp                  libomx_amrdec_sharedlibrary         mediaserver
AliasActivity                   etc1tool                    libomx_amrenc_component_lib         memtest
am                      eventanalyzer                   libomx_amrenc_sharedlibrary         minigzip
android                     event-log-tags                  libomx_avc_component_lib            mkbootfs
android.core.tests.annotation           exc_dump                    libomx_avcdec_sharedlibrary         mkbootimg
android.core.tests.archive          ext                     libomx_baseclass_lib                mksdcard
android.core.tests.concurrent           Fallback                    libomx_common_lib               mkstubs
android.core.tests.crypto           fastboot                    libomx_m4v_component_lib            mkyaffs2image
android.core.tests.dom              FixedGridLayout                 libomx_m4vdec_sharedlibrary         Mms
android.core.tests.logging          flash_image                 libomx_mastercore_lib               MmsTests
android.core.tests.luni.io          FontLab                     libomx_mp3_component_lib            monkey
android.core.tests.luni.lang            framework                   libomx_mp3dec_sharedlibrary         monkeyrunner
android.core.tests.luni.net         FrameworkPermissionTests            libomx_queue_lib                mtpd
android.core.tests.luni.util            framework-res                   libomx_sharedlibrary                MultiResolution
android.core.tests.math             FrameworkTest                   libop                       Music
android.core.tests.nio              framework-tests                 libopencore_author              MusicTests
android.core.tests.nio_char         FrameworkTestTests              libopencore_common              nc
android.core.tests.prefs            fsck_msdos                  libopencore_download                netcfg
android.core.tests.regex            fs_config                   libopencore_downloadreg             netperf
android.core.tests.runner           fs_get_stats                    libopencore_mp4local                netserver
android.core.tests.security         Gallery                     libopencore_mp4localreg             ninepatch
android.core.tests.sql              Gallery3D                   libopencore_net_support             NinePatchLab
android.core.tests.text             GalleryTests                    libopencore_player              NoShareUidApp
android.core.tests.xml              gdbserver                   libopencore_rtsp                NotePad
android.core.tests.xnet             genext2fs                   libopencore_rtspreg             NotePadTests
android.cts.dpi                 GestureBuilder                  libosclbase                 opcontrol
android.cts.refapp              GL2JNI                      libosclerror                    openssl
android.policy                  GLJNI                       libosclio                   OpenWnn
android.policy_mid              GlobalSearch                    liboscllib                  oprofiled
android.policy_phone                GlobalSearchBenchmarks              libosclmemory                   org.eclipse.core.commands_3.4.0.I20080509-2000
androidprefs                    GlobalSearchPermissionTests         libosclproc                 org.eclipse.equinox.common_3.4.0.v20080421-2006
android.test.runner             GlobalSearchTests               libosclregcli                   org.eclipse.jface_3.4.2.M20090107-0800
AndroidTests                    GlobalTime                  libosclregserv                  org-netbeans-api-visual
angeles                     GoogleContactsProvider              libosclutil                 org-openide-util
ant                     GoogleContactsProviderTests         libpagemap                  osgi
antlr-2.7.7                 google-framework                libpassthru_oma1                PackageInstaller
anttasks                    googlelogin-client              libpcap                     parseStringTest
apicheck                    GoogleSearch                    libpixelflinger                 perm_checker
ApiDemos                    gpustate                    libpixelflinger_armv6               perm_checker.conf
ApiDemosReferenceTest               gralloc.default                 libpixelflinger_static              Phone
ApiDemosTests                   groovy-all-1.6.5                libplatform_library_jni             PicoTts
apkbuilder                  grxmlcompile                    libpng                      ping
ApplicationsProvider                gtest-filepath_test             libpopt                     PinyinIME
applypatch                  gtest-linked_ptr_test               libprotocolenginenode_base          PlatformLibraryClient
applypatch_static               gtest-message_test              libprotocolenginenode_common            platform.xml
app_process                 gtest-options_test              libprotocolenginenode_download_common       pm
AppWidgetHostTest               gtest-port_test                 libprotocolenginenode_pdl           post_trace
AppWidgetProvider               gtest_pred_impl_unittest            libprotocolenginenode_ps            pppd
apriori                     gtest_prod_test                 libpv_aac_dec                   preload
archquery                   gtest-test-part_test                libpvaacffparsernode                ProcessTests
asm-3.1                     gtest-typed-test2_test              libpvaacffrecognizer                procmem
atree                       gtest-typed-test_test               libpvaacparser                  procrank
AudioHardwareRecord             gtest_unittest                  libpvamrffparsernode                profile_pid
AudioHardwareRecordLoop             gzip                        libpvamrffrecognizer                profile_trace
AudioInRecord                   HelloActivity                   libpv_amr_nb_common_lib             Provision
backup_helper_test              HelloActivityTests              libpvamrwbdecoder               pvplayer
BackupTest                  hierarchyviewer                 libpvauthorengine               q2dm
BatteryWaster                   hist_trace                  libpv_avc_common_lib                q2g
bb2sym                      Home                        libpvavcdecoder                 qemud
bb_dump                     hosttestlib                 libpvavifileparser              qemu-props
bbprof                      hprof-conv                  libpv_config_parser             qwerty2.kcm
bison                       HTMLViewer                  libpvdecoder_gsmamr             qwerty.kcm
Bluetooth                   icache                      libpvdownloadinterface              racoon
BluetoothChat                   icudata                     libpvdownloadmanagernode            radiooptions
BluetoothDebug                  idegen                      libpvdownloadreginterface           read_addr
bmgr                        ime                     libpvencoder_gsmamr             read_method
bookmarks.xml                   ImfTest                     libpvfileoutputnode             read_pid
bootanimation                   ImfTestTests                    libpvfileparserutils                read_trace
Browser                     imgdiff                     libpvframemetadatautility           recovery
BrowserPowerTests               init                        libpvgendatastruct              required_hardware.xml
BrowserTestPlugin               input                       libpvgsmamrparser               rgb2565
BrowserTests                    installd                    libpv_http_parcom               rild
bsdiff                      invoke_mock_media_player            libpvid3parcom                  rsg-generator
bspatch                     iptables                    libpvjitterbuffer               RSSReader
btool                       ip-up-vpn                   libpvjitterbuffernode               run-core-tests
bugreport                   iself                       libpvjitterbufferrtp                run-core-tests-on-ri
BusinessCard                    isprelinked                 libpvlatmpayloadparser              safe_iop_test
Calculator                  jarjar                      libpvmediadatastruct                SampleBrowserPlugin
CalculatorTests                 jarutils                    libpvmediainputnode             schedtest
Calendar                    jasmin                      libpvmedialayernode             scp
CalendarProvider                jasmin.jar                  libpvmediaoutputnode                screenshot2
CalendarProviderTests               javax.obex                  libpvmf                     sdklib
CalendarTests                   jcommon-1.0.12                  libpvmfrecognizer               sdkmanager
Camera                      jdiff                       libpvmimeutils                  SdkSetup
CameraTests                 jdwpspy                     libpvmioaviwavfileinput             sdkstats
CertInstaller                   JETBoy                      libpvmiofileinput               sdkuilib
cfassembler                 jfreechart-1.0.9                libpvmiofileoutput              sdutil
check-lost+found                jfreechart-1.0.9-swt                libpvmp3                    SearchableDictionary
check_prereq                    junit                       libpvmp3ff                  sensors.goldfish
check_stack                 jython                      libpvmp3ffparsernode                service
check_trace                 kcm                     libpvmp3ffrecognizer                servicemanager
clearsilver                 keystore                    libpvmp4decoder                 services
cmu2nuance                  keystore_cli                    libpvmp4ff                  Settings
com.android.inputmethod.pinyin.lib      KeyStoreTests                   libpvmp4ffcomposer              SettingsProvider
com.example.android.platform_library        kxml2-2.3.0                 libpvmp4ffcomposernode              SettingsTests
commons-compress-1.0                latencytop                  libpvmp4ffparsernode                sh
Compass                     LatinIME                    libpvmp4ffrecognizer                ShareUidApp
ContactManager                  Launcher                    libpvmp4interface               showlease
Contacts                    Launcher2                   libpvmp4reginterface                showmap
ContactsProvider                launchperf                  libpvomxaudiodecnode                showslab
ContactsProviderTests               layoutlib                   libpvomxbasedecnode             sig
ContactsTests                   layoutlib_api                   libpvomxencnode                 sig-check
core                        layoutlib_create                libpv_omx_interface             sig-create
core-tests                  layoutlib_utils                 libpvomx_proxy_lib              signapk
CoreTests                   layoutopt                   libpvomxvideodecnode                SignatureTest
coverage                    libabi                      libpvplayer_engine              SignatureTestTests
cpueater                    libacc                      libpvpvxparser                  signature-tools
cpufeatures                 libaes                      libpvrtsp_cli_eng_node              SimpleJNI
crasher                     libandroidpv                    libpvrtspinterface              SkeletonApp
create_test_dmtrace             libandroidpvauthor              libpv_rtsp_parcom               SkeletonAppTests
cts                     libandroid_runtime              libpvrtspreginterface               skia_bench
CtsAccessibilityServiceTestCases        libandroid_servers              libpvsdpparser                  skia_gm
CtsAccountManagerTestCases          libapplypatch                   libpvsocketnode                 SlowSuggestions
CtsAppAccessData                libarity                    libpvstreamingmanagernode           SmokeTest
CtsAppSecurityTests             libastl                     libpvthreadmessaging                SmokeTestApp
CtsAppTestCases                 libaudioflinger                 libpvwav                    Snake
CtsAppWithData                  libaudiointerface               libpvwavffparsernode                SnakeTests
CtsBluetoothTestCases               libaudiopolicygeneric               libpvwavffrecognizer                SoftKeyboard
CtsContentTestCases             libbinder                   librank                     soslim
cts-dalvik-buildutil                libbz                       libreference-cdma-sms               sound
CtsDatabaseTestCases                libc                        libreference-ril                SoundRecorder
CtsDelegatingAccessibilityService       libcameraservice                libril                      SpammySuggestions
CtsDpiTestCases                 libcamerastub                   libRS                       SpareParts
CtsDpiTestCases2                libc_common                 librs_jni                   spec-progress
CtsExampleTestCases             libc_debug                  librtppayloadparser             sqlite3
CtsGestureTestCases             libclearsilver-jni              librtprtcp                  SRecTest
CtsGraphicsTestCases                libc_nomalloc                   libsafe_iop                 SRecTestAudio
CtsHardwareTestCases                libcolorconvert                 libsampleplugin                 ssh
CtsInstrumentationAppDiffCert           libcpm                      libSDL                      SslLoad
CtsJniTestCases                 libcrypto                   libSDLmain                  stack_dump
CtsLocationTestCases                libctest                    libsimplejni                    StatusBarTest
CtsMediaTestCases               libcts_jni                  libskia                     Stk
CtsNetTestCases                 libctspermission_jni                libskiagl                   strace
CtsOsTestCases                  libcutils                   libsonivox                  stringtemplate
CtsPerformance2TestCases            libdb                       libsoundpool                    su
CtsPerformance3TestCases            libdbus                     libspeex                    surfaceflinger
CtsPerformance4TestCases            libdbus-tools-common                libsqlite                   svc
CtsPerformance5TestCases            libdex                      libsqlite3_android              swing-worker-1.1
CtsPerformanceTestCases             libdl                       libsqlite3_phone_number_utils_test      swt
CtsPermission2TestCases             libdrm1                     libsqlite3_phonetic_string_utils_test       system_server
CtsPermissionDeclareApp             libdrm1_jni                 libSR_AcousticModels                tcpdump
CtsPermissionTestCases              libdrm2                     libSR_AcousticState             TelephonyProvider
CtsProviderTestCases                libdvm                      libSR_AudioIn                   telephonytest
CtsSharedUidInstall             libebl                      libSR_Core                  temp_layoutlib
CtsSharedUidInstallDiffCert         libebl_arm                  libsrec_jni                 Term
CtsSimpleAppInstall             libedify                    libSR_EventLog                  test_defs.xml
CtsSimpleAppInstallDiffCert         libEGL                      libSR_G2P                   TestDeviceSetup
CtsSpeechTestCases              libelf                      libSR_Grammar                   test-fb-refresh
CtsTargetInstrumentationApp         libelfcopy                  libSR_Nametag                   test-fb-simple
CtsTelephonyTestCases               libembunit                  libSR_Recognizer                test_g2g
CtsTestStubs                    libemoji                    libSR_Semproc                   test-mdp
CtsTextTestCases                libESR_Portable                 libSR_Session                   test-opengl-codegen
CtsUsePermissionDiffCert            libESR_Shared                   libSR_Vocabulary                test-opengl-fillrate
CtsUtilTestCases                libETC1                     libssl                      test-opengl-filter
CtsViewTestCases                libexif                     libstagefright                  test-opengl-finish
CtsWebkitTestCases              libexpat                    libstagefright_omx              test-opengl-gl2_basic
CtsWidgetTestCases              libext                      libstdc++                   test-opengl-gl_basic
CubeLiveWallpapers              libfdlibm                   libsurfaceflinger               test-opengl-gralloc
CustomLocale                    libFFTEm                    libsvoxpico                 test-opengl-linetex
daemonize                   libfst                      libsystem_server                test-opengl-swapinterval
dalvikvm                    libft2                      libsysutils                 test-opengl-textures
dasm                        libgetactualaacconfig               libterm                     test-opengl-tritex
dbus-daemon                 libgif                      libtestplugin                   test-progress
dbus-monitor                    libgl2jni                   libthread_db                    test-progress-new
dbus-send                   libGLES_android                 libthreadsafe_callback_ao           test_swiarb
ddmlib                      libGLESv1_CM                    libtinyxml                  test_zipfile
ddms                        libGLESv2                   libtomcrypt                 timeinfo
ddmuilib                    libgljni                    libtommath                  timetest
debuggerd                   libgoogleclient                 libttspico                  toolbox
DensityTest                 libgtest                    libttssynthproxy                traceview
descGen                     libgtest_main                   libui                       TransformTest
DeskClock                   libhardware                 libunz                      TtsService
Development                 libhardware_legacy              libutil                     tuttle2.kcm
dexdeps                     libhost                     libutils                    uix
dexdump                     libicudata-default              libvorbisidec                   updater
dexlist                     libicudata-eu                   libwbxml                    UpgradeExample
dexopt                      libicudata-jp                   libwbxml_jni                    usbtest
dexopt-wrapper                  libicudata-large                libwebcore                  UserDictionaryProvider
dexpreopt                   libicudata-us                   libwnndict                  VisualizationWallpapers
dex-tools                   libicui18n                  libWnnEngDic                    vm-tests
dhcpcd                      libicuuc                    libWnnJpnDic                    VoiceDialer
dhcpcd-run-hooks                libiptc                     libwpa_client                   Voiper
dictTest                    libjavacore                 libxml2                     vold
DisabledTestApp                 libjni_latinime                 libxml2wbxml                    VpnServices
dmtracedump                 libjni_pinyinime                libz                        wbxmltest
DownloadProvider                libjnitest                  libzipfile                  wdsclient
draw9patch                  libjpeg                     LightingTest                    webkitmerge
DrmProvider                 liblog                      line_endings                    Wiktionary
droiddoc                    libm                        linker                      WiktionarySimple
dumpeventlog                    libm4v_config                   LiveWallpapers                  xmlwriter
dumpkey                     libmedia                    LiveWallpapersPicker                yuv420sp2rgb
dump_regions                    libmedia_jni                    localize                    zipalign
DumpRenderTree                  libmediaplayerservice               logcat
dumpstate                   libmincrypt                 logwrapper
make[1]: Leaving directory `/home/<myuser>/WORKING_DIRECTORY'
rm -rf *.c~
rm -rf *.mod*
rm -rf *.o

您会注意到一些棘手的警告,但据我所知,它们并不是真正的问题。如果有人对这些有不同的看法,请说出来。

 make[1]: Entering directory `/home/<myuser>/WORKING_DIRECTORY'
build/core/copy_headers.mk:15: warning: overriding commands for target     `out/target/product/generic/obj/include/libpv/getactualaacconfig.h'
build/core/copy_headers.mk:15: warning: ignoring old commands for target     `out/target/product/generic/obj/include/libpv/getactualaacconfig.h'
/bin/bash: line 0: cd: sdk/layoutopt/app/src/resources: No such file or directory

我想最后一行听起来很可疑,但我不知道该怎么做。除了我提到的几件奇怪的事情外,看起来这一切都进行得很顺利。但是,整个过程完成后,我找不到 *.ko 文件了。我在我的主目录上做了一个 ls -alRg | grep *.ko 但它什么也没出现。我很难过。如果我可以提供更多信息或运行任何测试或尝试任何不同的方法,我会经常检查。

原文由 Brian Sweeney 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 993
1 个回答

抱歉来晚了,希望对你有帮助:

http://tthtlc.wordpress.com/2011/12/29/how-to-write-a-kernel-module-on-android-sony-ericsson-xperia-arc-s/

我在我的 Sony Ericsson Xperia Arc S 上编写并测试了代码并且它有效(一般来说应该适用于任何 Android 手机)。

通过 adb 和 USB 连接,然后“su”到 root,“lsmod”列出了所有内核模块(一般来说,文章位于

http://web.archive.org/web/20121106004141/http://developer.sonymobile.com/2011/05/06/how-to-build-a-linux-kernel 很好地介绍了该做什么在 SonyEricsson 手机的 Linux 内核编译中):

 lsmod
android_module 654 0 - Live 0x7f007000 (P)
sdio 16532 0 - Live 0x7f000000

“android_module”是我通过 insmod android_module.ko 插入的模块。

方法如下:

首先将原始程序复制自:

http://rechtzeit.wordpress.com/2011/03/21/77/

或转载如下:

android_module.c

 #include"linux/module.h"
#include"linux/kernel.h"
//replace the "" with angular brackets
int init_module(void)
{
  printk(KERN_INFO "Hello android kernel...\n");
  return 0;
}

void cleanup_module(void)
{
  printk(KERN_INFO "Goodbye android kernel...\n");
}

生成文件

 obj-m += android_module.o

all:
make -C /home/tteikhua/android/sony_ericsson_src/58/kernel/ M=$(PWD) modules
clean:
make -C /home/tteikhua/android/sony_ericsson_src/58/kernel/ M=$(PWD) clean

kernel所在的目录(上面的“-C”)就是kernel所在的目录。

以下命令将使用上面的 Makefile

 ARCH=arm CROSS_COMPILE=/opt/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi- make

如上所示,我使用的交叉编译器来自CodeSourcery。

insmod android_module.ko 之后,您可以在 dmesg 输出中看到调试消息:

  <6>[11184.063507] Hello android kernel...
 <7>[11619.209655] msmrtc_timeremote_set_time: 11/29/2011 10:09:36 (04)
 <6>[11619.210418] RPC CALL -- TOD TIME UPDATE: ttick = 404244221
 <6>[11619.210418] stamp=52910543933046785, freq = 0
 <7>[11619.211578] msmrtc_tod_proc_result: 12/29/2011 10:09:36 (03)
 <6>[11619.211578] rs30000048 rs30000048.262144: setting system clock to 2011-12-29 10:09:36 UTC (1325153376)
 <6>[11662.112365] device rmnet0 left promiscuous mode
 <6>[11662.112579] device rmnet0 entered promiscuous mode
 <6>[11669.958221] device rmnet0 left promiscuous mode
 <6>[11669.958435] device rmnet0 entered promiscuous mode
 <7>[11698.181060] msmrtc_timeremote_set_time: 11/29/2011 10:10:55 (04)
 <6>[11698.187622] RPC CALL -- TOD TIME UPDATE: ttick = 406832008
 <6>[11698.187652] stamp=52910548228014081, freq = 0
 <7>[11698.193939] msmrtc_tod_proc_result: 12/29/2011 10:10:55 (03)
 <6>[11698.194030] rs30000048 rs30000048.262144: setting system clock to 2011-12-29 10:10:55 UTC (1325153455)
 <6>[11814.442901] bq27520 0-0055: bq27520_handle_soc_worker() capacity=97 (100) flags=0x229 ctrl_status=0x28b soh_state=0x3, valid=1
 <6>[11984.057373] Goodbye android kernel...

“再见”是执行 rmmod android_module 时。中间是来自内核中其他组件的调试消息。

最后的话:

以上是2011年写的,更多现代资源请参考以下入门:

https://source.android.com/docs/core/architecture/kernel/modular-kernels

https://source.android.com/docs/core/architecture/kernel

https://source.android.com/docs/setup/build/building-kernels

https://source.android.com/docs/core/architecture/kernel/loadable-kernel-modules

原文由 Peter Teoh 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题