2

crosstool-ng 1.15.3 を使用して、raspberryPi(arm) 用の (example) linuxmodule をクロスコンパイルしようとしています。

次の出力が得られました。

markus@markus-R55S:~/Desktop/speakerarm$ make ARCH=arm CROSS_COMPILE=arm-unknown-linux-gnueabi- 
make -C /lib/modules/3.2.0-35-generic-pae/build SUBDIRS=/home/markus/Desktop/speakerarm modules
make[1]: Entering directory `/usr/src/linux-headers-3.2.0-35-generic-pae'
  CC [M]  /home/markus/Desktop/speakerarm/speaker.o
In file included from /usr/src/linux-headers-3.2.0-35-generic-pae/arch/arm/include/asm/types.h:4:0,
                 from include/linux/types.h:4,
                 from include/linux/list.h:4,
                 from include/linux/module.h:9,
                 from /home/markus/Desktop/speakerarm/speaker.c:1:
include/asm-generic/int-ll64.h:11:29: fatal error: asm/bitsperlong.h: No such file or directory
compilation terminated.
make[2]: *** [/home/markus/Desktop/speakerarm/speaker.o] Error 1
make[1]: *** [_module_/home/markus/Desktop/speakerarm] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.2.0-35-generic-pae'
make: *** [default] Error 2

インクルードパスに何か問題があると思います。私のホスト マシンにはカーネル 3.2.35 があり、ターゲット マシンは 3.2.27+ です。私の間違いは何ですか?Makefile には次のものが含まれます。

obj-m   := speaker.o

KDIR    := /lib/modules/$(shell uname -r)/build
PWD     := $(shell pwd)

default:
    $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
4

2 に答える 2

1

注意すべき点がいくつかあります。

  1. 開発ホストの Linux ソース ツリーに対してコンパイルしています。-generic-paeポストフィックスから判断すると、カーネルのメインラインではない可能性があります。ARM SoC の変更がメインラインに反映されるまでには長い時間がかかり、ARM 以外の他のカーネル ブランチに反映されるまでにはさらに時間がかかります。SoC の変更が統合されているカーネル ツリーを見つけて、3.2head ではなく などのタグ付きバージョンを取得することをお勧めします。

  2. ARM カーネルをビルドするために Linux ビルド システムを構成しましたか? 例えば

export ARCH=arm

make clean

make rpi_defconfig

そうしないと、カーネルが x86 ビルド用に構成され、/arch/armフォルダー内のヘッダーが使用できなくなります。ARCH

モジュールをビルドする前に、完全なカーネルをビルドして、それが機能することを確認することをお勧めします。

于 2013-01-05T17:56:52.970 に答える
0

カーネル3.2.27rpi -3.3.27をダウンロードし、 RPi_Kernel_Compilationに記載されている手順に従います。

于 2013-02-02T08:45:05.980 に答える