Armadilloフォーラム

デバイスドライバ追加のサンプルプログラムでビルドエラーが発生

haruka0606

2014年2月20日 11時24分

いつもお世話になっております。中井と申します。

Atmark-distでデバイスドライバ追加の動作確認を行っているのですが、
下記ページにある「サンプルプログラム」のビルドでエラーになります。
●atmark-dist開発者ガイド->第11章 新規デバイスドライバの追加方法
http://manual.atmark-techno.com/dist/atmark-dist_developers_guide_ja-1…

■事前準備
1.atmark-distの環境を構築
2.プログラムコードとメイクファイルは公開されているものを流用
 (正しMakefileは指示に従って一部変更)

■実施手順
1. 端末から 'make modules' を実行
 ⇒下記のエラーが発生するが .o/.ko/.mod.o の各ファイルは生成されている。
make[2]: *** [silentoldconfig] エラー 1
make[1]: *** [silentoldconfig] エラー 2
2. 端末から 'make romfs' を実行
 ⇒下記のエラーが発生し、makeが失敗する。
make[2]: *** [silentoldconfig] エラー 1
make[1]: *** [silentoldconfig] エラー 2
make: ../atmark-dist-20140131/user/busybox/examples/depmod.pl: コマンドが見つかりませんでした

atmark-distのフォルダ構成を確認したところ、examplesフォルダ自体が
存在していませんでした。

このdepmodというファイルはどこから入手すればよいのでしょうか。
ファイル名をキーワードに検索してみましたが、これといった情報が
見当たりませんでした。

尚、silentoldconfigのエラーは全てのオプション(cleanとか)でも発生する
ため、別の要因と推測されます。

以上、よろしくお願いいたします。

コメント

haruka0606

2014年2月24日 10時02分

中井です。
状況が少しだけ進展しましたので、改めて質問いたします。

depmod.plのありかは見つかった(busybox/busybox-1.20.2)のですが、Makefileで
そのフォルダを指定すると

../atmark-dist-20140131/user/busybox/busybox-1.20.2/examples/depmod.pl -b \
../atmark-dist-20140131/user/busybox/busybox-1.20.2/examples/depmod.pl -b basedir { -k | -F } [options]...
Where:
-h --help : Show this help screen
-b --basedir : Modules base directory (e.g /lib/modules/<2.x.y>)
-k --kernel : Kernel binary for the target (e.g. vmlinux)
-F --kernelsyms : Kernel symbol file (e.g. System.map)
-n --stdout : Write to stdout instead of /modules.dep
-v --verbose : Print out lots of debugging stuff
-P --symbol-prefix : Symbol prefix
-a --all : Probe all modules (default/only thing supported)
-e --errsyms : Report any symbols not supplied by modules/kernel
make: *** [romfs] エラー 2

というエラーが発生します。そこで depmod.plのbオプションに作成したkoファイルがある
フォルダ(/home/atmark/message)を指定してみましたが、やはり結果は同じでした。
今度は何が悪いのでしょうか?

使用している環境は、下記になります。
・仮想ファイル : atde5-amd64-20140131
・ディストリビューション : atmark-dist-20140131
・カーネル : linux-3.4-at6

y.nakamura

2014年2月24日 10時26分

中村です。

> depmod.plのありかは見つかった(busybox/busybox-1.20.2)のですが、Makefileで
> そのフォルダを指定すると
....
> 使用している環境は、下記になります。
> ・仮想ファイル : atde5-amd64-20140131
> ・ディストリビューション : atmark-dist-20140131
> ・カーネル : linux-3.4-at6

Armadillo-8x0での話だったんですね。
そのあたりはatmark-dist開発者ガイドの説明と変わってしまっています。
以前、810にドライバを入れようとしたとき私もちょっとはまりました。

私がやった範囲では...ですが、depmod.pl実行は不要、つまり、
Makefileの次の2行は削除してしまってOKのようです。
$(ROOTDIR)/user/busybox/examples/depmod.pl -b \
$(ROMFSDIR)/lib/modules/$(KERNELRELEASE) &> /dev/null

depmod.plをやらなくても、モジュールは正しく入ってくれているようです。

--
なかむら

haruka0606

2014年2月24日 13時51分

中村様

中井です。

ご教授いただいた方法でmake romfsが正しく動作し、
menuconfigにも選択肢が出てきました。

ありがとうございました。

ohshimayyyy

2015年1月17日 16時00分

大島と申します。

1年近く前にfixした投稿に、横槍ですみません。
私も、Armadillo-810で上記を試してみたのですが、
同じ症状が発生しており、同様の対応をしましたが、
下記のエラーメッセージが出力されてしまいます。
> make[2]: *** [silentoldconfig] エラー 1
> make[1]: *** [silentoldconfig] エラー 2

但し、make後、下記のファイルも出力されており、
異常終了しているのか、正常終了しているのか分かりません。
message.mod.c
message.o
Module.symvers
message.ko
message.mod.o
modules.order

エラーを防止する方法をご教示頂きたいです。

環境は下記の通りです。
・仮想ファイル : atde5-amd64-20130927
・ディストリビューション : atmark-dist-20131018
・カーネル : linux-3.4-at5

ご対応の程、宜しくお願い致します。

y.nakamura

2015年1月17日 19時41分

中村です。

