Armadilloフォーラム

make -C /usr/src/linux-headers-4.19.0-21-amd64 が上手くいかない

smer2022

2022年8月24日 10時50分

お世話になっております。
Linux版デジタル入出力ドライバ API-DIO(LNX) 開発環境(フルセット) Ver. 8.20
https://www.contec.com/jp/download/contract/contract1/?itemid=c4cedb7a-…

DIO-1616LN-USBと接続したいと思い、上記ドライバーに対してmakeしたときに
make -C /usr/src/linux-headers-4.19.0-21-amd64 でエラーが発生しました。

エラー内容の指示に従って、
Run 'make oldconfig && make prepare' を実行しましたが、以下のエラーが発生しました。
/usr/src/linux-headers-4.19.0-21-common/scripts/basic/Makefile: そのようなファイルやディレクトリはありません

上記の場所にmakefileを作成する方法がありますでしょうか。

ファイル ファイルの説明
コマンドの実行結果.txt
コメント

at_dominique.m…

2022年8月24日 11時16分

smer2022さん

> DIO-1616LN-USBと接続したいと思い、上記ドライバーに対してmakeしたときに
> make -C /usr/src/linux-headers-4.19.0-21-amd64 でエラーが発生しました。

とても分かりにくいですが、このメッセージはエラーではありません。
エラーあった時に表示する内容のつもりで書かれているように見えますが、なぜか make 実行時にもコマンドが表示されてエラーメッセージが表示されます… make のエラーがないので、成功で実行されました。

/cdio_820F/contec/cdio/cgetres_usb/cgetres_usb.ko のモジュールが無事に作成されたように見えます、確認してください。

(このドライバーは linux-headers-4.19.0-21-amd64 のカーネルに対してコンパイルされたので、そこでしか使えません。Armadillo で使おうとする場合にまた別の手順が必要になります。)

> エラー内容の指示に従って、
> Run 'make oldconfig && make prepare' を実行しましたが、以下のエラーが発生しました。
> /usr/src/linux-headers-4.19.0-21-common/scripts/basic/Makefile: そのようなファイルやディレクトリはありません

この指示は自分でカーネルをコンパイルした時にソースディレクトリに実行するもので、debian のヘッダーで実行するようなコマンドではありません。このディレクトリはすでに大丈夫ですので、今回は不要です。

よろしくお願いします。

smer2022

2022年8月24日 15時42分

ご回答ありがとうございます。

> とても分かりにくいですが、このメッセージはエラーではありません。
エラーメッセージではないこと、承知しました。

> /cdio_820F/contec/cdio/cgetres_usb/cgetres_usb.ko のモジュールが無事に作成されたように見えます、確認してください。
cgetres_usb.ko のモジュールを確認することができませんでした。
root@atde8:/cdio_820F/contec/cdio/cgetres_usb# ls -l
合計 508
-rw-r--r-- 1 atmark atmark 1282 9月 9 2017 Makefile
-rw-r--r-- 1 root root 0 8月 23 18:33 Module.symvers
-rwxrw-r-- 1 atmark atmark 29741 11月 4 2020 cgetres_usb.c
-rw-r--r-- 1 atmark atmark 1731 9月 13 2017 cgetres_usb.h
-rw-r--r-- 1 root root 3879 8月 23 18:33 cgetres_usb.mod.c
-rw-r--r-- 1 root root 147760 8月 23 18:33 cgetres_usb.mod.o
-rw-r--r-- 1 root root 298728 8月 23 18:33 cgetres_usb.o
-rw-r--r-- 1 atmark atmark 18092 5月 14 2014 gpl-2.0.txt
-rw-r--r-- 1 root root 57 8月 24 10:45 modules.order

> Armadillo で使おうとする場合にまた別の手順が必要になります。
手順方法を記載されている資料等はありますしょうか。

at_dominique.m…

2022年8月24日 16時37分

> > とても分かりにくいですが、このメッセージはエラーではありません。
> エラーメッセージではないこと、承知しました。
>
> > /cdio_820F/contec/cdio/cgetres_usb/cgetres_usb.ko のモジュールが無事に作成されたように見えます、確認してください。
> cgetres_usb.ko のモジュールを確認することができませんでした。

すみません、ログが分かりにくくてその後の「mv」コマンドを見落としていました:

mv cgetres_usb.ko ../config/`uname -r`
make[1]: ディレクトリ '/cdio_820F/contec/cdio/cgetres_usb' から出ます

移動された先は「/cdio_820F/contec/cdio/config/$(uname -r)/cgetres_usb.ko」なはずですが、どうでしょうか。

> > Armadillo で使おうとする場合にまた別の手順が必要になります。
> 手順方法を記載されている資料等はありますしょうか。

ちょうどいいカーネルモジュールのビルド手順はなさそうですので、資料への案内はできませんが、流れとしては:
* Armadillo X1 に合わせてカーネルのヘッダーを用意します。
https://manual.atmark-techno.com/armadillo-x1/armadillo-x1_product_manu… の手順通りにカーネルをビルドしてインストールした方が簡単ですが、Armadillo で `uname -r` を実行して現在実行中のカーネルバージョンを確認した上で同じカーネルソースを取得すれば「make ARCH=arm x1_config && CROSS_COMPILE=arm-linux-gnueabihf- make prepare」で準備できるはずです。(マニュアルにある準備が必要です)

* ドライバーをこのツリーでビルドさせます。これはドライバーのビルドシステム特有な方法になりますので、あまり手伝えませんが…
** 「export CROSS_COMPILE=arm-linux-gnueabihf-」で環境変数で armadillo 向けのビルドをさせます。
** 以下のログの部分に `uname -r` ではなく、X1 のカーネルのバージョンにして、 `/lib/modules/`uname -r`/build` を準備したカーネルソースのツリーにさせてください。

make[1]: ディレクトリ '/cdio_820F/contec/cdio/config' に入ります`
rm -fr `uname -r`
mkdir `uname -r`
make -C /lib/modules/`uname -r`/build M=`pwd` V=1 modules
make[1]: ディレクトリ '/cdio_820F/contec/cdio/cgetres_usb' に入ります
make -C /lib/modules/`uname -r`/build M=`pwd` V=1 modules CFLAGS=MODULE_USB

これで作成された .ko のファイルを Armadillo x1 の /lib/modules/$(uname -r)/extra/ などにコピーして、depmod を実行したらロードできるはずです。

よろしくお願いします。

smer2022

2022年8月31日 19時47分

ご回答ありがとうございます。

>移動された先は「/cdio_820F/contec/cdio/config/$(uname -r)/cgetres_usb.ko」なはずですが、どうでしょうか。
cgetres_usb.ko のモジュールを確認することができました。

カーネルのヘッダーの取得方法について、分からないことがあります。
https://manual.atmark-techno.com/armadillo-x1/armadillo-x1_product_manu…
ご提示して頂いた上記リンクから手順通りにカーネルをビルドを行い、イメージファイルの生成できていることを確認しました。
しかしながら、カーネルのヘッダーを見つけることができませんでした。
カーネルのヘッダーはどこかに格納されているのでしょうか。

ご教授いただければ幸いです。

at_dominique.m…

2022年9月1日 9時34分

smer2022さん

> >移動された先は「/cdio_820F/contec/cdio/config/$(uname -r)/cgetres_usb.ko」なはずですが、どうでしょうか。
> cgetres_usb.ko のモジュールを確認することができました。
>
> カーネルのヘッダーの取得方法について、分からないことがあります。
> https://manual.atmark-techno.com/armadillo-x1/armadillo-x1_product_manu…
> ご提示して頂いた上記リンクから手順通りにカーネルをビルドを行い、イメージファイルの生成できていることを確認しました。
> しかしながら、カーネルのヘッダーを見つけることができませんでした。
> カーネルのヘッダーはどこかに格納されているのでしょうか。

すみません、言葉が分かりにくかったです。
普通にdebianなどがパッケージを作成すると、カーネルヘッダーというパッケージを作ってそれをモジュールをビルドする時に使いますが、
今回はこういう便利に分けてあるパッケージがないのでソースディレクトリをそのまま使えます。
(ビルドした場合はそのまま使ってもいいですし、ビルドしない場合は例の「make prepare」で必要なファイルだけを作成できます)

こちらで contec のアカウントを作らないとモジュールのビルドシステムを確認できないので、設定方法が分かりませんが、KERNEL_DIR か似たような名前の変数がある可能性が高い。その変数をカーネルのビルドディレクトリに設定すればモジュールをビルドできると思いますが、どうでしょうか?

よろしくおねがいします。