Armadilloフォーラム

USBカーネルモジュールのクロスコンパイル

sakurai2017

2017年6月19日 10時41分

お世話になっております。
Armadillo-IoT G3LでのUSBドングルのドライバ作成についてご教授ください。

使用するUSBドングル(ID:0bda:8152 Realtek Corp.)が
IPv6: ADDRCONF(NETDEV_UP): usb0: link is not ready
のエラーにより認識されません。

用意されているドライバをダウンロードしビルドしようとしましたが、(http://www.realtek.com.tw/Downloads/downloadsView.aspx?Langid=1&PNid=14…
Atmarkのフォーラムで報告されている同様のエラーが出たため(https://users.atmark-techno.com/comment/2910#comment-2910)クロスビルドを試みています。

コマンドは以下ですが、
[ATDE6]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KRSC=../linux-3.14-x1-at14g
>>/usr/src/linux-headers-3.16.0-4-common/scripts/gcc-version.sh: 行 25: arm-linux-gnueabihf-gcc-4.8: コマンドが見つかりません
エラーにより先に進めません。コンパイラを指定しても、”行 25: arm-linux-gnueabihf-gccgcc-4.8: ”となります。

質問は2点です。
(1)この方針で良いでしょうか
(2)良い場合、このようなケースの対応、またはコンパイル用スクリプトがあるでしょうか。
以上、ご指導いただけると幸いです。よろしくお願いいたします。

コメント

溝渕です。

> (1)この方針で良いでしょうか

あえてOut-of-treeでビルドする必要は無いかと思います。

https://users.atmark-techno.com/comment/2910#comment-2910

上記結論としては、Linuxカーネルコンフィギュレーションで該当ドライバの
有効化を行い、ファームウェアパッケージのインストールを行うことで利用可
能になっています。

ファームウェアパッケージはインストール済みですか?

> (2)良い場合、このようなケースの対応、またはコンパイル用スクリプトがあるでしょうか。

基本的には、ソースに応じたオプションの設定等があるので、汎用的なものが
あるとは考え難いです。

溝渕様

ご回答ありがとうございます。
書き換え後、armadilloのboot時にエラーが発生します。
作業内容とエラー内容を添付いたします。

1. initramfs_x1-[version].cpio.gzと、Linuxカーネルイメージをダウンロード。
http://armadillo.atmark-techno.com/armadillo-iot-g3l/downloads

2. アーカイブの展開
[ATDE6]$ ls
linux-3.14.38-at[version].tar.gz initramfs_x1-[version].cpio.gz
[ATDE6]$ tar xf linux-3.14.38-at[version].tar.gz
[ATDE6]$ ls
linux-3.14.38-at[version] linux-3.14.38-at[version].tar.gz initramfs_x1-[version].cpio.gz

3. initramfsアーカイブへのシンボリックリンクを作成。
[ATDE6]$ cd linux-3.14.38-at[version]
[ATDE6/linux-3.14.38-at[version]]$ ln -s ../initramfs_x1-[version].cpio.gz initramfs_x1.cpio.gz

4. カーネルコンフィギュレーションの変更
http://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_prod…
[ATDE6/linux-3.14.38-at[version]]$ make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm x1_defconfig
[ATDE6/linux-3.14.38-at[version]]$ make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm menuconfig

5. ビルド
[ATDE6/linux-3.14.38-at[version]]$ make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm
[ATDE6/linux-3.14.38-at[version]]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x80008000 uImage

6. イメージファイルの生成確認x2
arch/arm/boot/uImage
arch/arm/boot/dts/armadillo_iotg_g3.dtb

7. Linuxカーネルイメージの書き換え
http://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_prod…
[armadillo ~]# mount -t vfat /dev/mmcblk2p1 /mnt
[armadillo ~]# cp uImage-x1-[version] /mnt/uImage
[armadillo ~]# umount /mnt

8. DTBの書き換え
[armadillo ~]# mount -t vfat /dev/mmcblk2p1 /mnt
[armadillo ~]# cp armadillo_iotg_g3-[version].dtb /mnt/armadillo_iotg_g3.dtb
[armadillo ~]# umount /mnt 「

質問は、手順に間違っている箇所があるかどうかと、エラーの対処法です。
エラーメッセージは、こちらの報告に似ていますが。。https://armadillo.atmark-techno.com/forum/armadillo/2271
再度やり直しが必要でしょうか。確認よろしくお願いいたします。

ファイル ファイルの説明
debugmesg.txt

溝渕様
お世話になっております。

昨日のエラーの件ですが、pdfの方を参照しビルドを行ったところ、無事起動いたしました。
しかし、USBドングルの方は変わらず
IPv6: ADDRCONF(NETDEV_UP): usb0: link is not ready
のエラーにより認識されません。

カーネルコンフィギュレーションは以下を有効にしました。
該当ドライバが間違っているでしょうか。確認よろしくお願いいたします。

-> Device Drivers
-> Network device support
-> Network core driver support
->[*] Universal TUN/TAP device driver support

溝渕です。

> 昨日のエラーの件ですが、pdfの方を参照しビルドを行ったところ、無事起動いたしました。

同一バージョンのドキュメントの場合は、htmlとpdfの内容自体は同じですよ。

> しかし、USBドングルの方は変わらず
> IPv6: ADDRCONF(NETDEV_UP): usb0: link is not ready
> のエラーにより認識されません。
>
> カーネルコンフィギュレーションは以下を有効にしました。
> 該当ドライバが間違っているでしょうか。確認よろしくお願いいたします。
>
> -> Device Drivers
> -> Network device support
> -> Network core driver support
> ->[*] Universal TUN/TAP device driver support

TUN/TAPは無線LANドライバではありません。以下を参考にコンフィギュレーショ
ンを有効化してみてください。

https://users.atmark-techno.com/comment/2910#comment-2910

また、ファームウェアのインストールは行っていますか?

溝渕様

お世話になっております。
無事動作しましたので、手順を共有させていただきます。

1. initramfs_x1-[version].cpio.gzと、Linuxカーネルイメージをダウンロード。ATDEが最新バージョンであることを確認。
http://armadillo.atmark-techno.com/armadillo-iot-g3l/downloads
http://armadillo.atmark-techno.com/atde

2. アーカイブの展開
[ATDE6]$ ls
linux-3.14.38-at[version].tar.gz initramfs_x1-[version].cpio.gz
[ATDE6]$ tar xf linux-3.14.38-at[version].tar.gz
[ATDE6]$ ls
linux-3.14.38-at[version] linux-3.14.38-at[version].tar.gz initramfs_x1-[version].cpio.gz

3. initramfsアーカイブへのシンボリックリンクを作成。
[ATDE6]$ cd linux-3.14.38-at[version]
[ATDE6/linux-3.14.38-at[version]]$ ln -s ../initramfs_x1-[version].cpio.gz initramfs_x1.cpio.gz

4. カーネルコンフィギュレーションの変更
http://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_prod…
[ATDE6/linux-3.14.38-at[version]]$ make ARCH=arm x1_defconfig
[ATDE6/linux-3.14.38-at[version]]$ make ARCH=arm menuconfig
(入力"/"で該当ドライバを検索。)
r8152の場合、
>Device Drivers
->Network device support
->USB Network Adapters
<*>Realtek RTL8152/T|RTL8153 Based USB Ethernet
を有効にする。

5. ビルド
[ATDE6/linux-3.14.38-at[version]]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
[ATDE6/linux-3.14.38-at[version]]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x80008000 uImage

6. イメージファイルの生成確認x2
arch/arm/boot/uImage
arch/arm/boot/dts/armadillo_iotg_g3.dtb

7. SDブート

8. Linuxカーネルイメージの書き換え
http://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_prod…
[armadillo ~]# mount -t vfat /dev/mmcblk2p1 /mnt
[armadillo ~]# cp uImage-x1-[version] /mnt/uImage
[armadillo ~]# umount /mnt

9. DTBの書き換え
[armadillo ~]# mount -t vfat /dev/mmcblk2p1 /mnt
[armadillo ~]# cp armadillo_iotg_g3-[version].dtb /mnt/armadillo_iotg_g3.dtb
[armadillo ~]# umount /mnt

10. Boot後、Realtekのファームウェアのパッケージをインストール (必要ないかも)
[armadillo ~]# apt-get install firmware-realtek

11. 再起動(要root)
[armadillo ~]# reboot

エラー
IPv6: ADDRCONF(NETDEV_UP): usb0: link is not ready
は表示されますが、Ethernet2口として認識しネットワークの接続も確認しました。

溝渕です。

> 無事動作しましたので、手順を共有させていただきます。

動いて良かったです。

また、手順をまとめていただいて有難うございます。

> 10. Boot後、Realtekのファームウェアのパッケージをインストール (必要ないかも)

"Realtek RTL8152/T|RTL8153 Based USB Ethernet"はファームウェア不要です。

以上です。