tizen.moe

tizen.moe

Qt 勉強会 @ Tokyo #58

blog.tizen.moe
前回は去年の末にAdventCalendarネタとか書いていた模様です。間3回出席し損ねた模様ですが特に3月は死んでいたので、、、orz

blog.tizen.moe
アドカレネタは終わったので今月は放置しているネタに着手しました。他に幾つか頼まれごとやらやりたいことが有るので、ココでブースト掛けてGW中に1つでもやりたい(最悪1つも着手しなくても今日はちゃんと1つ何らか着手したという事実を積み重ねられると言う後ろ向きな発想)



今の状況だと前の進んだ気がしないので1度原点に立ち戻る

f:id:moguriso:20180428145609p:plain

なるほど2年も前なのか。(取りあえず今の会社には入ってたみたいなので厳密には丸2年は経ってないけど)

nullpo-head.hateblo.jp

ちょっと発想は違うかも知れないけど↑を参考に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

「スタティックにして」の意味が分からなかったけど
f:id:moguriso:20180428151424p:plain
たぶんコレ。ただ、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案は余り筋がよくなさそう。。。