簡體   English   中英

使用Android系統為特殊的ARM設備構建linux內核模塊

[英]Build linux kernel modules for a special ARM device with Android system

我有一個android設備,其Linux內核在下面。

shell@android:/ # uname -a
uname -a
Linux localhost 3.0.50-g72b01fe #1 SMP PREEMPT Tue Nov 26 14:22:32 CST 2013 armv
7l GNU/Linux

我想為該設備構建一個uvc驅動器模塊。 因此,請在Linux內核3.0.101上構建模塊。 我沒有找到3.0.50版本的內核,所以改用3.0.101。

$ export ARCH=arm
$ export CROSS_COMPILE=arm-linux-gnueabi-
$ build modules

但是我想使用insmod在設備中安裝模塊。 我遇到一個錯誤。

$ insmod /tmp/videobuf2-core.ko
init_module 'videobuf2-core.ko' failed (Exec format error)

因此,我使用modinfo,file和arm-linux-gnueabi-readelf命令來檢查videobuf2_core.ko

$ modinfo videobuf2-core.ko
filename:       videobuf2-core.ko
license:        GPL
author:         Pawel Osciak <pawel@osciak.com>, Marek Szyprowski
description:    Driver helper framework for Video for Linux 2
srcversion:     30ECE251825184452C89B09
depends:        
vermagic:       3.0.101  mod_unload modversions ARMv5 
parm:           debug:int 

$ file videobuf2-core.ko
videobuf2-core.ko: ELF 32-bit LSB relocatable, ARM, version 1, BuildID[sha1]=0x06240ff3b9f45700086c387fb2b411848ad65fcd, not stripped

$ arm-linux-gnueabi-readelf -a videobuf2-core.ko | head
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 61 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            ARM
  ABI Version:                       0
  Type:                              REL (Relocatable file)
  Machine:                           ARM
  Version:                           0x1

但是我在設備dhd.ko中找到了一個正常的模塊,有關dhd.ko的信息如下

$ modinfo dhd.ko
filename:       dhd.ko
license:        GPL v2
depends:        
vermagic:       3.0.50-g72b01fe SMP preempt mod_unload modversions ARMv7 

$ file dhd.ko
dhd.ko: ELF 32-bit LSB relocatable, ARM, version 1 (SYSV), BuildID[sha1]=0x2db993479965068d38e108b675a8315aa0965f5f, not stripped

$ arm-linux-gnueabi-readelf -a dhd.ko | head
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              REL (Relocatable file)
  Machine:                           ARM
  Version:                           0x1

通過比較兩個文件。 我發現有一些差異。

vermagic:

    videobuf2-core.ko which is built by me
        3.0.101  mod_unload modversions ARMv5 

    dhd.ko which is normal module in the device
        3.0.50-g72b01fe SMP preempt mod_unload modversions ARMv7 

ELF info

    videobuf2-core.ko which is built by me
        ELF 32-bit LSB relocatable, ARM, version 1, BuildID[sha1]=0x06240ff3b9f45700086c387fb2b411848ad65fcd, not stripped

    dhd.ko which is normal module in the device
        ELF 32-bit LSB relocatable, ARM, version 1 (SYSV), BuildID[sha1]=0x2db993479965068d38e108b675a8315aa0965f5f, not stripped

OS/ABI

    videobuf2-core.ko which is built by me
        ARM

    dhd.ko which is normal module in the device
        UNIX - System V

如何配置以構建Linux內核模塊,使我的videobuf2-core.ko與普通模塊dhd.ko類似? 而且我可以使用insmod命令將我的模塊安裝在設備中。

在這種情況下,最簡單的方法可能是使用3.0.101 Linux版本運行android。 您確定針對此ARM體系結構(armv5與armv7)具有正確的工具鏈(gcc)嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM