Загрузка модуля ядра в ядро ​​Android

Здесь я перечисляю свою проблему.

У меня с собой телефон Google Nexus, он же "страсть". В телефоне установлены инструменты fastboot и adb. И загрузчик разблокирован.

Моя задача: мне нужно добавить модуль ядра linux в ядро ​​Android.

Что я сделал:

Я выполнил шаги из http://source.android.com/source/initializing.html и загрузил ядро ​​для android-2.3.6_r1 (страсть) и построили. Я также могу прошить его на телефоне, и новое ядро ​​Android также отлично работает. Теперь я хочу изменить ядро ​​и добавить свой собственный модуль ядра, а затем прошить его на телефоне, чтобы ядро ​​на телефоне было моим модифицированным ядром.

Теперь я нашел два подхода к этому.

1)

Перекомпилируйте мой модуль ядра с ядром Android и загрузите его на устройство с помощью команды adb. Makefile, который я использую в ядре, выглядит следующим образом.

VERSION = 2
PATCHLEVEL = 3
SUBLEVEL = 6
EXTRAVERSION = -00054-g5f01537
obj-m += hello-1.o
KDIR=/home/apurva/android_dir
PWD := $(shell pwd)
all:
        make -C $(KDIR) ARCH=arm CROSS_COMPILE=/home/apurva/android_dir/prebuilt/linux-    x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- SUBDIRS=$(PWD) modules

clean:
        make -C $(KDIR) ARCH=arm CROSS_COMPILE=/home/apurva/android_dir/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- SUBDIRS=$(PWD) clean

Теперь невозможно создать новый hello-1.ko. Я не знаю почему, я предполагаю, что есть некоторая проблема со значениями VERSION, PATCHLEVEL, SUBLEVEL и EXTRAVERSION. Это необходимо? Я также пробовал это значение из android-2.3.6_r1, но оно все равно не работает. Я не уверен, что это за значение EXTRAVERSION?

Я даже пробовал использовать hello-1.ko, сгенерированный компилятором в моем ubuntu. Я нажал на это hello-1.ko в эмулятор с помощью следующей команды adb.

/root/bin/src/out/host/linux-x86/bin/adb shell mount
/root/bin/src/out/host/linux-x86/bin/adb push hello-1.ko /data
/root/bin/src/out/host/linux-x86/bin/adb insmod /data/hello-1.ko

Но этот hello-1.ko не может работать с insmod, и я получаю следующую ошибку. insmod: Ошибка в init_module () функция hello-1.ko не реализована

В то время как hello-1.c довольно проста:

#include        /* Needed by all modules */
#include        /* Needed for KERN_INFO */

int init_module(void)
{
        printk(KERN_INFO "Hello world 1.\n");
        return 0;
}

void cleanup_module(void)
{
    printk(KERN_INFO "Goodbye world 1.\n");
}

2)

Второй способ сделать это может заключаться в размещении моих исходных файлов модуль ядра в каталоге ядра android. Может быть в системном каталоге или где-то еще и попросить make собрать эти исходные файлы вместе с другим источником. Но я не уверен, где это сделать. Я попытался сделать это в main.mk и создал файл Android.mk в исходном каталоге моих исходных файлов, но это не сработало. Может быть, это лучшее решение, но я не смог найти в этом никакой помощи.

После этого мои модули ядра должны иметь возможность управлять wnic (устройством беспроводного сетевого интерфейса) телефона Android. Он должен иметь возможность перевести wnic в спящий режим, а затем разбудить его после получения команды от моего модуля ядра. Если у вас есть подсказки, как это сделать, это вам поможет. Я обнаружил, что на Android он управляется частным драйвером wpa_supplicant. Команды, например:

wpa_cli driver powermode 0 - auto 
wpa_cli driver powermode 1 - active

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

Пожалуйста, изучите это и предоставьте некоторую помощь / руководство.

Спасибо,

Apurva

12
задан Yury 24 February 2012 в 14:30
поделиться