tag studio android kernel-module android-source

studio - ¿Cómo crear un módulo de kernel cargable para Android?



android tag (3)

Sé que hay una serie de tutoriales y tutoriales que describen esta actividad, pero después de leer muchos de ellos todavía no puedo hacer que esto funcione. Si alguien tiene la paciencia de leer los pasos que he tomado (publicado a continuación) y sugerirme dónde puedo haber descarrilado, estaría muy agradecido. He pasado alrededor de un día y medio mirando los archivos de make y repasando tutoriales, así que literalmente cualquier sugerencia sería útil.

Ambiente:

  • Estoy usando un Ubuntu 10.04 32 bit vm.
  • Estoy alojando desde una ventana de 64 bits 7
  • My Core 2 Duo no tiene soporte de hardware para máquinas virtuales de 64 bits, así que estoy tratando de compilar contra el kernel de Android 2.1
  • Instalé Java 1.5 del repositorio Dapper y eliminé mi instalación 1.6
  • El resto de las herramientas se han adquirido de acuerdo con la documentación de desarrollo de Android ...

Según la inicialización de un entorno de construcción :

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

Otros requeridos:

$ 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

Luego desde Descargar el Árbol de Origen :

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)

Y desde Construyendo el Sistema :

Inicializar:

$ source build/envsetup.sh

Elija un objetivo:

$ lunch generic-user

Construye el Código:

$ make -j4

¡Adicional! Salida de 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

¡Adicional!

Así que resulta que tengo algunos problemas aquí. Supongo que una vez que haya superado estos problemas, tendré un entorno capaz de compilar los módulos del kernel. Por favor, corrígeme si me equivoco.

A continuación, me dirijo a mi directorio que contiene mi archivo module.c y es makefile. Contenido del makefile a continuación:

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

Tengo muy poca experiencia con make y makefiles, pero esto me pareció razonable. Mi principal preocupación con este archivo es la variable KERNEL-DIR . Probé algunos valores diferentes para esa variable, pero obtuve todo tipo de errores donde no lo hago con su valor actual. Por supuesto, todavía podría estar equivocado, por lo que cualquier comentario aquí es bienvenido.

Por lo tanto, hasta donde sé, debería poder ejecutar make sin argumentos ni nada y descubriré lo que debe hacer. He intentado hacer, make -f con y sin sudo. Las cuatro permutaciones dan los mismos resultados:

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

Notarás unas cuantas advertencias, pero lo mejor que puedo decir es que no son problemas reales. Si alguien se siente diferente acerca de estos, por favor dígalo.

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

Supongo que la última línea suena bastante sospechosa, pero no tengo idea de qué hacer al respecto. Aparte de las pocas cosas extrañas que he mencionado, parece que todo salió bien. Sin embargo, después de que todo se complete, no puedo encontrar el archivo * .ko en ningún sitio. Hice un ls -alRg | grep *.ko ls -alRg | grep *.ko en mi directorio de inicio y no aparece nada. Estoy perplejo. Si puedo proporcionar más información, realizar pruebas o probar algo de manera diferente, lo consultaré con frecuencia.


Creo que me he dado cuenta de que el kernel del emulador no es compatible con el módulo, por lo que debe compilar también el kernel con el soporte de los módulos.

Espero que http://rechtzeit.wordpress.com/2011/03/21/77/ te ayude.


Hay dos cosas que deberás hacer. En primer lugar, cree un kernel de emulador que admita módulos de kernel cargables.

Aquí hay una publicación completa que cubre el proceso de configuración del kernel del emulador.

Hay 2 partes de las instrucciones para modificar:

  1. Me parece más fácil mantener el kernel dentro del área de recompra (en este caso, ~ / WORKING_DIRECTORY), así:

    cd ~/WORKING_DIRECTORY mkdir kernel cd kernel git clone git://android.git.kernel.org/kernel/common.git

  2. Sin embargo, la información de la rama ya no es correcta, por lo que donde dice:

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

usa esto en su lugar:

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

Como ya descubrió, el kernel por defecto no está configurado con el soporte de módulos cargables. Habilitar antes de compilar. Después, este paso:

make ARCH=arm goldfish_defconfig

hacer esto:

make ARCH=arm menuconfig

Aparecerá un menú basado en texto. Use las teclas de flecha Arriba / Abajo para navegar, Espacio para seleccionar una opción, Intro para expandir un menú (los menús tienen --->) al final de la línea, y Esc-Esc para retroceder un menú.

  1. Selecciona "Habilitar soporte de módulo cargable" desplazándote hacia abajo y presionando Espacio
  2. Presione Esc-Esc para salir y presione Entrar para guardar la nueva configuración

Ahora construir Usando su configuración, sería:

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

Ahora que ya está hecho, puede hacer la segunda parte, que es crear un módulo de kernel que se pueda cargar. Estabas casi allí, pero como no tenías la fuente del kernel para el emulador, no funcionó. Simplemente toma el makefile que tienes y cambia KERNEL_DIR a:

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


Lo siento por llegar tarde, pero espero que ayude:

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

Escribí y probé el código en mi Sony Ericsson Xperia Arc S y funciona (en general, debería funcionar para cualquier teléfono Android).

Al conectarse a través de adb y USB, y "su" a la raíz, el "lsmod" enumeró todo el módulo del kernel (en general, el artículo en http://developer.sonyericsson.com/wp/2011/05/06/how-to-build-a-linux-kernel/ dio una muy buena cobertura de qué hacer en la compilación del kernel de Linux para el teléfono SonyEricsson):

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

"Android_module" fue el que insmod android_module.ko través de insmod android_module.ko .

Aquí está cómo hacerlo:

Primero se copió el programa original de:

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

O reproducido de la siguiente manera:

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

El directorio donde se encuentra el kernel ("-C" arriba) es donde descargué la imagen del kernel de SonyEricsson desde aquí:

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

Y el siguiente comando usará el Makefile de arriba:

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

Como se muestra arriba, el compilador cruzado que había usado es de CodeSourcery.

Y después de insmod android_module.ko , puede ver el mensaje de depuración en la salida de 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...

Y el "Adiós" es cuando se ejecuta rmmod android_module . En el medio están los mensajes de depuración de otros componentes en el kernel.