Engineering Agit

[Session 03 RTOS study 01] - 실습교재 및 개발환경 구성 본문

Embedded Lab. @ Modu inst./2021 Session 03 (2021.01.13~)

[Session 03 RTOS study 01] - 실습교재 및 개발환경 구성

Sean_Kim95 2021. 1. 18. 17:07

◈ 여는 글

 본 Session 03은 모두의 연구소(강남 캠퍼스) 임베디드 랩의 2번째 session(2021.01.13~)을 다룬다. (Session 03인 이유는 Session 01이 비공식적인 session이었기 때문이다.) 이번 session은 RTOS에 관하여 다룬다. 


1. 교재

① 임베디드 OS 개발 프로젝트:

- 실제 임베디드 OS의 구현을 위한 실습교재

<Fig. 1> 임베디드 OS 개발 프로젝트 (출처: Yes24)

 

② RTOS를 이용한 실시간 임베디드 시스템 디자인:

- 위의 교재에서 명시되어있지 않은 이론적인 내용을 담고 있다.

<Fig. 2> RTOS를 이용한 실시간 임베디드 시스템 디자인 (출처: Yes24)

 


2. 개발환경 구성

실습교재에서는 Linux환경에서 진행하고 있지만, 현재 사용하고 있는 노트북은 Mac OS가 설치되어 있기 때문에 VM을 설치하여 Linux를 실행하거나 하드에 직접 OS 사용공간을 할당하여 사용해야 하기 때문에 번거로움이 있다. 따라서 native 환경인 Mac OS에서 embedded system emulator인 QEMU를 설치하고 RTOS에 대한 공부를 하려 한다.

2-1. 개발환경 구성 요소

실제 embedded development board에서 OS를 개발해도 되지만, 해당 dev. board를 구매하는 것은 비용이 든다. 따라서 본 교재에서는 emulator를 이용하여 가상의 dev. board에서 OS를 개발하는 방식을 택했다. 이를 위해 QEMU와 ARM용 cross-compiler인 GCC 설치가 필요하다.

2-1-1. QEMU

 QEMU는 Quick EMUlator의 약자로 hardware virtualization을 수행하기 위한 무료 오픈소스 emulator이자 virtualizer이다. 해당 emulator는 다양한 종류의 hardware platform들을 지원하는데 우리는 그 중 ARM을 위한 RTOS를 개발할 것이다. 자세한 사항은 아래의 링크를 참고하자.

en.wikipedia.org/wiki/QEMU#:~:text=QEMU%20(short%20for%20Quick%20EMUlator,that%20can%20perform%20hardware%20virtualization.&text=It%20also%20can%20be%20used,as%20Intel%20VT%2Dx).

 

QEMU - Wikipedia

Free virtualization and emulation software This article is about the virtual machine monitor. For the Quarterdeck expanded memory manager, see QEMM. QEMU (short for Quick EMUlator[2][dubious – discuss]) is a free and open-source emulator and virtualizer

en.wikipedia.org

 

2-1-2. GCC

 GCC는 GNU Compiler Collection의 약자로 C/C++로 개발된 펌웨어를 embedded system에서 작동할 수 있도록 compile해주는 compiler이다. GCC도 다양한 hardware platform 용 compiler들이 존재하며 우리는 ARM용 GCC를 설치할 것이다. 자세한 사항은 아래의 링크를 참고하자.

en.wikipedia.org/wiki/GNU_Compiler_Collection

 

GNU Compiler Collection - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Compiler system for various programming languages The GNU Compiler Collection (GCC) is a compiler system produced by the GNU Project supporting various programming languages. GCC is a

en.wikipedia.org


2-2. 개발환경 구축

 개발환경 구축은 Mac의 Terminal에서 이루어진다. 다음 순서는 크게 의미가 없고 해당하는 명령어들을 실행해주어 설치하면 구축이 완료된다.

  • GCC(ARM용) installation for cross-compiler: 'brew install --cask gcc-arm-embedded'
  • Wget(A robust command line application for downloading URL-specified resources): 'brew install wget'
  • QEMU installation for emulating embedded system: 'brew install qemu'

 여기서 Wget은 추후에 개발 중 URL resource를 이용해야하는 경우가 발생하는데 그때 사용하기 위한 프로그램이다.


2-3. 결과

