Raspberry Pi でLinuxカーネルコンパイル

RaspberryPiの公式フォーラムの英語の方でI2Sのスレッドが盛り上がっていますね。
オーディオに興味がある人は気になる話題ではないでしょうか。
私も注目しています。

そのスレッドで紹介されているソースコードが普通のプログラムではなく
Linuxドライバになっています。

ドライバのコンパイルにはカーネルのヘッダーファイルとかが必要なので、
RaspberryPi用のLinuxカーネルのソースを
 https://github.com/raspberrypi/linux
から持ってきて、
zcat /proc/config.gz > .config
make oldconfig
make modules_prepare
とすればドライバのコンパイルに必要なファイルだけ生成して準備OKなはずですが、
いざドライバを insmod で組み込もうとすると、
Invalid module format
とか、
no symbol version for module_layout
などのエラーメッセージが出て、うまくドライバを組み込めません。

仕方ないので、カーネルのコンパイル行いカーネルを切り替えます。
以下そのメモになります。
rootで作業しています。

https://github.com/raspberrypi/linux から3.2.27のソースのzipをダウンロード

/usr/src/3.2.27my
に展開

cd /usr/src/3.2.27my

zcat /proc/config.gz > .config

make oldconfig

make clean

Makefile 編集
先頭の
VERSION = 3
PATCHLEVEL = 2
SUBLEVEL = 27
EXTRAVERSION =
が uname -r などで表示されるバージョン番号になるようです。
EXTRAVERSION = my
と適当に修正しておきます。(しなくてもよい)

make
5~6時間かかります。
寝てる間にコンパイルするには
nohup make > out.log 2> err.log < /dev/null &
とします。こうするとsshを閉じてもバックグラウンドでコンパイルし続けます。
/usr/src/3.2.27my/vmlinux が出来てればOK

make modules_install

mkdir boot

make INSTALL_PATH=/usr/src/3.2.27my/boot install

cp /usr/src/3.2.27my/boot/vmlinuz-3.2.27my /boot

/boot/config.txt 修正
kernel=vmlinuz-3.2.27my の行を追加します。

再起動

これで新しいカーネルに切り替えることが出来ます。




0 件のコメント:

コメントを投稿