/> Проблема в том, что если бы я собрал ядро из этого репозитория: https://android.googlesource.com/kernel/common/+refs в ветке android12-5.10.185_r00, оно скомпилирует модуль до версии ядра 5.10.185. но не работает на эмуляторе с версией ядра: 5.10.185-android12-9-00043-g383607d234da-ab10550364.
Это действительно странно...
Некоторая идея, что что делать?
пошагово:
Компиляция ядра (.config с конфигурацией по умолчанию — это занимает много времени)
Код: Выделить всё
mkdir kernelDriver
cd kernelDriver
git clone https://android.googlesource.com/kernel/common -b android12-5.10.185_r00
cd common
make ARCH=x86_64 oldconfig
make ARCH=x86_64
cp scripts/module.lds.S scripts/module.lds
cd ..
before
Код: Выделить всё
.text : ALIGN(PAGE_SIZE) {
Код: Выделить всё
.text : ALIGN(4096) {
Makefile:
Код: Выделить всё
obj-m:= hello.o
KERNEL_DIR := ~/kernelDriver/common
EXTRA_CFLAGS=-fno-pic
all:
make ARCH=x86_64 -C $(KERNEL_DIR) M=$(PWD) EXTRA_CFLAGS=$(EXTRA_CFLAGS) modules
clean:
make -C $(KERNEL_DIR) M=$(PWD) clean
Код: Выделить всё
#include
#include
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("cathat");
int hello_init(void)
{
printk(KERN_INFO "Hello World\n");
return 0;
}
void hello_exit(void)
{
printk(KERN_INFO "Goodbye World\n");
}
module_init(hello_init);
module_exit(hello_exit);
Код: Выделить всё
make ARCH=x86_64
Код: Выделить всё
adb push hello.ko /data/local/tmp/
adb shell
su
cd /data/local/tmp
insmod hello.ko
Код: Выделить всё
dmesg
API 31
(для запуска модуля необходимо иметь права root )
Подробнее здесь: https://stackoverflow.com/questions/787 ... nel-source
Мобильная версия