➜  ~ brew install --cask gcc-arm-embedded
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> New Formulae
acl2                       graphql-cli                odin
act                        gravity                    oha
aerc                       grokj2k                    omake
aida-header                grpcui                     openalpr
airshare                   gtkmm4                     openfast
alsa-lib                   guile@2                    openfst
amp                        gulp-cli                   openjdk@8
apidoc                     h2spec                     openstackclient
arb                        halide                     oq
argo                       hashlink                   or-tools
argocd                     hasura-cli                 ormolu
arrayfire                  hblock                     ory-hydra
arturo                     hcxtools                   osi
asimov                     hdf5-mpi                   osm
asroute                    heksa                      overdrive
asuka                      heppdt2                    ox
athenacli                  httpx                      packetbeat
atkmm@2.28                 hy                         packr
attr                       i686-elf-binutils          pandoc-include-code
austin                     i686-elf-gcc               pandocomatic
autodiff                   idris2                     pangomm@2.42
aws-console                immudb                     parallel-hashmap
aws-rotate-key             indicators                 pdm
awsweeper                  infracost                  periscope
bandit                     inframap                   pfetch
bit-git                    inja                       phive
blaze                      inko                       php@7.4
blogc                      ioctl                      pickle
bombadillo                 isl@0.18                   pipgrip
bond                       isort                      pkger
bootloadhid                jc                         po4a
borgbackup                 jerryscript                podman
box2d                      jimtcl                     postgresql@12
bpytop                     jinx                       prometheus-cpp
buildozer                  jobber                     promtail
c7n                        jolie                      protoc-gen-go-grpc
cadence                    jpeg-xl                    protoc-gen-gogo
cairomm@1.14               jql                        protoc-gen-gogofaster
cargo-audit                json5                      ptpython
cargo-edit                 jsonnet-bundler            pwncat
cargo-watch                k3sup                      python@3.7
carton                     k9s                        python@3.9
cassowary                  kamel                      qrcp
castget                    kcgi                       quill
cbc                        kde-extra-cmake-modules    rain
cbmc                       kde-karchive               rbtools
cddlib                     kde-kdoctools              rcm
cdktf                      kde-ki18n                  redo
cdo                        kde-threadweaver           reg
cfn-flip                   keptn                      regipy
cfn-format                 khiva                      reorder-python-imports
cgl                        kona                       rgf
chalk-cli                  kondo                      richmd
charge                     ksync                      rm-improved
chars                      kube-linter                rqlite
chart-testing              kubecm                     rtorrent
checkov                    kubevela                   rttr
chezmoi                    kubie                      ruby@2.7
choose-rust                kumactl                    rust-analyzer
chrony                     lab                        rustscan
clair                      ladspa-sdk                 s2n
clang-format@8             lanraragi                  saltwater
clash                      latexindent                sdns
claws-mail                 lc0                        semgrep
cli11                      ldpl                       server-go
clip                       leaf                       shallow-backup
cloud-nuke                 leakcanary-shark           sheldon
cloudformation-cli         libaio                     showkey
cloudformation-guard       libbsd                     shtools
coconut                    libcap                     silicon
code-server                libcap-ng                  simdjson
colfer                     libcouchbase@2             skylighting
commitizen                 libcpuid                   sleef
condure                    libdmx                     smlpkg
copilot                    libdrm                     snap
coredns                    libfontenc                 so
cortex                     libfs                      solidity
counterfeiter              libfuse                    sollya
cpio                       libgccjit                  sonic
cpm                        libgnt                     spack
cpr                        libhandy                   sponge
cqlkit                     libice                     spotify-tui
croaring                   libirecovery               spotifyd
croc                       libmnl                     sqlc
cubejs-cli                 libnetfilter-queue         sqlite-utils
cucumber-ruby              libnetworkit               standardese
cvs-fast-export            libnfnetlink               staticcheck
datasette                  libnsl                     strace
dbdeployer                 libolm                     structurizr-cli
detach                     liboqs                     subfinder
device-mapper              libpciaccess               t-rec
dgraph                     libpinyin                  tanka
diskonaut                  libpqxx@6                  taskwarrior-tui
dmagnetic                  libpthread-stubs           tctl
dnsprobe                   librttopo                  tendermint
dnsx                       libseccomp                 tengo
doctest                    libslirp                   termcolor
docui                      libsm                      terracognita
dog                        libtirpc                   terraform-ls
dosbox-staging             libtorrent-rakshasa        terraform@0.12
dotenv-linter              libva                      terraform@0.13
dotnet                     libvdpau                   terrascan
dprint                     libvnc                     tfsec
driftctl                   libx11                     tgenv
duckdb                     libxau                     thanos
duckscript                 libxaw                     thrax
duf                        libxaw3d                   tm
duktape                    libxcb                     toot
earthly                    libxcomposite              torchvision
easy-rsa                   libxcursor                 trailscraper
efm-langserver             libxdamage                 tre-command
eksctl                     libxdmcp                   trec_eval
eleventy                   libxext                    tree-sitter
empty                      libxfixes                  trimage
envoy                      libxfont                   trunk
erlang@22                  libxft                     ugrep
eva                        libxi                      unum
evernote2md                libxinerama                uptoc
f3d                        libxkbfile                 usb.ids
fargatecli                 libxml++@4                 utf8cpp
fava                       libxml++@5                 util-macros
fblog                      libxmu                     uutils-coreutils
fcct                       libxp                      v2ray
fennel                     libxpm                     vapor
fetch                      libxrandr                  vc
field3d                    libxrender                 vcpkg
fizz                       libxres                    vgrep
flamegraph                 libxscrnsaver              vint
flank                      libxshmfence               vivid
flarectl                   libxt                      vlang
flash                      libxtst                    vlmcsd
fleet-cli                  libxv                      volk
flit                       libxvmc                    volta
flow-cli                   libxxf86dga                vsearch
flux                       libxxf86vm                 vtk@8.2
fnm                        linux-headers              vulture
folderify                  litecli                    wangle
font-util                  lizard-analyzer            wasm-pack
foreman                    localstack                 wayland
forge                      logcli                     wayland-protocols
fpart                      logswan                    webify
fpdns                      loki                       wgcf
fplll                      lp_solve                   wownero
functionalplus             lua@5.3                    wren
gallery-dl                 lunchy                     wren-cli
gateway-go                 lunchy-go                  x86_64-elf-gdb
gau                        macos-trash                xbitmaps
gcalcli                    magic_enum                 xcb-proto
gcc@9                      mandown                    xcb-util
gdbgui                     mariadb@10.4               xcb-util-cursor
gdu                        markdownlint-cli           xcb-util-image
ghc@8.8                    marked                     xcb-util-keysyms
ghz                        mask                       xcb-util-renderutil
ghz-web                    massdns                    xcb-util-wm
git-bug                    matplotplusplus            xcbeautify
git-hooks-go               md4c                       xcinfo
git-hound                  mermaid-cli                xdpyinfo
gitlint                    mesa-glu                   xinput
gitql                      mhonarc                    xkeyboardconfig
gitui                      microplane                 xorgproto
giza                       mockery                    xorgrgb
glab                       muffet                     xterm
glibmm@2.64                naabu                      xtrans
gluon                      nanorc                     xxh
gmailctl                   ncspot                     yh
go@1.14                    nest                       yj
gocloc                     networkit                  ykdl
gofish                     never                      youtube-dlc
gofumpt                    nfpm                       youtubedr
golangci-lint              ngs                        yq@3
googletest                 nicotine-plus              z.lua
gopls                      node@14                    zenith
gosec                      notmuch-mutt               zoxide
gost                       numcpp                     zsh-async
gostatic                   oakc                       zsh-you-should-use
gping                      ocaml-zarith
gradle-profiler            oci-cli
==> Updated Formulae
Updated 4852 formulae.
==> Renamed Formulae
elasticsearch@6.8 -> elasticsearch@6
gst-validate -> gst-devtools
gtk+4 -> gtk4
interactive-rebase-tool -> git-interactive-rebase-tool
jfrog-cli-go -> jfrog-cli
kibana@6.8 -> kibana@6
mkl-dnn -> onednn
now-cli -> vercel-cli
==> Deleted Formulae
baidupcs-go                gnome-builder              python
biogeme                    gobby                      residualvm
boost@1.55                 godep                      rmtrash
boost@1.59                 highlighting-kate          sflowtool
cargo-completion           i386-elf-grub              stlviewer
confluent-platform         kibana@5.6                 tomee-jax-rs
crc                        llvm@6                     unp64
cryptopp                   lumo                       unrar
curl-openssl               marathon-swift             unravel
deis                       meson-internal             urbit
deisctl                    mysql-connector-c++@1.1    woboq_codebrowser
dtrx                       open-cobol                 wpscan
elasticsearch@2.4          ori                        xspin
elasticsearch@5.6          pgplot                     xu4
fmsx                       pijul

