blog.tizen.moe
前回は去年の末にAdventCalendarネタとか書いていた模様です。間3回出席し損ねた模様ですが特に3月は死んでいたので、、、orz
blog.tizen.moe
アドカレネタは終わったので今月は放置しているネタに着手しました。他に幾つか頼まれごとやらやりたいことが有るので、ココでブースト掛けてGW中に1つでもやりたい(最悪1つも着手しなくても今日はちゃんと1つ何らか着手したという事実を積み重ねられると言う後ろ向きな発想)
今の状況だと前の進んだ気がしないので1度原点に立ち戻る
なるほど2年も前なのか。(取りあえず今の会社には入ってたみたいなので厳密には丸2年は経ってないけど)
ちょっと発想は違うかも知れないけど↑を参考にfilesystemをbusyboxにしてみる。
stable kernelを落としてきてビルド
$ wget https://git.kernel.org/torvalds/t/linux-4.17-rc2.tar.gz $ tar xfv linux-4.17-rc2.tar.gz $ cd linux-4.17-rc2 $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- defconfig $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8
暫し待つ。(TODO:不要そうなドライバとかoptionの見直し)
busybox filesystemの構築
取りあえずbusyboxもstableを取ってきてbuild
$ wget http://busybox.net/downloads/busybox-1.28.3.tar.bz2 $ tar xfv busybox-1.28.3.tar.bz2 $ cd busybox-1.28.3 $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig
「スタティックにして」の意味が分からなかったけど
たぶんコレ。ただ、Qtのライブラリを入れるのにstaticだと問題だからdynamicにした方が良いような気はする。
取りあえず動作確認してからにすればいいから写経でSTATICつける。
rootfsを構築
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8 install $ cd _install $ find . | cpio -o --format=newc > ../rootfs.img
これでOk?
qemuで実行
$ qemu-system-arm -M versatilepb -nographic -kernel ./zImage -initrd ./rootfs.img -append root=/dev/ram rdinit=/bin/sh console=ttyAMA0 $@ pulseaudio: set_sink_input_volume() failed pulseaudio: Reason: Invalid argument pulseaudio: set_sink_input_mute() failed pulseaudio: Reason: Invalid argument
死んだ様にしか見えないけど、なんとなくconsole=xxxしたせいでroot shellがそっちに流れて見えなくなっただけのような気もする。
取りあえず殺す
$ killall qemu-system-arm qemu-system-arm: terminating on signal 15 from pid 10797
ちゃんと死ぬのでやっぱりそんな気がする
その他ゴリゴリ
が、-noaudioとか無くて良くわからない。kernelがdefconfigなのでversatile_defconfigで作り直してみる
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- defconfig $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8 $ cp arch/arm/boot/zImage ../ $ cd ../ $ ./run.sh pulseaudio: set_sink_input_volume() failed pulseaudio: Reason: Invalid argument pulseaudio: set_sink_input_mute() failed pulseaudio: Reason: Invalid argument Error: invalid dtb and unrecognized/unsupported machine ID r1=0x00000183, r2=0x00000100 r2[]=05 00 00 00 01 00 41 54 01 00 00 00 00 10 00 00 Available machine support: ID (hex) NAME ffffffff Generic DT based system ffffffff ARM-Versatile (Device Tree Support) Please check your kernel config and/or bootloader. qemu-system-arm: terminating on signal 15 from pid 26795
劣化した。。。
kernelのversionをlinux-3.16.56まで下げる
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- versatile_defconfig $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8 $ cp arch/arm/boot/zImage ../ $ cd ../ $ ./run.sh ~~(色々省略)~~ Booting Linux on physical CPU 0x0 Linux version 3.16.56 (adachi@val) (gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.9) ) #1 Sat Apr 28 16:27:26 JST 2018 CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00093177 CPU: VIVT data cache, VIVT instruction cache Machine: ARM-Versatile PB ~~(色々省略)~~
コマンドが動く程度にはなった。
busyboxのスタティックリンクをやめる
Failed to execute /bin/sh (error -2) Kernel panic - not syncing: No working init found. Try passing init= option to kernel. See Linux Documentation/init.txt for guidance. CPU: 0 PID: 1 Comm: swapper Not tainted 3.16.56 #1 [<c0019724>] (unwind_backtrace) from [<c0017000>] (show_stack+0x10/0x14) [<c0017000>] (show_stack) from [<c02bd654>] (panic+0x80/0x1ec) [<c02bd654>] (panic) from [<c02bce3c>] (kernel_init+0xc4/0xe8) [<c02bce3c>] (kernel_init) from [<c0013d38>] (ret_from_fork+0x14/0x3c) ---[ end Kernel panic - not syncing: No working init found. Try passing init= option to kernel. See Linux Documentation/init.txt for guidance. || /bin/shの起動でコケるのか。。。アホらしいのでstatic起動状態のにdynamic linkのバイナリを流し込んで起動する様にするか・・・ (振り出しに戻る感じ) Hello worldを出すだけのバイナリを流し込んでも文字が出ないな・・・ >|sh| # sh /bin/test /bin/sh: can't access tty; job control turned off
- staticでビルドしてもNG
/bin/test: line 1: syntax error: unexpected word (expecting ")")
busybox案は余り筋がよくなさそう。。。