USB 無線LANアダプタ「Corega K.K. CG-WLUSBNM(ID 07aa:0047)」こいつをRaspberry Pi で動かしたい。
このサイトにたどりつくが、意味が分からない。
CONFIG_R8712U: RealTek RTL8712U (RTL8192SU) Wireless LAN NIC driver
なんか、ビルドするんだよーって雰囲気だし。
結局、ビルドはうまくいかずにはあきらめましたが、いろいろと覚えたのでメモ。
初心者がそう簡単にビルドできるものではないな。
GitHub からドライバーのソースを入手して、ビルドに挑戦したときの覚書。Makefileについて。
Contents
GITHUB からソースコードを入手する。
Paspberry Pi にgit がインストールされていることを確認。
autoconf をインストール。
gcc はインストール済み。
root@raspberrypi:/home/uniuni# apt list autoconf
一覧表示... 完了
autoconf/stable,now 2.69-11 all [インストール済み]
root@raspberrypi:/home/uniuni# git --version
git version 2.20.1
root@raspberrypi:/home/uniuni# apt list gcc
一覧表示... 完了
gcc/stable,now 4:8.3.0-1+rpi2 armhf [インストール済み]
root@raspberrypi:/home/uniuni#
ダウンロードしてなんとなくコンパイルしてみるも、エラー続出。
include で失敗している。きっとライブラリが足らない。
巨大なGitHub をフォークしてクローンする。
git をクローンしてコンパイルしている記事を見つけたので、
このLinux のGitHub をクローンしておけば、ビルド出来るのではと考えた。
Ubuntu 18.04 で USB Wi-Fi アダプタを認識させる
で、クローンするためのURL を取得したいので、
いろいろとGitHub を触っていたら、fork というリポジトリをコピーする方法を発見。
これで、コピーしたリポジトリをRaspberry Pi にクローン出来そうです。
自分のGITHUB ならクローンする.git が取得できるもんね。
いい感じです。
エラーで止まる。
というか、デカすぎて固まるみたい。
error: RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.
fatal: the remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
キャッシュを増やすんだ。という記事を発見したので、増やしてみる。
(https でクローンしてるから、ssh はいらなかった。。。と思う)
git config --global ssh.postBuffer 5242880000
git config --global http.postBuffer 5242880000
効果が多少あった気はするが結局止まる。
解決:–depth 1 のオプションを指定してクローンする。
世代管理しているGitHub の最新版だけを取得してクローンする「–depth 1」のオプションをつけることで、解決できました。
Makefile の基本を確認。
make コマンドを実行するも、include のエラーが止まらない。
そもそも自分が「make」が正しく使えているか、このPaspberry Pi できちんと動くのか確認したかったので、
テスト用のコードとMakefile を作ってビルドしてみる事にしました。
ソースコードとMakefile の配置と、Makefile の内容。
# test フォルダにファイルを配置。
uniuni@raspberrypi:~ $ ls build_test/temp
Makefile main.c test.c
# Makefile
myfunc:test.o main.o
cc -o myfunc test.o main.o
# main.c
int main(int argc,char *argv[]){
int test();
}
# test.c
#include <stdio.h>
int test(){
printf("test----------------->\n");
return(0);
}
Makefile 覚書
「ターゲット:依存ファイル1 依存ファイル2」
依存ファイルを「.o」にしておくと、「.c」から作ってくれる。
「cc -o myfunc 依存ファイル1 依存ファイル2 」
cc はgcc の短縮、-o myfunc を入れると実行ファイル名がmyfunc になる。
「Makefile:2: *** 分離記号を欠いています. 中止.」
実行コマンドの前はタブにしないとエラーになる。
実行と、確認。
ビルドできました。
「-C」は実行するディレクトリを移動するオプションでした。
uniuni@raspberrypi:~/build_test/temp $ make
cc -c -o test.o test.c
cc -c -o main.o main.c
main.c: In function ‘main’:
main.c:2:2: warning: implicit declaration of function ‘test’ [-Wimplicit-function-declaration]
test();
^~~~
cc -o myfunc test.o main.o
uniuni@raspberrypi:~/build_test/temp $ ls
Makefile main.c main.o myfunc test.c test.o
uniuni@raspberrypi:~/build_test/temp $ ./myfunc
test----------------->
Make ファイルの指定の基本的な使い方は確認したので、改めてビルドを試みる。
やっぱり、include でエラーが出た。
uniuni@raspberrypi:~ $ make -C linux/drivers/staging/rtl8712
make: ディレクトリ '/home/uniuni/linux/drivers/staging/rtl8712' に入ります
cc -c -o rtl871x_cmd.o rtl871x_cmd.c
rtl871x_cmd.c:19:10: fatal error: linux/compiler.h: そのようなファイルやディレクトリはありません
#include <linux/compiler.h>
^~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [<ビルトイン>: rtl871x_cmd.o] エラー 1
make: ディレクトリ '/home/uniuni/linux/drivers/staging/rtl8712' から出ます
ライブラリをマージしてみる。
クローンしたGit の中に要求されているファイルがあったので、
「 <xxx / ***.h> 」がそれなりの場所にリンクとかできればいけると思う。
シンボリックリンクを追加すればいいかも。
ln -s /home/uniuni/linux/include/linux linux
ファイル名が被って都合が悪そうなので。
ln -s /home/uniuni/test/include/linux linux
シンボリックリンクではうまくいかなかったので、直接システムのlinux にGit 内のファイルをマージしていく事にしました。
この時点で、Git をクローンした意味がなくなったなと思う。
cp -r linux/include/linux/. /usr/include/linux
cp -r /home/uniuni/linux/arch/arm64/include/asm /usr/include/
cp -r /home/uniuni/linux/include/asm-generic/. /usr/include/asm-generic
cp -r /home/uniuni/linux/include/uapi /usr/include
cp -r /home/uniuni/linux/include/vdso /usr/include
cp -r /home/uniuni/linux/arch/arm/include/asm/. /usr/include/asm
cp /home/uniuni/linux/include/asm-generic/mmiowb.h /usr/include/asm
見つからないファイルが出てきた。もうあきらめることにしました。
/usr/include/linux/page-flags-layout.h:6:10: fatal error: generated/bounds.h: そのようなファイルやディレクトリはありません
#include <generated/bounds.h>
^~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [<ビルトイン>: rtl871x_cmd.o] エラー 1
参考
覚えたコマンド
コマンドリファレンス
make :Makefile を実行する。
gcc :C 言語をコンパイルする。
cp -r :コピーする。「-r」は再帰的にコピーする。
mv :フォルダとかファイルを移動。リネームとしても使える。
git clone <url> –depth 1 :GitHub で自分のリポジトリをクローンする。
git config –global ssh.postBuffer 5242880000 :git clone するときのバッファーを設定する。