==> Tapping homebrew/cask
Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask'...
remote: Enumerating objects: 543736, done.
remote: Total 543736 (delta 0), reused 0 (delta 0), pack-reused 543736
Receiving objects: 100% (543736/543736), 239.19 MiB | 1.31 MiB/s, done.
Resolving deltas: 100% (383775/383775), done.
Tapped 3790 casks (3,911 files, 256.7MB).
==> Downloading https://developer.arm.com/-/media/Files/downloads/gnu-rm/10-2020
==> Downloading from https://armkeil.blob.core.windows.net/developer/Files/downl
######################################################################## 100.0%
==> Installing Cask gcc-arm-embedded
==> Linking Binary 'arm-none-eabi-strip' to '/usr/local/bin/arm-none-eabi-strip'
==> Linking Binary 'arm-none-eabi-ar' to '/usr/local/bin/arm-none-eabi-ar'.
==> Linking Binary 'arm-none-eabi-as' to '/usr/local/bin/arm-none-eabi-as'.
==> Linking Binary 'arm-none-eabi-c++' to '/usr/local/bin/arm-none-eabi-c++'.
==> Linking Binary 'arm-none-eabi-c++filt' to '/usr/local/bin/arm-none-eabi-c++f
==> Linking Binary 'arm-none-eabi-cpp' to '/usr/local/bin/arm-none-eabi-cpp'.
==> Linking Binary 'arm-none-eabi-elfedit' to '/usr/local/bin/arm-none-eabi-elfe
==> Linking Binary 'arm-none-eabi-g++' to '/usr/local/bin/arm-none-eabi-g++'.
==> Linking Binary 'arm-none-eabi-gcc' to '/usr/local/bin/arm-none-eabi-gcc'.
==> Linking Binary 'arm-none-eabi-gcc-ar' to '/usr/local/bin/arm-none-eabi-gcc-a
==> Linking Binary 'arm-none-eabi-gcc-nm' to '/usr/local/bin/arm-none-eabi-gcc-n
==> Linking Binary 'arm-none-eabi-gcc-ranlib' to '/usr/local/bin/arm-none-eabi-g
==> Linking Binary 'arm-none-eabi-gcov' to '/usr/local/bin/arm-none-eabi-gcov'.
==> Linking Binary 'arm-none-eabi-gcov-tool' to '/usr/local/bin/arm-none-eabi-gc
==> Linking Binary 'arm-none-eabi-gdb' to '/usr/local/bin/arm-none-eabi-gdb'.
==> Linking Binary 'arm-none-eabi-gdb-py' to '/usr/local/bin/arm-none-eabi-gdb-p
==> Linking Binary 'arm-none-eabi-gprof' to '/usr/local/bin/arm-none-eabi-gprof'
==> Linking Binary 'arm-none-eabi-ld' to '/usr/local/bin/arm-none-eabi-ld'.
==> Linking Binary 'arm-none-eabi-ld.bfd' to '/usr/local/bin/arm-none-eabi-ld.bf
==> Linking Binary 'arm-none-eabi-nm' to '/usr/local/bin/arm-none-eabi-nm'.
==> Linking Binary 'arm-none-eabi-objcopy' to '/usr/local/bin/arm-none-eabi-objc
==> Linking Binary 'arm-none-eabi-objdump' to '/usr/local/bin/arm-none-eabi-objd
==> Linking Binary 'arm-none-eabi-ranlib' to '/usr/local/bin/arm-none-eabi-ranli
==> Linking Binary 'arm-none-eabi-readelf' to '/usr/local/bin/arm-none-eabi-read
==> Linking Binary 'arm-none-eabi-size' to '/usr/local/bin/arm-none-eabi-size'.
==> Linking Binary 'arm-none-eabi-strings' to '/usr/local/bin/arm-none-eabi-stri
==> Linking Binary 'arm-none-eabi-addr2line' to '/usr/local/bin/arm-none-eabi-ad
🍺  gcc-arm-embedded was successfully installed!
➜  ~ brew install wget
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/cask).
==> Updated Formulae
Updated 4 formulae.
==> Updated Casks
Updated 2 casks.

