Armadilloフォーラム

Debian GNU/Linux 9 (“stretch”) ベース + linux-4.9-x1-at2.tar.gz でコンパイルエラー

hajime_ishitani

2018年9月19日 20時39分

お世話になります。
石谷と申します。

Armadillo-IoT G3にLoRaアドオンモジュールを接続するためにカーネルの
再コンパイルを試行しているところで配布カーネルでコンパイルエラーが
出ます。
いちおう自己解決しましたがFAQになると思いましたので投稿させて頂きます。

下記の開発ツールとカーネルをダウンロードして、何も触らずカーネル単体
でコンパイルをすると最後のリンカーでエラーが出てカーネルの生成に失敗します。

1.開発ツール
開発環境 ATDE7 (VMware仮想イメージファイル)
Armadilloシリーズ専用の開発環境(Debian GNU/Linux 9 (“stretch”) ベース)

2.Linuxカーネル
Armadillo-IoTゲートウェイ G3 製品ソフトウェア (Linux 4.9)
標準製品のイメージファイルとソースコード (最新版)
linux-4.9-x1-at2.tar.gz

Windows7上にVMWareをインストールしATDE7を起動させ
Linuxソースを /usr/src/linux に展開

●やってみたこと
make menuconfig で一旦画面を見て何も触らず終了し

make clean; make -r でコンパイルスタートし数時間後に下記エラーで止まります。

-----ここから-----
LD virt/lib/built-in.o
CC [M] virt/lib/irqbypass.o
LD virt/built-in.o
LD vmlinux.o
MODPOST vmlinux.o
GEN .version
CHK include/generated/compile.h
UPD include/generated/compile.h
CC init/version.o
LD init/built-in.o
drivers/built-in.o: 関数 `mma8451_probe' 内:
/usr/src/linux/drivers/hwmon/mxc_mma8451.c:471: `input_allocate_polled_device' に対する定義されていない参照です
/usr/src/linux/drivers/hwmon/mxc_mma8451.c:490: `input_register_polled_device' に対する定義されていない参照です
/usr/src/linux/drivers/hwmon/mxc_mma8451.c:509: `input_free_polled_device' に対する定義されていない参照です
Makefile:987: ターゲット 'vmlinux' のレシピで失敗しました
make: *** [vmlinux] エラー 1
root@atde7:/usr/src/linux#
-----ここまで-----

●下記のKconfigとmxc_mma8451.cを修正することで問題無くコンパイルが完了しました。
-----ここから-----
linux-4.9-x1-at2/drivers/hwmon/Kconfig
config MXC_MMA8451
tristate "MMA8451 device driver"
depends on I2C
depends on INPUT && INPUT_POLLDEV ★追記
default y
-----ここまで-----

-----ここから-----
linux-4.9-x1-at2/drivers/hwmon/mxc_mma8451.c
557行目
static const struct i2c_device_id mma8451_id[] = {
{"mma8451", 0},
{ } ★追記
};
-----ここまで-----

他の開発環境ではエラーになってないのかは検証しておりません。
以上ご報告まで

コメント

hajime_ishitani

2018年9月19日 22時26分

お世話になります。
石谷と申します。

すみません少し勘違いしていた見たいですので追記です。
アットマークテクノ殿よりDLした下記カーネルソースですが
linux-4.9-x1-at2.tar.gz

は元々の .config はx86用になっている様です。
ですので「素」のままコンパイルするとx86のカーネルが出来上がってしまいます。

ARM 用にコンパイルするためにArmadillo-IoT G3 の /proc/config.gz を取ってきて
展開し、make menuconfig で load してみましたが processor で ARM が選択出来ず
生成された .config も x86 用となり目的の物をコンパイルする迄に至っておりません。

何か勘違い等があるのであればご教示頂きたくお願いします。

y.nakamura

2018年9月20日 3時50分

中村です。

> アットマークテクノ殿よりDLした下記カーネルソースですが
> linux-4.9-x1-at2.tar.gz
>
> は元々の .config はx86用になっている様です。
> ですので「素」のままコンパイルするとx86のカーネルが出来上がってしまいます。
>
> ARM 用にコンパイルするためにArmadillo-IoT G3 の /proc/config.gz を取ってきて
> 展開し、make menuconfig で load してみましたが processor で ARM が選択出来ず
> 生成された .config も x86 用となり目的の物をコンパイルする迄に至っておりません。
>
> 何か勘違い等があるのであればご教示頂きたくお願いします。

マニュアルを読んでますか?

最初の投稿で、
>> ●やってみたこと
>> make menuconfig で一旦画面を見て何も触らず終了し
>>
>> make clean; make -r
>> でコンパイルスタートし数時間後に下記エラーで止まります。
と書かれていますけど、

[10.2. Linuxカーネルをビルドする]
https://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_pro…
を読んで、このとおりにやってみてください。

--
なかむら

hajime_ishitani

2018年9月20日 22時27分

お世話になります

色々とありがとうございました。
教えて頂いた方法にてLoRaアドオンモジュールを組み込み無事コンパイルが通りました。

グリーンハウス殿のソースは現在のカーネルに適合していない様なので手を加えなければなりませんでした。

以上、ご報告まで
石谷