LoginSignup
1
0

More than 3 years have passed since last update.

LicheePiで遊ぶ (低レベル勉強会2020年07月メモ)

Posted at

uzullaの作業メモ

クロスコンパイルしたいぞ。

手元にDockerでビルド環境作ってみたい

Docker開発環境— Litchi Pie Nano完全なプロセスガイドドキュメント http://nano.lichee.pro/build_sys/docker.html#id14
Litchi Pie開発イメージというものがDockerで提供されている

$ docker pull zepan/licheepi-nano:1.0.0
※ latestがないので、1.0.0を指定するしかなかった。
$ docker images|grep lichee
zepan/licheepi-nano   1.0.0                 e118a4b675e7        22 months ago       4.75GB

うごかん…。

$ docker run --name lp3 --rm  -it zepan/licheepi-nano:1.0.0 /bin/bash
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory": unknown.


zepan/licheepi-nanoじゃなくて、zepan/licheepiでためしてみるか…

$ docker run --name lp2 --rm  -it zepan/licheepi /bin/bash
root@07f87004b787:/# uname -a
Linux 07f87004b787 4.19.76-linuxkit #1 SMP Tue May 26 11:42:35 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

うごいたけど、これarmユーザーランドエミュレーションしてなくない?

$ docker cp hello_linux_arm_goarm5 07:/

root@07f87004b787:/# ./hello_linux_arm_goarm5
Hello world
あ、いや、arm5のバイナリうごくな、なるほど。

## Hello worldを手元でビルド

開発環境というのにgccは普通にamd64がだされてしまったので、arm-linux-gnueabihf-gccを使う(これはLinuxのカーネルビルド用のDockerなのかな)

root@07f87004b787:~/tmp# cat hello.c
#include <stdio.h>

int main(int argc, char *args[])
{
    printf("Hello, world!\n");
    return 0;
}
root@07f87004b787:~/tmp# arm-linux-gnueabihf-gcc ./hello.c  -static
root@07f87004b787:~/tmp# file ./a.out
./a.out: ELF 32-bit LSB executable, ARM, EABI5 version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.32, BuildID[sha1]=9845bf3c9286c72187ab344d93f0786b7a512a1a, not stripped
root@07f87004b787:~/tmp# ./a.out
Hello, world!

(static指定しないと、Dockerのランタイム上ではうごかなかった)

しかし、スタティックリンクすると、でかい…
-rwxr-xr-x 1 root root 3.8M Jul 23 05:36 a.out

非スタティックリンクだと
-rwxr-xr-x 1 root root 9.8K Jul 23 05:38 a.out
4Mbyteと10Kbyteでは桁が2〜3桁違うw

### uuencodeで転送
local
$ uuencode a.out a.uu

remote
# cat > a.uu
{ペースト}
# uudecode -o a.out a.uu
# ./a.out
-sh: ./a.out: not found

??? notfoundとは???

うーん、ちゃんとコピーして実行するもの、永遠に帰ってこない。(実行してももどってこない)


### ldconfig -v

# ldconfig -v
ldconfig: uClibc version
/lib:
        libgcc_s.so.1 => libgcc_s.so.1
        libatomic.so.1 => libatomic.so.1.2.0
        libc.so.0 => libuClibc-1.0.28.so
        libc.so.6 => libc-2.18.so
        ld-uClibc.so.1 => ld-uClibc-1.0.28.so
        ld-linux.so.3 => ld-2.18.so
/usr/lib:
ldconfig: /usr/lib/libstdc++.so.6.0.22-gdb.py is not a shared library, skipping
        libexpat.so.1 => libexpat.so.1.6.7
        libcrypto.so.1.0.0 => libcrypto.so.1.0.0
        libnl-xfrm-3.so.200 => libnl-xfrm-3.so.200.26.0
        libz.so.1 => libz.so.1.2.11
        libssl.so.1.0.0 => libssl.so.1.0.0
        libnl-nf-3.so.200 => libnl-nf-3.so.200.26.0
        libpcap.so.1 => libpcap.so.1.8.1
        libnl-idiag-3.so.200 => libnl-idiag-3.so.200.26.0
        libstdc++.so.6 => libstdc++.so.6.0.22
        libnl-genl-3.so.200 => libnl-genl-3.so.200.26.0
        libnl-route-3.so.200 => libnl-route-3.so.200.26.0
        libnl-3.so.200 => libnl-3.so.200.26.0
/usr/X11R6/lib:
ldconfig: skipping /usr/X11R6/lib: No such file or directory

# ldd hello_linux_arm_goarm5
        not a dynamic executable
# ldd hello_static
        not a dynamic executable
# ldd a.out
checking sub-depends for '/lib/libc.so.6'
        /lib/ld-linux.so.3 (0xb6fa9000)
        libc.so.6 => /lib/libc.so.6 (0x00000000)
        /lib/ld-linux.so.3 => /lib/ld-linux.so.3 (0x00000000)


### メモリ消費量めも(Go)

#  /usr/bin/time -f "%M KB" ./hello_linux_arm_goarm5
Hello world
5488 KB
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0