==> Downloading https://homebrew.bintray.com/bottles/gettext-0.21.big_sur.bottle
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/a025e143fe3f5f7e24a93
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/libunistring-0.9.10.big_sur
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/5d336bd939f678b48dc1c
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/libidn2-2.3.0.big_sur.bottl
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/65523d89d65893a402f9f
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/openssl%401.1-1.1.1i.big_su
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/8008537d37a7f09eedbcd
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/wget-1.21.big_sur.bottle.ta
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/eb830909eed1e6d861968
######################################################################## 100.0%
==> Installing dependencies for wget: gettext, libunistring, libidn2 and openssl@1.1
==> Installing wget dependency: gettext
==> Pouring gettext-0.21.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/gettext/0.21: 1,953 files, 19.8MB
==> Installing wget dependency: libunistring
==> Pouring libunistring-0.9.10.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/libunistring/0.9.10: 55 files, 4.5MB
==> Installing wget dependency: libidn2
==> Pouring libidn2-2.3.0.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/libidn2/2.3.0: 72 files, 808.2KB
==> Installing wget dependency: openssl@1.1
==> Pouring openssl@1.1-1.1.1i.big_sur.bottle.tar.gz
==> Caveats
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
  /usr/local/etc/openssl@1.1/certs

and run
  /usr/local/opt/openssl@1.1/bin/c_rehash

openssl@1.1 is keg-only, which means it was not symlinked into /usr/local,
because macOS provides LibreSSL.

If you need to have openssl@1.1 first in your PATH run:
  echo 'export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"' >> ~/.zshrc

For compilers to find openssl@1.1 you may need to set:
  export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
  export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"

==> Summary
🍺  /usr/local/Cellar/openssl@1.1/1.1.1i: 8,067 files, 18.5MB
==> Installing wget
==> Pouring wget-1.21.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/wget/1.21: 88 files, 4.1MB
==> Caveats
==> openssl@1.1
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
  /usr/local/etc/openssl@1.1/certs

and run
  /usr/local/opt/openssl@1.1/bin/c_rehash

openssl@1.1 is keg-only, which means it was not symlinked into /usr/local,
because macOS provides LibreSSL.

If you need to have openssl@1.1 first in your PATH run:
  echo 'export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"' >> ~/.zshrc

For compilers to find openssl@1.1 you may need to set:
  export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
  export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"

