Как создать загружаемый модуль ядра для Android? - PullRequest
16 голосов
/ 08 июня 2011

Я знаю, что там есть множество пошаговых руководств и учебных пособий, описывающих эту деятельность, но после прочтения многих из них я все еще не могу заставить это работать. Если у кого-то хватит терпения пройтись по шагам, которые я предпринял (опубликовано ниже), и предложить, где я мог сбиться с пути, я был бы очень благодарен. Я потратил около полутора дней, изучая создание файлов и читая пошаговые руководства, так что буквально любые предложения были бы полезны.

Окружающая среда:

  • Я использую Ubuntu 10.04 32 bit vm.
  • Хостинг у меня из 64 битных окон 7
  • Мой Core 2 Duo не имеет аппаратной поддержки для 64-битных виртуальных машин, поэтому я пытаюсь скомпилировать его с ядром Android 2.1
  • Я установил Java 1.5 из репозитория Dapper и удалил установку 1.6
  • Остальная часть инструмента была приобретена в соответствии с документацией по Android dev ...

Согласно Инициализация среды сборки :

Java

$ 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

Затем из Загрузка дерева исходного кода :

Repo:

$ 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. Содержимое make-файла ниже:

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 и makefiles, но мне это показалось разумным. Моя главная проблема с этим файлом - переменная KERNEL-DIR. Я попробовал несколько разных значений для этой переменной, но получил все виды ошибок, где я не с ее текущим значением. Конечно, это все еще может быть неправильно, поэтому любые комментарии здесь приветствуются.

Итак, насколько я знаю, я должен быть в состоянии выполнить make без аргументов или чего-либо еще и выяснить, что ему нужно делать. Я пробовал make, make -f как с sudo, так и без него. Все четыре перестановки дают одинаковые результаты:

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 в своем домашнем каталоге, и ничего не получилось. Я в тупике. Если я смогу предоставить какую-либо дополнительную информацию или выполнить какие-либо тесты или попробовать что-то другое, я буду проверять часто.

Ответы [ 3 ]

7 голосов
/ 19 июля 2012

Извините за опоздание, но надеюсь, что это поможет:

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» к корню, «lsmod» перечислил весь модуль ядра (в общем, статья в http://developer.sonyericsson.com/wp/2011/05/06/how-to-build-a-linux-kernel/ дала очень хорошее представление о том, что делать в ядре Linux сборник для телефона SonyEricsson):

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");
}

Makefile

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

В каталоге, где находится ядро ​​(«-C» выше), я скачал образ ядра SonyEricsson отсюда:

http://developer.sonyericsson.com/wportal/devworld/downloads/download/30a2181182tarbz2?cc=gb&lc=en

И следующая команда будет использовать Makefile сверху:

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

Как показано выше, кросс-компилятор, который я использовал, взят из CodeSourcery.

И после insmod android_module.ko вы можете увидеть сообщение об отладке в dmesg output:

 <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 исполняется. Между ними отладочные сообщения от других компонентов ядра.

3 голосов
/ 08 июня 2011

Мне кажется, я понял, что ядро ​​эмулятора не поддерживает модуль, поэтому вы должны также скомпилировать ядро ​​с поддержкой модулей.

Я надеюсь, что эта ссылка поможет вам

2 голосов
/ 21 июля 2011

Есть две вещи, которые вам нужно сделать.Во-первых, создайте ядро ​​эмулятора, которое поддерживает загружаемые модули ядра.

Здесь есть полный пост , посвященный процессу настройки ядра эмулятора.

Есть 2 частиинструкции по изменению:

  1. Я считаю, что проще всего держать ядро ​​в зоне репо (в данном случае ~ / WORKING_DIRECTORY), например так:

    cd ~/WORKING_DIRECTORY
    mkdir kernel
    cd kernel
    git clone git://android.git.kernel.org/kernel/common.git
    
  2. Однако информация о филиалах больше не верна, поэтому там, где говорится:

    git checkout -t origin/android-goldfish-2.6.29 -b goldfish
    

, используйте это вместо:

    git checkout -t archive/android-gldfish-2.6.29 -b goldfish

Как вы узнали, ядро ​​по умолчанию не настроено с поддержкой загружаемых модулей.Включить перед компиляцией.После этого:

make ARCH=arm goldfish_defconfig

сделайте это:

make ARCH=arm menuconfig

Появится текстовое меню.Используйте клавиши со стрелками вверх / вниз для навигации, пробел, чтобы выбрать опцию, Enter, чтобы развернуть меню (меню имеют --->) в конце строки, и Esc-Esc, чтобы вернуться в меню.

  1. Выберите «Включить поддержку загружаемого модуля», прокрутив вниз и нажав пробел
  2. Нажмите Esc-Esc для выхода и нажмите Enter, чтобы сохранить новую конфигурацию

Теперь сборка,Используя ваши настройки, это будет:

make ARCH=arm CROSS_COMPILE=/home/<myuser>/WORKING_DIRECTORY/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-

Теперь, когда все готово, вы можете выполнить вторую часть, которая заключается в создании загружаемого модуля ядра.Вы были почти там, но поскольку у вас не было исходного кода ядра для эмулятора, он не работал.Просто возьмите ваш make-файл и измените KERNEL_DIR на:

KERNEL_DIR ?= /home/<myuser>/WORKING_DIRECTORY/kernel/common
...