前回の続きです。過去の記事にも同じようなことを書いているので、そちらも参照願います。
今回は、カーネルをいじることについて触れます。
<2018.4.30 修正:ファイルが大きくなりすぎたので、3つに分割しました。>
9 カーネルソースの導入
一昔前は、カーネルのソースファイルが、現行のシステムと適合することを保証するために、カーネルをすべてコンパイルする必要があったが、
というコマンドを使うことで、その必要がなくなった。そのコマンドを使えるようにするため、そのプログラムをインストールする。ただし、pi3には対応していないようだ。
rpi-source 本家サイトのHome · notro/rpi-source Wiki · GitHubにあるコマンドを使い、ソフトウェアインストール先から、所定のファイルをwgetによりダウンロードする。
sudo wget https://raw.githubusercontent.com/notro/rpi-source/master/rpi-source -O /usr/bin/rpi-source && sudo chmod +x /usr/bin/rpi-source && /usr/bin/rpi-source -q –tag-update
このプログラムはこのコマンドを使うにあたり、ソースをコンパイルする必要があり、コンパイルするgccのバージョン違いにおいてエラーが出やすい。
カーネルを編集するのに使うべきgccコンパイラのバージョンを用いてコンパイルする必要がある。
それは以下で調べる。
cat /proc/version
次に、現行のgccのバージョンを調べる。
gcc –version | grep gcc
なお、「–version」のところ、1つのマイナスとなってしまっているかもしれないが、マイナスが2つである。
直ちにrpi-sourceを実行すると以下のようなエラーが出る。
ERROR:
gcc version check: mismatch between gcc (6) and /proc/version (4.9.3)
Skip this check with –skip-gcc
なお、「–config gcc」のところ、1つのマイナスとなってしまっているかもしれないが、マイナスが2つである。
上記cat /proc/versionで検出したバージョンをインストールする必要がある。
gccのインストールには、まず、以下のコマンド。
次にcat /proc/versionで検出したバージョンをインストール。
同日現在、バージョン4.9.3となった。そこで、以下のコマンド。
もっともどのバージョンを優先させるかにつき、以下のコマンドを打つ。
この辺は「new_western_elec」というサイトの「SabreBerry32のドライバのコンパイル方法(SABRE9018Q2C)」
にも説明があります。
<2018.5.7 追記>もう一度やってみると、上記#1がうまくいかなくて、バージョンが修正されない。そこで、上記サイトを参考に、
sudo update-alternatives –install /usr/bin/gcc gcc /usr/bin/gcc-4.9 80
とした。ここで、20,80は、優先順位を表し、数字の高いほうが優先順位が高い。「gcc-6」というのは、その時々で、最新のものを入れた場合には異なっていくが、以下のコマンドで、フォルダ内を調べると、gccが、複数インストールされ、gcc-6というフォルダがあるので、そのフォルダを参照する。
現在gccのバージョンは、6.3であるが、/usr/bin/に含まれる該当するフォルダを指定する。
/usr/bin/gcc-4.9も現在のバージョンは、4.9.3であるが、/usr/bin/に存在するフォルダ名を入力する。
そうすると以下の通り、バージョンが4.9.3へ変更された。
update-alternatives: using /usr/bin/gcc-6 to provide /usr/bin/gcc (gcc) in auto mode
root@raspberrypi:/usr/bin# sudo update-alternatives –install /usr/bin/gcc gcc /usr/bin/gcc-4.9 80
update-alternatives: using /usr/bin/gcc-4.9 to provide /usr/bin/gcc (gcc) in auto mode
root@raspberrypi:/usr/bin# sudo gcc –version
gcc (Raspbian 4.9.3-14) 4.9.3・・・
そこで、バージョンがカーネルのバージョンと一致したので、以下のコマンドを打ち込めば、カーネルソースファイルをインストールできます。
rpi-source
10 カーネルソースの変更の準備
(1)「ラズベリーパイ、volumioカーネル環境をmakeなしクロスコンパイルなしで2時間で立ち上げる。クロスLAN接続」の20~21と同じなので、それをやっていただく。
(2) I2Sのソースファイルを探す。
上記(1)のつぎの過去記事の22と同じく
root@volumio:~# find ~/ -name “*i2s.c”
によりカーネルソースを探す。
i2sのカーネルドライバは、/rootの下にある。
rootにあるファイルやディレクトリを調べる。
cd /root
dir
root@raspberrypi:~# dir
linux
linux-80a14a56dacb7cc2b40d5f37d00bedb0ceace130
linux-80a14a56dacb7cc2b40d5f37d00bedb0ceace130.tar.gz
ここに現れた太字で表すディレクトリは、メモ帳にコピーしておく。シフトを押しながら左右キーを押し、領域指定をしたら、
ctrl+Cでコピーできる。
ディレクトリが長すぎるので、環境変数を登録する。電源を切ると忘れるので、メモ帳に転記する。
export codec=/root/linux-80a14a56dacb7cc2b40d5f37d00bedb0ceace130/sound/soc/codecs
ここで、太字の部分は、カーネルのバージョンにより異なる。