➜  ~ brew install qemu
Updating Homebrew...
==> Downloading https://homebrew.bintray.com/bottles/libffi-3.3_2.big_sur.bottle.tar.gz
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/pcre-8.44.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/a67dd6141e117f849bbb7d3bde92ffb6485921939c1d64e39a3f7fd0dac3f523?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/gdbm-1.18.1_1.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/36b492f1b0910367dd394cbdcffe1606f64ab41ec6701210becfb591a8557dee?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/readline-8.1.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/2cc3a9582e3c7e21eb3c2c8964abd33e9720fb4a9588c626d8424ff8cc9b1aed?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/sqlite-3.34.0.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/cdf256befc0752680a6742469b217e0dae42c691cb3565923d4bf2c5a0583152?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/tcl-tk-8.6.11.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/f7c4fb93ca32dca70f3ead938b44bce22c7a99f060242ce802ca8955d274f361?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/xz-5.2.5.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/4fbd4a9e3eb49c27e83bd125b0e76d386c0e12ae1139d4dc9e31841fb8880a35?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/python%403.9-3.9.1_6.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/48d123683fa125de9f02f7777683edda40e998f0e2dca492024c00bbd3f05ea2?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/glib-2.66.4_1.big_sur.bottle.1.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/f8851f19a2ce75914f0b38a3a0ad4d357f16824bfa10344a0cdf5d3e2d794ef5?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/gmp-6.2.1.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/6a44705536f25c4b9f8547d44d129ae3b3657755039966ad2b86b821e187c32c?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/bdw-gc-8.0.4_1.big_sur.bottle.1.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/bb94ab58bc20b01662c432d21920c9a2e644aad92208b640658d3fd9fb530636?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/libtool-2.4.6_2.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/b5dba5a59ae66f42b012998e08edbeaed9e2456c0d1670307b8f46be5ef3b9fa?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/pkg-config-0.29.2_3.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/0040b6ebe07f60549800b211343fd5fb3cf83c866d9f62e40f5fb2f38b71e161?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/guile-3.0.5.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/ce8a02da2f7a50ee2df21ace1dac3b8335855907ec31224cea3ea5f89d82c463?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/libtasn1-4.16.0.big_sur.bottle.tar.gz
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/nettle-3.7.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/e02e4ae1f73b54c0976a2e7afdbe2f461a202362c51c68e341f289477a9dfb6b?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/p11-kit-0.23.22.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/9474fe6483bbc394d9069f79528ecfe9ba1af00db4aca23c26857b6b66736d73?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/libevent-2.1.12.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/45758b448d82b82b6bea52bc9a72593ef22f04ebdaa4b4230cadf12768252e22?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/c-ares-1.17.1.big_sur.bottle.tar.gz
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/jemalloc-5.2.1_1.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/7797788be2da677a8343ac6199e2f180c2e6b627c0b9abc9da133fbc34e86678?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/libev-4.33.big_sur.bottle.tar.gz
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/nghttp2-1.42.0_1.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/3d0437a63bcc51ec17d456847bcc0a624be2e00755ecc96b8445bc15020ff413?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/unbound-1.13.0.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/cef5d9843ecaabaa0a4cb9b89e04bc3d370ce143e4ff2e0f6711aa6572b1ad3a?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/gnutls-3.6.15.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/6f523e8ce74c567d17a4a5b69794e897074a016b895a5d8ef7122ac006b770fc?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/jpeg-9d.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/c565929a4901365a3408b57275802f943625c1e29e1b48a186edd2e97d8c0bdb?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/libpng-1.6.37.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/a8f1c35f9f004c4f7878c30027e35a9fb9551782df963f88deebd3dc29d94d51?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/libssh-0.9.5_1.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/ba9752b774a055a0df12b12cb76c8faed66b13de0f8ebbb8d415dae9f21a899d?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/libusb-1.0.24.big_sur.bottle.tar.gz
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/lzo-2.10.big_sur.bottle.tar.gz
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/ncurses-6.2.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/b34b4aa433f23405c6104bf810836eed2686f11c660b8668a7af86f99be2329f?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/pixman-0.40.0.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/0114710dd922d5e4839c9dea3b72cd5fbe6f00157dd63457c99ca15554cf8d7f?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/snappy-1.1.8.big_sur.bottle.tar.gz
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/vde-2.3.2_1.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/f634d3558c44876138a229f06554ab603b31e412a03c049d96f6c3616e579729?response-content-disp
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/qemu-5.1.0.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/6d66e4689bda9dc9c43bd3924e49e4722586bb611073ced182c79c6d7f995cb0?response-content-disp
######################################################################## 100.0%
==> Installing dependencies for qemu: libffi, pcre, gdbm, readline, sqlite, tcl-tk, xz, python@3.9, glib, gmp, bdw-gc, libtool, pkg-config, guile, libtasn1, nettle, p11-kit, libevent, c-ares, jemalloc, libev, nghttp2, unbound, gnutls, jpeg, libpng, libssh, libusb, lzo, ncurses, pixman, snappy and vde
==> Installing qemu dependency: libffi
==> Pouring libffi-3.3_2.big_sur.bottle.tar.gz
==> Caveats
libffi is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

For compilers to find libffi you may need to set:
  export LDFLAGS="-L/usr/local/opt/libffi/lib"
  export CPPFLAGS="-I/usr/local/opt/libffi/include"

