Ralink 148f:760b mt7601 ドライバはパッチを適用しても 12.04 ではビルドされない

Ralink 148f:760b mt7601 ドライバはパッチを適用しても 12.04 ではビルドされない

こんにちは、Ubuntunianの皆さん ;)

私は、Ubuntu で慣れているように魔法のように動作するだろうと思って、この安価な Ralink Wi-Fi アダプターを購入しました。;) しかし、このドライバーのインストールは、予想以上に面倒です。私は数時間にわたってボードをくまなく調べ、あらゆることを試しました。まあ... 最初からこれが正しいアプローチ (つまり答え) だとわかっていました。

Ralink MT7601U (148f:7601) Wi-Fi アダプタのインストール

しかし、パッチを適用しても次のようになります。

ahti@ahti:~/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913$ make
make -C tools
make[1]: Siirrytään hakemistoon "/home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/tools"
gcc -g bin2h.c -o bin2h
make[1]: Poistutaan hakemistosta "/home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/tools"
/home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/tools/bin2h
cp -f os/linux/Makefile.6 /home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/Makefile
make -C /lib/modules/3.2.0-70-generic/build SUBDIRS=/home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux modules
make[1]: Siirrytään hakemistoon "/usr/src/linux-headers-3.2.0-70-generic"
  CC [M]  /home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/../../os/linux/rt_profile.o
In file included from /home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/include/rtmp_os.h:44:0,
                 from /home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/include/rtmp_comm.h:75,
                 from /home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/include/rt_config.h:33,
                 from /home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/../../os/linux/rt_profile.c:28:
/home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/include/os/rt_linux.h:282:2: virhe: unknown type name ”kuid_t”
/home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/include/os/rt_linux.h:283:2: virhe: unknown type name ”kgid_t”
/home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/../../os/linux/rt_profile.c: Funktio ”announce_802_3_packet”:
/home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/../../os/linux/rt_profile.c:331:16: varoitus: käyttämätön muuttuja ”pAd” [-Wunused-variable]
/home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/../../os/linux/rt_profile.c: Funktio ”STA_MonPktSend”:
/home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/../../os/linux/rt_profile.c:399:9: varoitus: format ”%d” expects argument of type ”int”, but argument 3 has type ”long unsigned int” [-Wformat]
make[2]: *** [/home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/../../os/linux/rt_profile.o] Virhe 1
make[1]: *** [_module_/home/ahti/data/drivers/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux] Virhe 2
make[1]: Poistutaan hakemistosta "/usr/src/linux-headers-3.2.0-70-generic"
make: *** [LINUX] Virhe 2

申し訳ありませんが、コンソール出力はフィンランド語です (ところで、コンソール出力を英語に変更するにはどうすればいいのでしょうか? 主に apt とビルド ツールの場合、ターミナル セッションのすべてに英語のロケールを使用できない場合は? 不可能ですか?)

でも、そうですね、基本的には今のところはそういう状況です。

私も使ってみましたndis ラッパーアプローチしかし、unshield は Windows ドライバー実行ファイルを抽出できず、.sys/.inf の組み合わせをどこにも見つけられなかったため、そのアイデアは断念されました。

どなたか助けていただければ幸いです。これはユーザー名前空間の問題であることはわかっていますが、カーネルコーディングをしたことがなく、それでも私はプログラマーなので、自分ではこれを解決できません。

ああ、必要であれば私のシステム情報を少しだけ載せておきます: Ubuntu 12.04 (正確)、カーネル: 3.2.0-70-generic (#105-Ubuntu SMP Wed Sep 24 19:49:16 UTC 2014)、GCC バージョン: 4.6 (x86_64-linux-gnu)、Gnome 3.4.2

よろしくお願いします!

答え1

自分自身に答える。

パッチを適用したくてうずうずしていました。パッチを適用しないと、ドライバーはコンパイルされました。しかし、マッピングが間違っているか、148f:760b (<- 1 ではなく b に注意してください) USB アダプターでは動作しないようです。デバイス リストを変更して新しいエイリアスを追加したのですが、ドライバーやそれに関連する他の多くのものをロードした後でも、アダプターが認識されませんでした。

しかし、Windows 7 にドライバーをインストールし (Windows XP では動作しなかったようです)、インストール プロセス後に C:/ProgramData/Mediatek Driver/RT2870 Wireless LAN Card/Driver/ にあるドライバー フォルダーを Ubuntu にコピーし、ndis wrapper と ndiswrapper-dkms パッケージを使用してロードすると、アダプターはすぐに機能するようになりました。実際、Windows 側では何らかの理由で WLAN がまったく認識されませんでしたが、Ubuntu では 1 回のクリックだけですぐにワイヤレスでオンラインになりました。

というわけで、あちこちで奇妙な動作がありましたが、最終的には動作するようになりました。

答え2

おそらくもう Ubuntu 12.04 を使用していないと思いますが、いずれにしても、パッチを適用したときに発生したコンパイル エラーの解決策は次のとおりです。

パッチはLinuxカーネルでのみすぐに動作します>=3.5Ubuntuの12.04カーネルで動作させるには3.2少し修正する必要があります:

include/os/rt_linux.h、次のブロックを探します。私のバージョンでは 280 行目から始まりますが、ソースの取得元によっては若干異なる場合があります。

typedef struct _OS_FS_INFO_
{
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)
    uid_t               fsuid;
    gid_t               fsgid;
#else
    kuid_t              fsuid;
    kgid_t              fsgid;
#endif
    mm_segment_t    fs;
} OS_FS_INFO;

この行を取得します (私の場合は 282)。

#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)

そしてそれを

#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)

今すぐコンパイルしてみてください。動作するはずです :)

関連情報