#はじめに
一般にLinux Kernel Buildは一仕事です。
訳あってNanoPi Fire3-LTSの独自カーネルを作りましたので、ここにまとめます。
#摘要
通常,Linux Kernel Build是一项工作。
我翻译了NanoPi Fire3-LTS的原始内核,所以这里是一个总结。
資料を読む
まずこれをしっかり読んでください。
Kernel Sourceを入手する
資料を読んだ方は分かってますね。
kernel.org の生のSource ではダメです
git clone https://github.com/friendlyarm/linux.git -b nanopi2-v4.4.y --depth 1
gitでfriendlyarmの特製パッチが当たったものを入手してください。
時計を合わせる
makeを使う前には時計を合わせましょう。
ntpdate ntp.jst.mfeed.ad.jp
Build環境を整える
ここでは調達したNanoPi Fire3しかLinuxを持っていないという前提で行きます。もちろんx86_64のLinuxを持っていればクロスコンパイル環境を作りそちらでBuildすることは可能です、というかソースコードはそういう前提で作られています。
cd /usr/bin
ln -s gcc aarch64-linux-gcc
ln -s ld aarch64-linux-ld
ln -s nm aarch64-linux-nm
ln -s ar aarch64-linux-ar
ln -s objcopy aarc64-linux-objcopy
お分かりでしょう。
クロスコンパイラーの代わりにレジデントコンパイラーを充ててしまいます。
.config を作る
普通動いているkernelの/bootにbuildしたときのconfigが残してありこれを改造して独自カーネルを作りますが、fire3にはありませんし、kernel自身からconfigを取り出せるようにもなっていません。素から作っては見たものの案の定走りません。.configは自動生成されるのです。
touch .scmversion
make nanopi3_linux_defconfig
Kernel Huck する
作業に自信がある方はこの工程でconfigをいじり、ドライバーを整理します。
慎重な方はここはいじらず最後まで推奨カーネルが動くことを検査してから、2度目に行うが良いでしょう。
apt install ncurses-dev
make manuconfig
たくさんの項目があります。
肝心なものを削ると、立ち上がらなくなります。
build
make -k -j4
数時間かかります。-j8を指定したいところですが、memory不足でかえって遅くなるようです。
寝る前に仕掛けてさっさと寝ましょう。
起きたらエラーが出てました。
こういう時にmake -k を指定するとエラーが影響しないところは先に進めてくれます。
/usr/src/linux/arch/arm64/include/asm/vdso.h
です。
42行目に
#define vdso_offset_sigtamp 0x06c0
を書き加えたらおとなしくなりました。
まあ、この程度は気のせいでしょう (^^;
backupする
ここでおもむろにSDをバックアップします。
SDをreaderに挿します。
ddrescue -f /dev/mmcblk0 /dev/sda
backupのSDを抜き、安全なところに保管してから、
mount /dev/mmcblk0p1 /boot
make install
reboot
どうでしょう?上がりますか?