==> Summary
🍺  /usr/local/Cellar/libffi/3.3_2: 17 files, 540.5KB
==> Installing qemu dependency: pcre
==> Pouring pcre-8.44.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/pcre/8.44: 204 files, 5.8MB
==> Installing qemu dependency: gdbm
==> Pouring gdbm-1.18.1_1.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/gdbm/1.18.1_1: 25 files, 787.2KB
==> Installing qemu dependency: readline
==> Pouring readline-8.1.big_sur.bottle.tar.gz
==> Caveats
readline is keg-only, which means it was not symlinked into /usr/local,
because macOS provides BSD libedit.

For compilers to find readline you may need to set:
  export LDFLAGS="-L/usr/local/opt/readline/lib"
  export CPPFLAGS="-I/usr/local/opt/readline/include"

==> Summary
🍺  /usr/local/Cellar/readline/8.1: 48 files, 1.6MB
==> Installing qemu dependency: sqlite
==> Pouring sqlite-3.34.0.big_sur.bottle.tar.gz
==> Caveats
sqlite is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have sqlite first in your PATH run:
  echo 'export PATH="/usr/local/opt/sqlite/bin:$PATH"' >> ~/.zshrc

For compilers to find sqlite you may need to set:
  export LDFLAGS="-L/usr/local/opt/sqlite/lib"
  export CPPFLAGS="-I/usr/local/opt/sqlite/include"

==> Summary
🍺  /usr/local/Cellar/sqlite/3.34.0: 11 files, 4.1MB
==> Installing qemu dependency: tcl-tk
==> Pouring tcl-tk-8.6.11.big_sur.bottle.tar.gz
==> Caveats
tcl-tk is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have tcl-tk first in your PATH run:
  echo 'export PATH="/usr/local/opt/tcl-tk/bin:$PATH"' >> ~/.zshrc

For compilers to find tcl-tk you may need to set:
  export LDFLAGS="-L/usr/local/opt/tcl-tk/lib"
  export CPPFLAGS="-I/usr/local/opt/tcl-tk/include"

==> Summary
🍺  /usr/local/Cellar/tcl-tk/8.6.11: 3,041 files, 51.6MB
==> Installing qemu dependency: xz
==> Pouring xz-5.2.5.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/xz/5.2.5: 95 files, 1.4MB
==> Installing qemu dependency: python@3.9
==> Pouring python@3.9-3.9.1_6.big_sur.bottle.tar.gz
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink bin/2to3
Target /usr/local/bin/2to3
already exists. You may want to remove it:
  rm '/usr/local/bin/2to3'

To force the link and overwrite all conflicting files:
  brew link --overwrite python@3.9

To list all files that would be deleted:
  brew link --overwrite --dry-run python@3.9

Possible conflicting files are:
/usr/local/bin/2to3 -> /Library/Frameworks/Python.framework/Versions/3.9/bin/2to3
/usr/local/bin/2to3-3.9 -> /Library/Frameworks/Python.framework/Versions/3.9/bin/2to3-3.9
/usr/local/bin/easy_install-3.9 -> /Library/Frameworks/Python.framework/Versions/3.9/bin/easy_install-3.9
/usr/local/bin/idle3 -> /Library/Frameworks/Python.framework/Versions/3.9/bin/idle3
/usr/local/bin/idle3.9 -> /Library/Frameworks/Python.framework/Versions/3.9/bin/idle3.9
/usr/local/bin/pip3 -> /Library/Frameworks/Python.framework/Versions/3.9/bin/pip3
/usr/local/bin/pip3.9 -> /Library/Frameworks/Python.framework/Versions/3.9/bin/pip3.9
/usr/local/bin/pydoc3 -> /Library/Frameworks/Python.framework/Versions/3.9/bin/pydoc3
/usr/local/bin/pydoc3.9 -> /Library/Frameworks/Python.framework/Versions/3.9/bin/pydoc3.9
/usr/local/bin/python3 -> /Library/Frameworks/Python.framework/Versions/3.9/bin/python3
/usr/local/bin/python3-config -> /Library/Frameworks/Python.framework/Versions/3.9/bin/python3-config
/usr/local/bin/python3.9 -> /Library/Frameworks/Python.framework/Versions/3.9/bin/python3.9
/usr/local/bin/python3.9-config -> /Library/Frameworks/Python.framework/Versions/3.9/bin/python3.9-config
==> /usr/local/Cellar/python@3.9/3.9.1_6/bin/python3 -m ensurepip
==> /usr/local/Cellar/python@3.9/3.9.1_6/bin/pip3 install -v --global-option=--no-user-cfg --install-option=--force --install-option=--single-ver
==> /usr/local/Cellar/python@3.9/3.9.1_6/bin/pip3 wheel --wheel-dir=/usr/local/Cellar/python@3.9/3.9.1_6/Frameworks/Python.framework/Versions/3.9
==> Caveats
Python has been installed as
  /usr/local/bin/python3

Unversioned symlinks `python`, `python-config`, `pip` etc. pointing to
`python3`, `python3-config`, `pip3` etc., respectively, have been installed into
  /usr/local/opt/python@3.9/libexec/bin

You can install Python packages with
  pip3 install <package>
