您好针对Android和放大器世界的内核模块;未知搬迁:27 insmod的时候 [英] Hello world kernel module for android & unknown relocation: 27 when insmod

查看:276
本文介绍了您好针对Android和放大器世界的内核模块;未知搬迁:27 insmod的时候的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个简单的内核模块。 我想消息打印到dmesg的,但我不断收到

insmod的:init_module的hello.ko在安卓失败(执行格式错误)

在: dmesg的: 未知搬迁:27

 的#include< Linux的/  -  module.h中GT;
#包括< Linux的/ kdb.h>
INT的init_module(无效)
{
    printk的(KERN_ALERT的Hello world \ N!);
    返回1;
}

无效cleanup_module时(无效)
{
    printk的(KERN_INFO再见世界1 \ N);
}
MODULE_AUTHOR(罗伯特P. J.日);
MODULE_LICENSE(双BSD / GPL);
MODULE_VERSION(2:1.0);
MODULE_DESCRIPTION(你必须从某个地方开始。);
 

make文件

  OBJ-M + = hello.o


KERNELDIR?=〜/安卓/内核/共同
#KERNELDIR?= / lib目录/模块/ $(壳使用uname -r)/建
PWD:= $(壳PWD)
CROSS_COMPILE=~/android-ndk-r8/toolchains/arm-linux-androideabi-4.4.3/$p$pbuilt/linux-x86/bin/arm-linux-androideabi-

ARCH =手臂
默认:
$(MAKE)-C $(KERNELDIR)M = $(PWD)ARCH =手臂CROSS_COMPILE = $(CROSS_COMPILE)模块

清洁:
$(MAKE)-C $(KERNELDIR)M = $(PWD)清洁
RM * .symvers
 

没有人知道为什么吗?而如何得到它的工作?

我做了readelf,它编译时搬迁部分指向错误的方向后发现。

 偏移讯息Sym.Value符号。名称
00000008 0000171b R_ARM_PLT32 00000000的printk
 

当实际上它应该是:

 偏移讯息Sym.Value符号。名称
00000008 0000171c R_ARM_CALL 00000000的printk
 

有人能猜到/知道这可能是什么? 感谢@克里斯斯特拉顿帮我这么远。<​​/ P>


我做了readelf,它编译时搬迁部分指向错误的方向后发现。

 偏移讯息Sym.Value符号。名称
00000008 0000171b R_ARM_PLT32 00000000的printk
 

当实际上它应该是:

 偏移讯息Sym.Value符号。名称
00000008 0000171c R_ARM_CALL 00000000的printk
 

有人能猜到/知道这可能是什么?感谢@克里斯斯特拉顿帮我这么远。<​​/ P>

解决方案

事实证明,我不得不使用

 使CFLAGS_MODULE = -fno-PIC
 

I am trying to create a simple kernel module. I am trying to print messages to dmesg but i keep getting

insmod: init_module 'hello.ko' failed (Exec format error) in android

after : dmesg: unknown relocation: 27

#include <linux/module.h>
#include <linux/kdb.h>
int init_module(void)
{
    printk(KERN_ALERT "Hello world!\n");
    return 1;
}

void cleanup_module(void)
{
    printk(KERN_INFO "Goodbye world 1.\n");
}
MODULE_AUTHOR("Robert P. J. Day");
MODULE_LICENSE("Dual BSD/GPL");
MODULE_VERSION("2:1.0") ;
MODULE_DESCRIPTION("You have to start somewhere.");

The make file

    obj-m +=hello.o


KERNELDIR ?= ~/android/kernel/common
#KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
CROSS_COMPILE=~/android-ndk-r8/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-

ARCH=arm
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) modules

clean:
$(MAKE) -C $(KERNELDIR) M=$(PWD) clean
rm *.symvers

does anyone know why? And how to get it working?

I found after doing a readelf that when it is compiled the relocation section is pointing to the wrong directions.

Offset     Info    Type            Sym.Value  Sym. Name
00000008  0000171b R_ARM_PLT32       00000000   printk

When in fact it should be:

Offset     Info    Type            Sym.Value  Sym. Name
00000008  0000171c R_ARM_CALL       00000000   printk

Can someone guess/know how this might be? Thanks @Chris Stratton for helping me this far.


I found after doing a readelf that when it is compiled the relocation section is pointing to the wrong directions.

Offset     Info    Type            Sym.Value  Sym. Name
00000008  0000171b R_ARM_PLT32       00000000   printk

When in fact it should be:

Offset     Info    Type            Sym.Value  Sym. Name
00000008  0000171c R_ARM_CALL       00000000   printk

Can someone guess/know how this might be? Thanks @Chris Stratton for helping me this far.

解决方案

It turns out I had to use

make CFLAGS_MODULE=-fno-pic

这篇关于您好针对Android和放大器世界的内核模块;未知搬迁:27 insmod的时候的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