msasai
2019年5月24日 13時18分
いつもお世話になっております。佐々井と申します。
Armadillo-640にIO-Data社のWN-G300UAの取り付けを検討しておりますが、
ドライバのビルド方法が分からず、投稿させて頂きました。
WN-G300UAのチップはRealtekの"RTL8192CU"になるため、
以下の質問内容を参考にビルドを試みましたが、ビルドエラーが出ました。
https://users.atmark-techno.com/forum/armadillo/1695
原因としては、proc_dir_entryのwrite_procが未定義となっており、
Linuxのソースを確認すると/fs/proc/internal.hにproc_dir_entryの定義はありますが、
write_procの定義がないことが確認できました。
現在は、カーネルコンフィグが必要なのかと考えており、
それらしいコンフィグオプションがないかを調べている次第です。
どうにかして、ビルドを通す方法はございませんでしょうか?
初心者的な質問になり恐縮ですがよろしくお願い致します。
参考サイト:
試した手順:https://users.atmark-techno.com/forum/armadillo/1695
ドライバのソースコード:https://github.com/CalielOfSeptem/RTL8188C_8192C_USB_linux_v4.0.2_9000…
LinuxソースDL元:https://users.atmark-techno.com/files/downloads/armadillo-640/source/li…
実行環境:https://users.atmark-techno.com/files/downloads/atde/atde7-i386-2018082…
※以下の情報をファイルに添付させて頂きます。
Linuxの実行コマンドと実行結果ログ
Linuxソースの.configファイル
以上です。よろしくお願い致します。
ファイル | ファイルの説明 |
---|---|
ログ、コンフィグファイル一式.zip | ビルド実行コマンド、結果ログ、Linuxのコンフィグファイル一式です。 |
コメント
msasai
いつもお世話になっております。佐々井と申します。
ご回答頂き大変ありがとうございます。
こちらで試したところ、正常に焼き込みができなかったため、
また質問を投稿させて頂きます。
以下の通り実行し、教えて頂きました通り、設定をしたところ
ビルド時に様々な設定情報を聞かれるようになりました
これらについては、全てデフォルト値でよろしいのでしょうか?
sudo make ARCH=arm armadillo-640_defconfig
sudo make menuconfig
sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x82000000 uImage
また、デフォルト値で設定したものを焼きこもうとすると
LEDが両方ともに光らず、1時間待ちましたが焼き込みが進まなくなりました。
カーネルのビルド時、焼き込み時のログ・コンフィグファイルのログを
添付させて頂きます。
また、こちらでmenuconfigを実行時にdefconfigと大量の差分が発生するのですが、
これは正常な動作なのでしょうか?
こちらの環境がLinuxカーネルの環境や読み込むファイルが不適切なのでしょうか?
何か、資料や確認した方が良いこと等ございましたら、教えて頂けませんでしょうか。
以上です。よろしくお願い致します。
ファイル | ファイルの説明 |
---|---|
config,log.zip | 設定ファイルとログファイルです。 |
bamboo
bambooです。
> sudo make ARCH=arm armadillo-640_defconfig > sudo make menuconfig > sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x82000000 uImage
たぶん make menuconfig に ARCH=arm 指定が無いのが原因ですね。
添付された.configがarmではなくX86用になっていました。
.configより転載 # # Automatically generated file; DO NOT EDIT. # Linux/x86 4.14-at11 Kernel Configuration # CONFIG_64BIT=y CONFIG_X86_64=y
マニュアルの以下に記載がありますように、ARCH=arm を指定して再度試してみていただければと思います。
[ATDE ~/linux-v4.14-at[version]]$ make ARCH=arm armadillo-640_defconfig [ATDE ~/linux-v4.14-at[version]]$ make ARCH=arm menuconfig
20.2. イメージをカスタマイズする
https://manual.atmark-techno.com/armadillo-640/armadillo-640_product_ma…
msasai
msasai
いつもお世話になっております。
佐々井と申します。
御指摘頂きました通り、アーキテクチャの指定をしたところ
イメージの焼き込みに成功しました。大変ありがとうございます。
ただ、WiFiドングルを接続したところ以下のようなログが出力され
ifupをすることができない現象が発生しています。
重ね重ね申し訳ございませんが、こちらの現象についても
どのようにすればよいのか、ご教授頂けませんでしょうか?
root@armadillo:~# ifconfig eth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 ether 00:11:0c:2a:05:24 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 root@armadillo:~# [ 32.069909] usb 2-1: new high-speed USB device number 2 using ci_hdrc [ 32.276334] rtl8192cu: Chip version 0x11 [ 32.387817] rtl8192cu: Board Type 0 [ 32.391897] rtl_usb: rx_max_size 15360, rx_urb_num 8, in_ep 1 [ 32.398124] rtl8192cu: Loading firmware rtlwifi/rtl8192cufw_TMSC.bin [ 32.420817] usb 2-1: Direct firmware load for rtlwifi/rtl8192cufw_TMSC.bin failed with error -2 [ 32.430149] usb 2-1: Direct firmware load for rtlwifi/rtl8192cufw.bin failed with error -2 [ 32.438819] rtlwifi: Loading alternative firmware rtlwifi/rtl8192cufw.bin [ 32.445982] rtlwifi: Selected firmware is not available [ 32.496627] rtl8192cu 2-1:1.0 wlx3476c58eec6d: renamed from wlan0 root@armadillo:~# root@armadillo:~# ifconfig eth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 ether 00:11:0c:2a:05:24 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 root@armadillo:~# ifconfig up wlan0 ifup: unknown interface wlan0 root@armadillo:~# ifup wlan0[ 55.809950] random: crng init done [ 55.813565] random: 6 urandom warning(s) missed due to ratelimiting ifup: unknown interface wlan0 root@armadillo:~#
ファイル | ファイルの説明 |
---|---|
実行ログ.log |
bamboo
bambooです。
> [ 32.276334] rtl8192cu: Chip version 0x11 > [ 32.387817] rtl8192cu: Board Type 0 > [ 32.391897] rtl_usb: rx_max_size 15360, rx_urb_num 8, in_ep 1 > [ 32.398124] rtl8192cu: Loading firmware rtlwifi/rtl8192cufw_TMSC.bin > [ 32.420817] usb 2-1: Direct firmware load for rtlwifi/rtl8192cufw_TMSC.bin failed with error -2 > [ 32.430149] usb 2-1: Direct firmware load for rtlwifi/rtl8192cufw.bin failed with error -2 > [ 32.438819] rtlwifi: Loading alternative firmware rtlwifi/rtl8192cufw.bin > [ 32.445982] rtlwifi: Selected firmware is not available > [ 32.496627] rtl8192cu 2-1:1.0 wlx3476c58eec6d: renamed from wlan0
firmwareの展開を動作確認手順に入れるのを失念していました。失礼しました。
armadillo-640でdebianが動作していてapt-getが使用できるなら
以下のコマンドでrealtek-firmwareをインストールをしてみてください。
$ sudo apt-get update $ sudo apt-cache search firmware-realtek firmware-realtek - Binary firmware for Realtek wired/wifi/BT adapters #パッケージが見つかることを確認 $ sudo apt-get install firmware-realtek
パッケージ: firmware-realtek (20161130-5) [non-free]
https://packages.debian.org/ja/stretch/firmware-realtek
msasai
いつもお世話になっております。
佐々井と申します。
firmware-realtekを入れたところ、WiFiドングルが正常に起動しました。ありがとうございます。
ただ、長時間使っているとパワーセーブが有効になっているため、動作が不安定となっているようです。
そこで、上で紹介頂いた設定(https://itkobo-z.jp/archives/432)を試してみたのですが、
動作に変化はありませんでした。また、/sys配下を確認したところ、パワーセーブのパラメータがありませんでした。
atmark@armadillo~/linux-v4.14-at11$ ls /sys/module/rtl8192cu/parameters/ debug_level debug_mask swenc atmark@armadillo:~/linux-v4.14-at11$ ls /sys/module/rtl8192cu/parameters/ debug_level debug_mask swenc
更に調査してみたところ、パワーセーブのパラメータを持っているドライバは
rtl8192cuではなく下記の8192cuというドライバが別にあるようで、そちらのパラメータかもしれません。
https://github.com/pvaret/rtl8192cu-fixes
こちらのドライバについてクロスビルドし、ドライバをインストールしたいのですが
ATDE上でビルドしようとしても、どうビルドすればよいのか見当がつきません。
大変申し訳ございませんが、ドライバをパワーセーブする方法もしくは
ドライバの上記のドライバのクロスビルド方法をご教授頂けませんでしょうか。
以上です。よろしくお願い致します。
bamboo
bamboo です。
> そこで、上で紹介頂いた設定(https://itkobo-z.jp/archives/432)を試してみたのですが、
> 動作に変化はありませんでした。また、/sys配下を確認したところ、パワーセーブのパラメータがありませんでした。
linux-4.14-at11のソースを調べてみたのですが、仰る通りですね。
上記設定に関連したコードは無いように見受けられます。
> 更に調査してみたところ、パワーセーブのパラメータを持っているドライバは
> rtl8192cuではなく下記の8192cuというドライバが別にあるようで、そちらのパラメータかもしれません。
>
> https://github.com/pvaret/rtl8192cu-fixes
githubのソースを確認してみました。こちらも同じ見解です。
このドライバでないとrtw_power_mgnt=0によりパワーマネージメントの無効化はできないと思います。
> こちらのドライバについてクロスビルドし、ドライバをインストールしたいのですが
> ATDE上でビルドしようとしても、どうビルドすればよいのか見当がつきません。
ATDE7-i386上でrtl8192cu-fixesをクロスビルドできるか試してみました。
とりあえずビルドだけは確認できたので、その手順を以下に記します。
まずカーネルコンフィグの変更が必要です。
コンフィギュレーション完了後にカーネルのビルドを行ってください。
Linux/arm 4.14-at11 Kernel Configuration [*] Enable loadable module support ---> # 有効化する Bus support ---> [*] PCI support # 有効化する [*] Networking support ---> -*- Wireless ---> [*] Generic IEEE 802.11 Networking Stack (mac80211) # 有効化する Device Drivers ---> [*] Network device support ---> [*] Wireless LAN ---> [*] Realtek devices # 有効化する <*> Realtek rtlwifi family of devices ---> <M> Realtek RTL8192CU/RTL8188CU USB Wireless Network Adapter # [M]にする [*]or[ ]は後のドライバビルドでエラーになります。 [*] Debugging output for rtlwifi driver family (NEW) # 安定して動作することが確認できたら無効化してもよさそうです。
添付したプロジェクト rtl8192cu-fixes-cross-for-A640-alpha1.tar.gz をATDE上に解凍します。
$ tar zxvf rtl8192cu-fixes-cross-for-A640-alpha1.tar.gz $ cd rtl8192cu-fixes-cross $ ls build.sh # ATDE7-i386上でのクロスビルド用スクリプトです。 x86build.sh # オリジナルのインストール手順をスクリプト化したものです。(使用しません) rtl8192cu-fixes-cross-for-A640-alpha1.patch # 現時点での最新版 https://github.com/pvaret/rtl8192cu-fixes/pull/156/commits/01ccbbc4f94ed8afdddcf9769ce231c47d45586c との差分です。 rtl8192cu-fixes # ソースファイルです。
クロスビルドに必要なツールをインストールします。
$ sudo apt-get install git dkms
クロスビルド用のスクリプト build.sh をお使いの環境に合わせて編集します。
# build.sh #-------------------------- #!/bin/bash ARCH=arm KERNEL_VER=4.14-at11 KERNEL_SRC_DIR=~/Documents/linux-v4.14-at11 ※このパスを環境に合わせて変更してください。 :
build.sh を実行します。
$ ./build.sh ※sudo を使用するのでパスワードが要求されます。 [DKMS OPTIONS] --arch arm --kernelver 4.14-at11 --kernelsourcedir /home/atmark/Documents/linux-v4.14-at11 --no-prepare-kernel --no-clean-kernel [sudo] atmark のパスワード: -------- Uninstall Beginning -------- Module: 8192cu Version: 1.11 Kernel: 4.14-at11 (arm) ------------------------------------- Status: This module version was INACTIVE for this kernel. depmod... DKMS: uninstall completed. ------------------------------ Deleting module version: 1.11 completely from the DKMS tree. ------------------------------ Done. Creating symlink /var/lib/dkms/8192cu/1.11/source -> /usr/src/8192cu-1.11 DKMS: add completed. Building module: cleaning build area... make -j1 KERNELRELEASE=4.14-at11 -C /home/atmark/Documents/linux-v4.14-at11 M=/var/lib/dkms/8192cu/1.11/build......... strip: 入力ファイル `/var/lib/dkms/8192cu/1.11/build/8192cu.ko' の形式を認識できません cleaning build area... DKMS: build completed.
ビルドされたモジュール 8192cu.ko は /var/lib/dkms/8192cu/1.11/4.14-at11/arm/module/ 以下に格納されています。
$ ls -al /var/lib/dkms/8192cu/1.11/4.14-at11/arm/module/8192cu.ko -rw-r--r-- 1 root root 629292 5月 27 09:18 /var/lib/dkms/8192cu/1.11/4.14-at11/arm/module/8192cu.ko $ file /var/lib/dkms/8192cu/1.11/4.14-at11/arm/module/8192cu.ko /var/lib/dkms/8192cu/1.11/4.14-at11/arm/module/8192cu.ko: ELF 32-bit LSB relocatable, ARM, EABI5 version 1 (SYSV), BuildID[sha1]=38d8a3940a19e0124dee1e4c6a4a1e882b93bd45, not stripped
次に先にビルドしたカーネルイメージをArmadillo-640に書き込み、起動します。
起動後にネイティブカーネルドライバのブラックリスト登録。
https://github.com/pvaret/rtl8192cu-fixes/blob/master/blacklist-native-rtl8192.conf $ sudo cp ./rtl8192cu-fixes/blacklist-native-rtl8192.conf /etc/modprobe.d/
/etc/modprobe.d/8192cu.conf の作成
https://github.com/pvaret/rtl8192cu-fixes/blob/master/8192cu-disable-power-management.conf $ sudo cp ./8192cu-disable-power-management.conf /etc/modprobe.d/8192cu.conf
最後にATDEでクロスビルドした8192cu.koをにコピーして
以下のコマンドを実行した後に、WN-G300UA(RTL8192CU)を接続してみてください。
# insmod 8192cu.ko
たぶんこれで認識されると思うのですが…。
ファイル | ファイルの説明 |
---|---|
rtl8192cu-fixes-cross-for-A640-alpha1.tar.gz | ATDE7-i386環境 pvaret/rtl8192cu-fixes A640用クロスビルド |
msasai
佐々井と申します。
いつも大変お世話になっております。
ご回答頂き大変ありがとうございます。
確認ができ次第、再度投稿させて頂きます。
もう1点気になったことがあり質問させて頂きたいのですが、
Armadillo-640へUSBドングルを挿入する場合に、
他にもUSBドングルドライバがカーネルコンフィグの設定次第で導入可能であると分かりましたが、
一般的によく使われていて通信動作が安定しているドライバ、
また、そのドライバを使用するUSBドングルの製品はどのようなものがございますでしょうか?
今回のRealtekのようなドライバではなく、公式が配布しているドライバで
かつ動作が安定しているものは無いものなのでしょうか…
大変お手数ですが、ご教授お願い致します。
以上です。よろしくお願い致します。
msasai
bamboo
bambooです。
> 他にもUSBドングルドライバがカーネルコンフィグの設定次第で導入可能であると分かりましたが、
> 一般的によく使われていて通信動作が安定しているドライバ、
> また、そのドライバを使用するUSBドングルの製品はどのようなものがございますでしょうか?
はじめに記載しました「カーネルコンフィグの変更でRTL8192CUを動作確認する方法」が、安定して動作していたのなら
「Linuxカーネルにマージされたドライバが一般的で安定しているのでオススメです!」とお伝えしていたと思います。
ですが、実際動作確認すると不安定なこともあるのですね。1つ勉強になりました。
私の中では、安定しているのでオススメできる製品は現状該当なしですね…。
ただ、あえて1つ挙げますとArmadillo-640ではない別のLinux搭載ボード(Raspbery Pi)での話で恐縮なのですが、
IEEE802.11ac対応のPlanex GW-450S(RTL8821AU)を下記ドライバで動作させ、
(趣味レベルの)24時間稼働の防犯監視カメラシステムを運用していますが、今まで問題が発生したことは無いですね。
https://github.com/gnab/rtl8812au
使用しているカーネルバージョンは4.14.81です。Armadillo-640とも近いので安定して動作する可能性は高いのでは?とは思います。
しかしソフトウェアですからコードが1行でも違えば動作するかは怪しいですし、
更にハードウェアも違うとなれば実際に動作確認をしてみないと何とも言えないのが正直なところです。
既にご存知かもしれませんが人気のあるUSBアダプタを探すなら以下のサイトがオススメです。
https://wikidevi.com/wiki/Main_Page
例えばRealtekチップ搭載製品でしたら以下のページから調べることができます。
同じチップを搭載した異なる会社の製品数などもわかりますので、メジャーな製品を探す際の指標にもなるでしょう。
https://wikidevi.com/wiki/Realtek
(特にPID,VIDが記載されているのが有難く、ドライバのデバイス対応状況を調べる際にお世話になっています)
> 今回のRealtekのようなドライバではなく、公式が配布しているドライバで
> かつ動作が安定しているものは無いものなのでしょうか…
「Armadillo-600シリーズ WLANオプションモジュール」でしたら
Armadillo-640の純正拡張ボードですから安心して使えると思います。
https://armadillo.atmark-techno.com/option-products/OP-A600-AWLMOD-00
Planex社の製品は公式サイトでLinuxドライバを配布しているものもありますが、保証、サポート無しですし、
またドライバのバージョンも古めですので、新しめのカーネルでは動かすのに苦労することもままあります。
https://www.planex.co.jp/support/download/gw-450s/
> ・Armadillo-640において推奨(もしくは動作確認がとれている)しているWiFiUSBドングルのリスト
> ・Armadillo-640において推奨(もしくは動作確認がとれている)しているUSBカメラのリスト
推奨・動作確認済みというわけではなく、一般的なLinuxの話で恐縮なのですが
UVC対応のUSBカメラは大抵のものは動作すると思います。
https://armadillo.atmark-techno.com/products/keyword/600
Armaidllo-640でUVCを有効化するには以下が参考になると思います。
https://users.atmark-techno.com/blog/615/3185
Logicool C270,C615は個人的に愛用しています。
https://www.logicool.co.jp/ja-jp/product/hd-webcam-c270n
https://www.logicool.co.jp/ja-jp/product/hd-webcam-c615n
bamboo
2019年5月24日 15時15分
bambooと申します。
linux-4-14-at11ならRTL8192CUのドライバがマージされていますので、
カーネルコンフィギュレーションの変更で動作確認ができると思います。
特殊なドライバソースを使いたい等の特別な理由が無ければ、
こちらで動作確認を行うのが良いかもしれません。
カーネルコンフィギュレーションの変更は以下の情報を参考にしています。
上記の依存関係から以下を有効にすれば、RTL8192CUが組み込まれるようです。
上記のカーネルコンフィギュレーションが完了したら、カーネルコンフィグの画面で「/」を押して
「RTL8192CU」と入力し、以下の内容になっているかを確認します。
あとは、カーネルをビルドをして出来上がったイメージでArmadillo-640を起動し、
WN-G300UAを接続すれば恐らく認識されるかと思います。
(実機をどちらも所持していないのでビルド成功までしか確認を行えていません…)
余談ですが、パワーマネージメントがONになっていると、
無効にしないと通信が安定しないことがあるとの情報がありました。
必要に応じて対策すると良いかもしれませんね。
無線LANアダプタWN-G300UAをRaspberryPiで使う
https://itkobo-z.jp/archives/432