They will install into the site-package directory
  /usr/local/lib/python3.9/site-packages

See: https://docs.brew.sh/Homebrew-and-Python
==> Summary
🍺  /usr/local/Cellar/python@3.9/3.9.1_6: 3,932 files, 65.4MB
==> Installing qemu dependency: glib
==> Pouring glib-2.66.4_1.big_sur.bottle.1.tar.gz
🍺  /usr/local/Cellar/glib/2.66.4_1: 441 files, 20.8MB
==> Installing qemu dependency: gmp
==> Pouring gmp-6.2.1.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/gmp/6.2.1: 21 files, 3.3MB
==> Installing qemu dependency: bdw-gc
==> Pouring bdw-gc-8.0.4_1.big_sur.bottle.1.tar.gz
🍺  /usr/local/Cellar/bdw-gc/8.0.4_1: 69 files, 1.6MB
==> Installing qemu dependency: libtool
==> Pouring libtool-2.4.6_2.big_sur.bottle.tar.gz
==> Caveats
In order to prevent conflicts with Apple's own libtool we have prepended a "g"
so, you have instead: glibtool and glibtoolize.
==> Summary
🍺  /usr/local/Cellar/libtool/2.4.6_2: 71 files, 3.7MB
==> Installing qemu dependency: pkg-config
==> Pouring pkg-config-0.29.2_3.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/pkg-config/0.29.2_3: 11 files, 656.6KB
==> Installing qemu dependency: guile
==> Pouring guile-3.0.5.big_sur.bottle.tar.gz
==> Caveats
Guile libraries can now be installed here:
    Source files: /usr/local/share/guile/site/3.0
  Compiled files: /usr/local/lib/guile/3.0/site-ccache
      Extensions: /usr/local/lib/guile/3.0/extensions

Add the following to your .bashrc or equivalent:
  export GUILE_LOAD_PATH="/usr/local/share/guile/site/3.0"
  export GUILE_LOAD_COMPILED_PATH="/usr/local/lib/guile/3.0/site-ccache"
  export GUILE_SYSTEM_EXTENSIONS_PATH="/usr/local/lib/guile/3.0/extensions"
==> Summary
🍺  /usr/local/Cellar/guile/3.0.5: 834 files, 56.8MB
==> Installing qemu dependency: libtasn1
==> Pouring libtasn1-4.16.0.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/libtasn1/4.16.0: 60 files, 535.7KB
==> Installing qemu dependency: nettle
==> Pouring nettle-3.7.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/nettle/3.7: 89 files, 2.7MB
==> Installing qemu dependency: p11-kit
==> Pouring p11-kit-0.23.22.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/p11-kit/0.23.22: 63 files, 3MB
==> Installing qemu dependency: libevent
==> Pouring libevent-2.1.12.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/libevent/2.1.12: 57 files, 2MB
==> Installing qemu dependency: c-ares
==> Pouring c-ares-1.17.1.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/c-ares/1.17.1: 85 files, 672.3KB
==> Installing qemu dependency: jemalloc
==> Pouring jemalloc-5.2.1_1.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/jemalloc/5.2.1_1: 16 files, 2MB
==> Installing qemu dependency: libev
==> Pouring libev-4.33.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/libev/4.33: 12 files, 483.8KB
==> Installing qemu dependency: nghttp2
==> Pouring nghttp2-1.42.0_1.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/nghttp2/1.42.0_1: 24 files, 2.8MB
==> Installing qemu dependency: unbound
==> Pouring unbound-1.13.0.big_sur.bottle.tar.gz
==> Caveats
To have launchd start unbound now and restart at startup:
  sudo brew services start unbound
==> Summary
🍺  /usr/local/Cellar/unbound/1.13.0: 57 files, 5.5MB
==> Installing qemu dependency: gnutls
==> Pouring gnutls-3.6.15.big_sur.bottle.tar.gz
==> Caveats
If you are going to use the Guile bindings you will need to add the following
to your .bashrc or equivalent in order for Guile to find the TLS certificates
database:
  export GUILE_TLS_CERTIFICATE_DIRECTORY=/usr/local/etc/gnutls/
==> Summary
🍺  /usr/local/Cellar/gnutls/3.6.15: 1,250 files, 11MB
==> Installing qemu dependency: jpeg
==> Pouring jpeg-9d.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/jpeg/9d: 21 files, 953.8KB
==> Installing qemu dependency: libpng
==> Pouring libpng-1.6.37.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/libpng/1.6.37: 27 files, 1.3MB
==> Installing qemu dependency: libssh
==> Pouring libssh-0.9.5_1.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/libssh/0.9.5_1: 23 files, 1.2MB
==> Installing qemu dependency: libusb
==> Pouring libusb-1.0.24.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/libusb/1.0.24: 22 files, 516.4KB
==> Installing qemu dependency: lzo
==> Pouring lzo-2.10.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/lzo/2.10: 31 files, 570.7KB
==> Installing qemu dependency: ncurses
==> Pouring ncurses-6.2.big_sur.bottle.tar.gz
==> Caveats
ncurses is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have ncurses first in your PATH run:
  echo 'export PATH="/usr/local/opt/ncurses/bin:$PATH"' >> ~/.zshrc