1年前のやりとりで、
> > make[2]: *** [silentoldconfig] エラー 1
> > make[1]: *** [silentoldconfig] エラー 2
この部分は解決していませんでしたね。
というか、depmod.pl問題と一緒にこの問題にも気づいていましたので、
私の書き忘れです。

atmark-dist開発者ガイド->第11章 新規デバイスドライバの追加方法
http://manual.atmark-techno.com/dist/atmark-dist_developers_guide_ja-1…
のMakefileにある次の行
KERNELRELEASE = ${shell make -sC $(ROOTDIR)/$(LINUXDIR) kernelrelease}

ここを次に様にすれば、このエラーは出なくなります。
KERNELRELEASE = 3.4-at5

Makefileに"3.4-at5"を埋め込んでしまうのは避けたいところですが、
とりあえず、ということで、私はこれで回避してます。

もうちょっと説明すると・・・・
(私の作業メモによると、当時、同じat5で調べていました)
KERNELRELEASE = ${shell make -sC $(ROOTDIR)/$(LINUXDIR) kernelrelease}
を実行したとき、Armadillo-8x0の開発環境(ATDE5)では、
KERNELRELEASE に次の文字列が代入されてしまいます。
(実際は改行なしの1行です)

* * Restart config... * * * General setup * Prompt for development and/or incomp
lete code/drivers (EXPERIMENTAL) [Y/n/?] y Cross-compiler tool prefix (CROSS_COM
PILE) []  Local version - append to kernel release (LOCALVERSION) []  Automatica
lly append version information to the version string (LOCALVERSION_AUTO) [N/y/?]
 n Kernel compression mode > 1. Gzip (KERNEL_GZIP)   2. Bzip2 (KERNEL_BZIP2) (NE
W)   3. LZMA (KERNEL_LZMA)   4. XZ (KERNEL_XZ)   5. LZO (KERNEL_LZO) choice[1-5?
]: aborted!  Console input/output is redirected. Run 'make oldconfig' to update 
configuration.  3.4-at5

KERNELRELEASEにこういう文字列がセットされた状態で、
modulesターゲットの
$(MAKEARCH) -C $(ROOTDIR)/$(LINUXDIR) M=${shell pwd} modules
を実行すると、そのときに、
> > make[2]: *** [silentoldconfig] エラー 1
> > make[1]: *** [silentoldconfig] エラー 2
のエラーがでるようです。

atmark-dist開発者ガイドが書かれたころ(ATDE3かな?)は、
Linuxのバージョン文字列だけがKERNELRELEASEに
入っていたのですが、ATDE5では、上のようになるように
なってしまったため、この不具合が発生します。

--
なかむら

y.nakamura

2015年1月17日 19時51分

中村です。

すみません。訂正です。

> KERNELRELEASEにこういう文字列がセットされた状態で、
> modulesターゲットの
> $(MAKEARCH) -C $(ROOTDIR)/$(LINUXDIR) M=${shell pwd} modules
> を実行すると、そのときに、
> > > make[2]: *** [silentoldconfig] エラー 1
> > > make[1]: *** [silentoldconfig] エラー 2
> のエラーがでるようです。

この部分、間違いです。
別の作業メモがありました。
> modulesターゲットの
> $(MAKEARCH) -C $(ROOTDIR)/$(LINUXDIR) M=${shell pwd} modules
は関係なくて、
KERNELRELEASE = ${shell make -sC $(ROOTDIR)/$(LINUXDIR) kernelrelease}
を実行するときにこのエラーが出ています。

この行を
KERNELRELEASE := ${shell make -sC $(ROOTDIR)/$(LINUXDIR) kernelrelease}
と変更し("="を":="に変更です)、
Makefileに何もしない
hoge:
というターゲットを作って
make hoge
すると、同じエラーが出ます。

$ make hoge
make[2]: *** [silentoldconfig] エラー 1
make[1]: *** [silentoldconfig] エラー 2
make: `hoge' に対して行うべき事はありません.

--
なかむら

y.nakamura

2015年1月17日 20時11分

中村です。

たびたび、すみません。

depmod.pl問題の解決策として、
Makefileの次の2行を削除してしまっています。
$(ROOTDIR)/user/busybox/examples/depmod.pl -b \
$(ROMFSDIR)/lib/modules/$(KERNELRELEASE) &> /dev/null

ですので、Makefileの
KERNELRELEASE = ${shell make -sC $(ROOTDIR)/$(LINUXDIR) kernelrelease}
この行は不要みたいです。

--
なかむら

ohshimayyyy

2015年1月19日 10時50分

大島です。
お世話になります。
早速のご対応、有難う御座いました。

上記の通り、
Makefileの下記3行を削除(コメントアウト)し、
----------------------------------------------------------------------------------------------------
$(ROOTDIR)/user/busybox/examples/depmod.pl -b \
$(ROMFSDIR)/lib/modules/$(KERNELRELEASE) &> /dev/null

KERNELRELEASE = ${shell make -sC $(ROOTDIR)/$(LINUXDIR) kernelrelease}
----------------------------------------------------------------------------------------------------
makeを実行してみたところ、エラーなく完了しました。
下記のファイルも出力されており、
----------------------------------------
message.mod.c
message.o
Module.symvers
message.ko
message.mod.o
modules.order
----------------------------------------
makeが正常終了している認識です。
make modulesのみの実行確認ですので、
ドライバの動作確認までに、何か解決不能な障害が発生した場合は、
別途、投稿させて頂こうと思います。
有難う御座いました。

以上です。