For compilers to find ncurses you may need to set:
  export LDFLAGS="-L/usr/local/opt/ncurses/lib"
  export CPPFLAGS="-I/usr/local/opt/ncurses/include"

For pkg-config to find ncurses you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/ncurses/lib/pkgconfig"

==> Summary
🍺  /usr/local/Cellar/ncurses/6.2: 3,913 files, 8.9MB
==> Installing qemu dependency: pixman
==> Pouring pixman-0.40.0.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/pixman/0.40.0: 14 files, 1.3MB
==> Installing qemu dependency: snappy
==> Pouring snappy-1.1.8.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/snappy/1.1.8: 18 files, 158KB
==> Installing qemu dependency: vde
==> Pouring vde-2.3.2_1.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/vde/2.3.2_1: 73 files, 1.4MB
==> Installing qemu
==> Pouring qemu-5.1.0.big_sur.bottle.tar.gz
🍺  /usr/local/Cellar/qemu/5.1.0: 162 files, 490.5MB
==> Caveats
==> libffi
libffi is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

For compilers to find libffi you may need to set:
  export LDFLAGS="-L/usr/local/opt/libffi/lib"
  export CPPFLAGS="-I/usr/local/opt/libffi/include"

For pkg-config to find libffi you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/libffi/lib/pkgconfig"

==> readline
readline is keg-only, which means it was not symlinked into /usr/local,
because macOS provides BSD libedit.

For compilers to find readline you may need to set:
  export LDFLAGS="-L/usr/local/opt/readline/lib"
  export CPPFLAGS="-I/usr/local/opt/readline/include"

For pkg-config to find readline you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/readline/lib/pkgconfig"

==> sqlite
sqlite is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have sqlite first in your PATH run:
  echo 'export PATH="/usr/local/opt/sqlite/bin:$PATH"' >> ~/.zshrc

For compilers to find sqlite you may need to set:
  export LDFLAGS="-L/usr/local/opt/sqlite/lib"
  export CPPFLAGS="-I/usr/local/opt/sqlite/include"

For pkg-config to find sqlite you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/sqlite/lib/pkgconfig"

==> tcl-tk
tcl-tk is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have tcl-tk first in your PATH run:
  echo 'export PATH="/usr/local/opt/tcl-tk/bin:$PATH"' >> ~/.zshrc

For compilers to find tcl-tk you may need to set:
  export LDFLAGS="-L/usr/local/opt/tcl-tk/lib"
  export CPPFLAGS="-I/usr/local/opt/tcl-tk/include"

For pkg-config to find tcl-tk you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/tcl-tk/lib/pkgconfig"

==> python@3.9
Python has been installed as
  /usr/local/bin/python3

Unversioned symlinks `python`, `python-config`, `pip` etc. pointing to
`python3`, `python3-config`, `pip3` etc., respectively, have been installed into
  /usr/local/opt/python@3.9/libexec/bin

You can install Python packages with
  pip3 install <package>
They will install into the site-package directory
  /usr/local/lib/python3.9/site-packages

See: https://docs.brew.sh/Homebrew-and-Python
==> libtool
In order to prevent conflicts with Apple's own libtool we have prepended a "g"
so, you have instead: glibtool and glibtoolize.
==> guile
Guile libraries can now be installed here:
    Source files: /usr/local/share/guile/site/3.0
  Compiled files: /usr/local/lib/guile/3.0/site-ccache
      Extensions: /usr/local/lib/guile/3.0/extensions

Add the following to your .bashrc or equivalent:
  export GUILE_LOAD_PATH="/usr/local/share/guile/site/3.0"
  export GUILE_LOAD_COMPILED_PATH="/usr/local/lib/guile/3.0/site-ccache"
  export GUILE_SYSTEM_EXTENSIONS_PATH="/usr/local/lib/guile/3.0/extensions"
==> unbound
To have launchd start unbound now and restart at startup:
  sudo brew services start unbound
==> gnutls
If you are going to use the Guile bindings you will need to add the following
to your .bashrc or equivalent in order for Guile to find the TLS certificates
database:
  export GUILE_TLS_CERTIFICATE_DIRECTORY=/usr/local/etc/gnutls/
==> ncurses
ncurses is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have ncurses first in your PATH run:
  echo 'export PATH="/usr/local/opt/ncurses/bin:$PATH"' >> ~/.zshrc

For compilers to find ncurses you may need to set:
  export LDFLAGS="-L/usr/local/opt/ncurses/lib"
  export CPPFLAGS="-I/usr/local/opt/ncurses/include"

For pkg-config to find ncurses you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/ncurses/lib/pkgconfig"

[1] 임베디드 OS 개발 프로젝트, 이만우, 인사이트
[2] https://github.com/Homebrew/homebrew-cask/blob/master/Casks/gcc-arm-embedded.rb
[3] 나빌로스 Github project URL: https://github.com/navilera/Navilos
Comments