<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Kernel on cublr's blueprint</title><link>https://b.cublr.com/tags/kernel/</link><description>Recent content in Kernel on cublr's blueprint</description><language>en</language><managingEditor>sparkstar@empas.com (sparkstar)</managingEditor><webMaster>sparkstar@empas.com (sparkstar)</webMaster><lastBuildDate>Tue, 10 May 2022 23:59:59 +0900</lastBuildDate><atom:link href="https://b.cublr.com/tags/kernel/index.xml" rel="self" type="application/rss+xml"/><item><title>오드로이드 u2에 새 버전의 부트로더, 커널, 리눅스 업데이트하기</title><link>https://b.cublr.com/posts/update-newer-kernel-module-header-on-odroid-u2/</link><pubDate>Tue, 10 May 2022 23:59:59 +0900</pubDate><author>sparkstar@empas.com (sparkstar)</author><guid>https://b.cublr.com/posts/update-newer-kernel-module-header-on-odroid-u2/</guid><description>&lt;p&gt;오늘은 어쩌다 한 번씩 비정기적으로 진행하는 &lt;a href="https://www.hardkernel.com/shop/odroid-u3/"&gt;odroid-u2/u3&lt;/a&gt; 보드를 업데이트 하는 과정을 정리해 보려고 한다. 그 이유로는 이걸 워낙 비정기적으로 진행하다 보니 어떻게 했는지 그 과정을 자꾸 잊어버리게 되는 것이다. 그래서 기왕 하는거 여기에 어느 정도 정리하려는 목적이다. 그리고 언제가 될지 모르겠지만 이걸 패키지로 엮어서 우분투 개인 PPA에 올리는 것이 최종 목표. 자동화가 될 때까지 이 포스트는 지속적으로 업데이트하려고 한다.&lt;/p&gt;
&lt;p&gt;odroid-u2/u3에 달성해야 하는 목표는 다음과 같다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://github.com/u-boot/u-boot"&gt;u-boot&lt;/a&gt; 업데이트&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ubuntu.com/blog/ubuntu-22-04-lts-released"&gt;Ubuntu 22.04 LTS&lt;/a&gt;로 업데이트&lt;/li&gt;
&lt;li&gt;22.04 LTS기준 &lt;a href="https://git.launchpad.net/~ubuntu-kernel-stable/+git/jammy"&gt;최신 커널과 모듈, 헤더&lt;/a&gt; 업데이트&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;가 되겠다. 업데이트하는 이유는 마지막으로 지원했던 u2/u3의 커널에서는 &lt;a href="https://www.docker.com/"&gt;docker&lt;/a&gt; 를 지원하지 않았었는데 - 아마 &lt;a href="https://docs.docker.com/engine/install/binaries/#prerequisites"&gt;3.8이 마지막이었던 것으로&lt;/a&gt; 기억한다 - 그래서 커널 업데이트 후 도커를 사용할 수 있게, 그리고 간단한 NFS서버를 만들려고 한다.&lt;/p&gt;
&lt;p&gt;진행 과정을 간단하게 요약한다면 아래와 같다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;새 버전의 u-boot를 컴파일하여 u-boot.bin을 생성&lt;/li&gt;
&lt;li&gt;u-boot.bin을 emmc에 플래싱&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.debian.org/Debootstrap"&gt;debootstrap&lt;/a&gt; 을 사용하여 우분투 rootfs 생성하기&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git.launchpad.net/~ubuntu-kernel-stable/+git/jammy"&gt;ubuntu ppa에서&lt;/a&gt; 커널 소스 받기&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/moby/moby/blob/master/contrib/check-config.sh"&gt;check-config.sh&lt;/a&gt;를 사용하여 도커를 사용할 수 있는 최소한의 커널 플래그와 환경 설정&lt;/li&gt;
&lt;li&gt;커널 컴파일 후 zImage, 헤더, 모듈을 emmc에 복사하기&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;완전 처음부터라면 dtb를 준비하거나 boot.cmd를 컴파일하는 과정도 필요하긴 한데, 이거는 이전에 해둔 것이 있어서 이번에는 같이 진행하지 않았고 기존 것을 그대로 사용한다. 나중에 다시 진행하게 된다면 여기에 다시 업데이트를 해야겠다.&lt;/p&gt;
&lt;p&gt;전체적인 과정이 크게 어려운 것은 아니고 굉장히 귀찮은데 커널 컴파일 같은 작업은 시간을 꽤 소모하기 때문이다. 거기다가 USB UART같은게 없으면 부팅 중 어디서 뭐가 실패했는지 확인할 수 있는 방법이 없어서, 아무래도 시간에 더해 다음과 같은 장비까지 거의 필수적으로 있어야 한다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;USB to UART 컨버터: ssh없이 시리얼 통신을 통해 부팅 상황을 확인하려고 한다.&lt;/li&gt;
&lt;li&gt;emmc 리더기: 파일을 직접 읽거나 써야 한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="images/images_00001.png" alt="board-uart-emmcreader"&gt;&lt;/p&gt;
&lt;p&gt;참고로 데스크탑에 ubuntu 22.04를 처음 설치하고 나서 이상하게도 &lt;code&gt;/dev/ttyUSB0&lt;/code&gt;의 연결이 자꾸 나타났다가 곧바로 사라지는 문제가 생긴다. &lt;a href="https://linux.die.net/man/1/minicom"&gt;minicom&lt;/a&gt;을 사용할 수 없는데 이는 &lt;code&gt;brltty&lt;/code&gt;에 조금 문제가 있는 것 같다. 해결하기 위해 다음의 링크를 참조할 수 있다. 요는 문제가 되는 부분을 지우거나 패키지를 삭제하는 것.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/pop_os/comments/uf54bi/how_to_remove_or_disable_brltty/"&gt;How to remove, or disable, brltty?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;내 USB UART는 CP210x 칩셋이라는데, 그래서 해당 칩셋의 내용을 중 &lt;code&gt;ENV&lt;/code&gt;를 그냥 주석처리하고 재부팅하는 것으로 해결했다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ cat /usr/lib/udev/rules.d/85-brltty.rules
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Device: 10C4:EA60&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Generic Identifier&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Vendor: Cygnal Integrated Products, Inc.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Product: CP210x UART Bridge / myAVR mySmartUSB light&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# BrailleMemo [Pocket]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Seika [Braille Display]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#ENV{PRODUCT}==&amp;#34;10c4/ea60/*&amp;#34;, ATTRS{manufacturer}==&amp;#34;Silicon Labs&amp;#34;, ENV{BRLTTY_BRAILLE_DRIVER}=&amp;#34;sk&amp;#34;, GOTO=&amp;#34;brltty_usb_run&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Device: 10C4:EA80&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Generic Identifier&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Vendor: Cygnal Integrated Products, Inc.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Product: CP210x UART Bridge &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Seika [Note Taker]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#ENV{PRODUCT}==&amp;#34;10c4/ea80/*&amp;#34;, ATTRS{manufacturer}==&amp;#34;Silicon Laboratories&amp;#34;, ENV{BRLTTY_BRAILLE_DRIVER}=&amp;#34;sk&amp;#34;, GOTO=&amp;#34;brltty_usb_run&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;모든 과정은 보드에서 직접 하면 굉장히 편하다. 크로스컴파일 설정이 필요 없고 이유를 알 수 없는 에러도 발생하지 않는다. 다만 이러려면 여분의 보드가 준비가 되어 있어야 하는데다가, 또 성능 문제로 컴파일이 너무나 오래 걸린다. 결국 크로스컴파일이 필요하고, 그래서 작업중에는 아래의 환경 변수가 필요하다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ export ARCH&lt;span style="color:#f92672"&gt;=&lt;/span&gt;arm
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ export CROSS_COMPILE&lt;span style="color:#f92672"&gt;=&lt;/span&gt;arm-linux-gnueabihf-
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;실제로는 더 복잡하겠지만 이 환경 변수를 사용하여 gcc에 프리픽스를 부여해서, 원래 실행해야 할 gcc가 아닌 &lt;code&gt;arm-linux-gnueabihf-gcc&lt;/code&gt;를 호출하도록 하는 방식이 크로스컴파일이다. &lt;a href="https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel"&gt;우분투 커널 컴파일 가이드&lt;/a&gt;에서는 다음과 같은 패키지를 설치해 두어야 커널 컴파일을 진행할 수 있다고 가이드하고 있다. 여기에 함께, 크로스컴파일을 위한 gcc패키지 &lt;code&gt;gcc-arm-linux-gnueabihf&lt;/code&gt;도 추가 설치한다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo apt-get install libncurses-dev gawk flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf gcc-arm-linux-gnueabihf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="dd를-이용한-디스크-백업하기"&gt;dd를 이용한 디스크 백업하기&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;wiki: &lt;a href="https://w.cublr.com/linux/loop-device/"&gt;루프 디바이스&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;wiki: &lt;a href="https://w.cublr.com/linux/mount-file/"&gt;파일 마운트&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;가지고 있는 보드를 먼저 부팅해 보았다. minicom으로 확인해 보니 아래 메시지가 출력되며 정상적으로 부팅된 것을 확인하였다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;U-Boot 2020.10 &lt;span style="color:#f92672"&gt;(&lt;/span&gt;Dec &lt;span style="color:#ae81ff"&gt;07&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2020&lt;/span&gt; - 04:58:42 +0000&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;CPU: Exynos4412 @ &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; GHz
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Model: Odroid based on Exynos4412
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Type: u3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;DRAM: &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; GiB
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;LDO20@VDDQ_EMMC_1.8V: set &lt;span style="color:#ae81ff"&gt;1800000&lt;/span&gt; uV; enabling
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Kernel image @ 0x40008000 &lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0x000000 - 0x7c8510 &lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;## Flattened Device Tree blob at 41f00000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Booting using the fdt blob at 0x41f00000
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Using Device Tree in place at 41f00000, end 41f10fff
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Starting kernel ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Booting Linux on physical CPU 0xa00
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Linux version 5.4.80-gc32b3e142fe9 &lt;span style="color:#f92672"&gt;(&lt;/span&gt;cublr@cublr-j5005&lt;span style="color:#f92672"&gt;)&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;gcc version 7.5.0 &lt;span style="color:#f92672"&gt;(&lt;/span&gt;Ubuntu/Linaro 7.5.0-3ubuntu1~18.04&lt;span style="color:#f92672"&gt;))&lt;/span&gt; &lt;span style="color:#75715e"&gt;#1 SMP PREEMPT Mon Dec 28 22:01:48 KST 2020 ()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; CPU: ARMv7 Processor &lt;span style="color:#f92672"&gt;[&lt;/span&gt;413fc090&lt;span style="color:#f92672"&gt;]&lt;/span&gt; revision &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;ARMv7&lt;span style="color:#f92672"&gt;)&lt;/span&gt;, cr&lt;span style="color:#f92672"&gt;=&lt;/span&gt;10c5387d
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;See &lt;span style="color:#e6db74"&gt;&amp;#39;systemctl status systemd-resolved.service&amp;#39;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; details.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Stopped Network Time Synchronization.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;FAILED&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Failed to start Network Time Synchronization.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;See &lt;span style="color:#e6db74"&gt;&amp;#39;systemctl status systemd-timesyncd.service&amp;#39;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; details.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Ubuntu 20.04 LTS cublr-j5005 ttySAC1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cublr-j5005 login:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;정상적으로 부팅되는 것을 확인했으니 작업 진행 전 이 디스크 상태를 완전히 백업하고 싶다. 문제가 생기면 여기로 다시 복구하고 싶은 것이다.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://man7.org/linux/man-pages/man1/dd.1.html"&gt;dd&lt;/a&gt;를 사용하면 디스크를 통째로 덤프할 수 있는데(dd는 dump disk같은 것 아닐까? 정확하진 않음), 이를 통해 컴파일 후 부팅이 실패하는 상황이 발생한다면 덤프를 사용하여 이전 상태로 돌아갈 수 있다. 특히 좋은 것은 정상적인 하나의 상태를 만들었다면 다른 곳에 이를 계속 복사하기만 해도 된다. 나는 odroid-u3가 7개 있어서, 7대 모두 설치를 진행하지 않고 하나의 보드에서 부팅에 성공하면 dd로 덤프 후 그 결과를 다시 나머지 보드에 덮어씌운다.&lt;/p&gt;
&lt;p&gt;dd는 덤프를 뜨고 씌우는 목적으로 쓴다기보다, 원하는 바이트만큼 읽어서 if-&amp;gt;of로 복사하는 역할을 한다. 이 과정 사이에 다양한 작업, 이를테면 변환 같은 것도 할 수 있지만 그렇게 쓰는 것은 본 적이 없고 보통 &lt;code&gt;/dev/zero&lt;/code&gt;나 &lt;code&gt;/dev/urandom&lt;/code&gt;을 읽어서 어딘가에 쓴다거나 하는 것은 꽤 본 것 같다.&lt;/p&gt;
&lt;p&gt;어쨌든 백업 전, fdisk를 통해 emmc의 파티션이 어떻게 설정되어 있는지를 본다면&amp;hellip;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ fdisk -l
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Disk /dev/sdc: 58.24 GiB, &lt;span style="color:#ae81ff"&gt;62537072640&lt;/span&gt; bytes, &lt;span style="color:#ae81ff"&gt;122142720&lt;/span&gt; sectors
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Disk model: MassStorageClass
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Units: sectors of &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; * 512 &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;512&lt;/span&gt; bytes
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Sector size &lt;span style="color:#f92672"&gt;(&lt;/span&gt;logical/physical&lt;span style="color:#f92672"&gt;)&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;512&lt;/span&gt; bytes / &lt;span style="color:#ae81ff"&gt;512&lt;/span&gt; bytes
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I/O size &lt;span style="color:#f92672"&gt;(&lt;/span&gt;minimum/optimal&lt;span style="color:#f92672"&gt;)&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;512&lt;/span&gt; bytes / &lt;span style="color:#ae81ff"&gt;512&lt;/span&gt; bytes
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Disklabel type: dos
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Disk identifier: 0xb6896738
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Device Boot Start End Sectors Size Id Type
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/dev/sdc1 * &lt;span style="color:#ae81ff"&gt;3072&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;266239&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;263168&lt;/span&gt; 128.5M &lt;span style="color:#ae81ff"&gt;6&lt;/span&gt; FAT16
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/dev/sdc2 * &lt;span style="color:#ae81ff"&gt;266240&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;17043455&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;16777216&lt;/span&gt; 8G &lt;span style="color:#ae81ff"&gt;83&lt;/span&gt; Linux
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/dev/sdc3 &lt;span style="color:#ae81ff"&gt;17043456&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;122142719&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;105099264&lt;/span&gt; 50.1G &lt;span style="color:#ae81ff"&gt;83&lt;/span&gt; Linux
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;이 파티션의 사이즈는 odroid-u2/u3 보드에서 고정되어 있는데, 이 내용은 &lt;a href="https://wiki.odroid.com/old_product/odroid-x_u_q/odroid_u3/u3_partition_table#ubuntu_partition_table"&gt;여기서&lt;/a&gt; 확인할 수 있다. 여기에 표로 옮기면 대략 다음과 같다. odroid-u3관련 내용이지만 u2도 똑같다.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area Name&lt;/th&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;From(sector #1)&lt;/th&gt;
&lt;th&gt;To(Sector #)&lt;/th&gt;
&lt;th&gt;Partition Name&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Partition table / MBR&lt;/td&gt;
&lt;td&gt;512&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;fwbl1&lt;/td&gt;
&lt;td&gt;15KB&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bl2&lt;/td&gt;
&lt;td&gt;16KB&lt;/td&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;td&gt;62&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;u-boot&lt;/td&gt;
&lt;td&gt;328KB&lt;/td&gt;
&lt;td&gt;63&lt;/td&gt;
&lt;td&gt;718&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TrustZone SW&lt;/td&gt;
&lt;td&gt;256KB&lt;/td&gt;
&lt;td&gt;719&lt;/td&gt;
&lt;td&gt;1230&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;u-boot environment&lt;/td&gt;
&lt;td&gt;16KB&lt;/td&gt;
&lt;td&gt;1231&lt;/td&gt;
&lt;td&gt;1262&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FAT16 for boot&lt;/td&gt;
&lt;td&gt;129M&lt;/td&gt;
&lt;td&gt;3072&lt;/td&gt;
&lt;td&gt;266239&lt;/td&gt;
&lt;td&gt;mmcblk0p1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EXT4 for root file system&lt;/td&gt;
&lt;td&gt;Up to 64GB&lt;/td&gt;
&lt;td&gt;266240&lt;/td&gt;
&lt;td&gt;remaining blocks&lt;/td&gt;
&lt;td&gt;mmcblk0p2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;대략 이런 형태인데, &lt;code&gt;fwbl1&lt;/code&gt;, &lt;code&gt;bl2&lt;/code&gt;, &lt;code&gt;u-boot&lt;/code&gt;, &lt;code&gt;TrustZone SW&lt;/code&gt;는 당장 신경쓰지 않아도 된다. 유저가 어찌할 수 있는 부분이 아니고 그냥 보드에 지정되어 있다. FAT16과 그 아래 EXT4 루트 파일 시스템만 확인하면 된다. emmc가 이런 파티션으로 구성되어 있지 않다면 gparted나 fdisk 같은 프로그램을 통해 이런 모양으로 만들어주면 된다.&lt;/p&gt;
&lt;p&gt;dd를 사용하여 emmc &lt;code&gt;/dev/sdc&lt;/code&gt;를 &lt;code&gt;backup.img&lt;/code&gt;로 덤프한다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;dd if=/dev/sdc of=/backup.img bs=1M count=8322 status=progress&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;fdisk로 확인한 섹터 크기는 512 bytes이며, /dev/sdc2의 &lt;code&gt;End&lt;/code&gt; 섹터는 17043455이므로, 512*17043455, 8726248960바이트의 크기를 가진다. 이 크기만큼만 덤프하면 디스크를 그대로 덤프할 수 있는데, 해당 메가바이트로 환산하면 8322 MB이므로, bs를 1M, count는 8322로 잡아 진행한다(8322M * 1M). bs 1M씩 8322번 복사한다는 의미다. 덤프 중에 진행상황이 표시되지 않는다면 마냥 쳐다보고 있기가 괴로우므로 &lt;code&gt;progress&lt;/code&gt;옵션을 함께 지정하자.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo dd &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/dev/sdc of&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/home/cublr/backup.img bs&lt;span style="color:#f92672"&gt;=&lt;/span&gt;1M count&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;8322&lt;/span&gt; status&lt;span style="color:#f92672"&gt;=&lt;/span&gt;progress
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;8704229376&lt;/span&gt; bytes &lt;span style="color:#f92672"&gt;(&lt;/span&gt;8.7 GB, 8.1 GiB&lt;span style="color:#f92672"&gt;)&lt;/span&gt; copied, &lt;span style="color:#ae81ff"&gt;181&lt;/span&gt; s, 48.1 MB/s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;8322+0 레코드 들어옴
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;8322+0 레코드 나감
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;8726249472&lt;/span&gt; bytes &lt;span style="color:#f92672"&gt;(&lt;/span&gt;8.7 GB, 8.1 GiB&lt;span style="color:#f92672"&gt;)&lt;/span&gt; copied, 181.556 s, 48.1 MB/s&lt;span style="color:#e6db74"&gt;```&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;약간의 시간이 걸려 다음과 같이 완료되었다. 이 덤프된 파일은 fdisk를 통해 정보를 확인할 수 있는데 다음과 같은 출력을 낸다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ fdisk -l ../backup.img
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Disk ../backup.img: 8.13 GiB, &lt;span style="color:#ae81ff"&gt;8726249472&lt;/span&gt; bytes, &lt;span style="color:#ae81ff"&gt;17043456&lt;/span&gt; sectors
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Units: sectors of &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; * 512 &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;512&lt;/span&gt; bytes
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Sector size &lt;span style="color:#f92672"&gt;(&lt;/span&gt;logical/physical&lt;span style="color:#f92672"&gt;)&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;512&lt;/span&gt; bytes / &lt;span style="color:#ae81ff"&gt;512&lt;/span&gt; bytes
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I/O size &lt;span style="color:#f92672"&gt;(&lt;/span&gt;minimum/optimal&lt;span style="color:#f92672"&gt;)&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;512&lt;/span&gt; bytes / &lt;span style="color:#ae81ff"&gt;512&lt;/span&gt; bytes
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Disklabel type: dos
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Disk identifier: 0xb6896738
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Device Boot Start End Sectors Size Id Type
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;backup.img1 * &lt;span style="color:#ae81ff"&gt;3072&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;266239&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;263168&lt;/span&gt; 128.5M &lt;span style="color:#ae81ff"&gt;6&lt;/span&gt; FAT16
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;backup.img2 * &lt;span style="color:#ae81ff"&gt;266240&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;17043455&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;16777216&lt;/span&gt; 8G &lt;span style="color:#ae81ff"&gt;83&lt;/span&gt; Linux
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;backup.img3 &lt;span style="color:#ae81ff"&gt;17043456&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;122142719&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;105099264&lt;/span&gt; 50.1G &lt;span style="color:#ae81ff"&gt;83&lt;/span&gt; Linux
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;내부적으로는 backup.img1~3의 이름을 가지는가 보다. 어쨌든 이를 루프 디바이스로써 리눅스 시스템에 마운트할 수 있는데, 마운트 옵션 중 &lt;code&gt;offset&lt;/code&gt;을 이용하면 원하는 파티션만을 마운트할 수 있다. 시작 파티션이 &lt;code&gt;266240&lt;/code&gt;일 때 이를 섹터 크기를 사용하여 바이트로 환산하면 136314880(266240 * 512 = 136314880)이다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ mkdir tmpmount
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo mount -o loop,offset&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;136314880&lt;/span&gt; backup.img ./tmpmount
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ cd tmpmount
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ls -la
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;합계 &lt;span style="color:#ae81ff"&gt;68&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;drwxrwxr-x &lt;span style="color:#ae81ff"&gt;17&lt;/span&gt; cublr cublr &lt;span style="color:#ae81ff"&gt;4096&lt;/span&gt; 5월 &lt;span style="color:#ae81ff"&gt;7&lt;/span&gt; 20:02 .
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;drwxr-x--- &lt;span style="color:#ae81ff"&gt;26&lt;/span&gt; cublr cublr &lt;span style="color:#ae81ff"&gt;4096&lt;/span&gt; 5월 &lt;span style="color:#ae81ff"&gt;8&lt;/span&gt; 19:03 ..
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lrwxrwxrwx &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; root root &lt;span style="color:#ae81ff"&gt;7&lt;/span&gt; 5월 &lt;span style="color:#ae81ff"&gt;7&lt;/span&gt; 19:36 bin -&amp;gt; usr/bin
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;drwxr-xr-x &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; root root &lt;span style="color:#ae81ff"&gt;4096&lt;/span&gt; 5월 &lt;span style="color:#ae81ff"&gt;7&lt;/span&gt; 20:02 boot
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;drwxr-xr-x &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt; root root &lt;span style="color:#ae81ff"&gt;4096&lt;/span&gt; 5월 &lt;span style="color:#ae81ff"&gt;7&lt;/span&gt; 19:36 dev
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;drwxr-xr-x &lt;span style="color:#ae81ff"&gt;63&lt;/span&gt; root root &lt;span style="color:#ae81ff"&gt;4096&lt;/span&gt; 5월 &lt;span style="color:#ae81ff"&gt;7&lt;/span&gt; 19:55 etc
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;drwxr-xr-x &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt; root root &lt;span style="color:#ae81ff"&gt;4096&lt;/span&gt; 5월 &lt;span style="color:#ae81ff"&gt;7&lt;/span&gt; 19:55 home
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lrwxrwxrwx &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; root root &lt;span style="color:#ae81ff"&gt;7&lt;/span&gt; 5월 &lt;span style="color:#ae81ff"&gt;7&lt;/span&gt; 19:36 lib -&amp;gt; usr/lib
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;drwxr-xr-x &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt; root root &lt;span style="color:#ae81ff"&gt;4096&lt;/span&gt; 4월 &lt;span style="color:#ae81ff"&gt;8&lt;/span&gt; 04:28 media
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;drwxr-xr-x &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt; root root &lt;span style="color:#ae81ff"&gt;4096&lt;/span&gt; 4월 &lt;span style="color:#ae81ff"&gt;8&lt;/span&gt; 04:28 mnt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;drwxr-xr-x &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; root root &lt;span style="color:#ae81ff"&gt;4096&lt;/span&gt; 5월 &lt;span style="color:#ae81ff"&gt;7&lt;/span&gt; 19:36 opt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;확인 결과 디스크가 잘 덤프되었고 데이터도 잘 백업된 것 같다.&lt;/p&gt;
&lt;h3 id="u-boot-컴파일"&gt;u-boot 컴파일&lt;/h3&gt;
&lt;p&gt;이제 부트 로더 &lt;a href="https://github.com/u-boot/u-boot"&gt;u-boot&lt;/a&gt;를 업데이트해 보자. u-boot의 컴파일은 간단하다. 후술할 커널 컴파일과 마찬가지로 &lt;code&gt;defconfig&lt;/code&gt;를 통해 적당한 초기 플래그를 생성한 후, 약간의 수정을 통해 플래그를 완성하고 이를 그대로 컴파일하면 된다. 오드로이드 보드에 대한 defconfig는 u-boot의 &lt;a href="https://github.com/u-boot/u-boot/blob/master/configs/odroid_defconfig"&gt;configs&lt;/a&gt;에 이미 만들어져 있으므로 이를 그대로 사용한다. 사실 u-boot는 딱히 초기 설정 이외 뭔가를 하지 않아도 잘 부팅되므로 그냥 그대로 쓰기로 했다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ git clone https://github.com/u-boot/u-boot.git --depth&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; --branch v2022.04
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;u-boot&amp;#39;&lt;/span&gt;에 복제합니다...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;remote: Enumerating objects: 19764, &lt;span style="color:#66d9ef"&gt;done&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;remote: Counting objects: 100% &lt;span style="color:#f92672"&gt;(&lt;/span&gt;19764/19764&lt;span style="color:#f92672"&gt;)&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;done&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;remote: Compressing objects: 100% &lt;span style="color:#f92672"&gt;(&lt;/span&gt;17035/17035&lt;span style="color:#f92672"&gt;)&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;done&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;remote: Total &lt;span style="color:#ae81ff"&gt;19764&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;delta 3494&lt;span style="color:#f92672"&gt;)&lt;/span&gt;, reused &lt;span style="color:#ae81ff"&gt;7830&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;delta 2385&lt;span style="color:#f92672"&gt;)&lt;/span&gt;, pack-reused &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;오브젝트를 받는 중: 100% &lt;span style="color:#f92672"&gt;(&lt;/span&gt;19764/19764&lt;span style="color:#f92672"&gt;)&lt;/span&gt;, 25.60 MiB | 9.57 MiB/s, 완료.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;델타를 알아내는 중: 100% &lt;span style="color:#f92672"&gt;(&lt;/span&gt;3494/3494&lt;span style="color:#f92672"&gt;)&lt;/span&gt;, 완료.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Note: switching to &lt;span style="color:#e6db74"&gt;&amp;#39;e4b6ebd3de982ae7185dbf689a030e73fd06e0d2&amp;#39;&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;You are in &lt;span style="color:#e6db74"&gt;&amp;#39;detached HEAD&amp;#39;&lt;/span&gt; state. You can look around, make experimental
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;changes and commit them, and you can discard any commits you make in this
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;state without impacting any branches by switching back to a branch.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;If you want to create a new branch to retain commits you create, you may
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;do&lt;/span&gt; so &lt;span style="color:#f92672"&gt;(&lt;/span&gt;now or later&lt;span style="color:#f92672"&gt;)&lt;/span&gt; by using -c with the switch command. Example:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; git switch -c &amp;lt;new-branch-name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Or undo this operation with:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; git switch -
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Turn off this advice by setting config variable advice.detachedHead to false
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;코드를 다운로드 후 odroid용으로 컴파일하면 대략 다음과 같은 과정을 거친다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ make odroid_defconfig &lt;span style="color:#f92672"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; HOSTCC scripts/basic/fixdep
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; HOSTCC scripts/kconfig/conf.o
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; YACC scripts/kconfig/zconf.tab.c
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LEX scripts/kconfig/zconf.lex.c
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; HOSTCC scripts/kconfig/zconf.tab.o
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; HOSTLD scripts/kconfig/conf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ make -j8
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;scripts/kconfig/conf --syncconfig Kconfig
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; UPD include/config.h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CFG u-boot.cfg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; GEN include/autoconf.mk.dep
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; DTC arch/arm/dts/exynos4412-odroid.dtb
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SHIPPED dts/dt.dtb
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CAT u-boot-dtb.bin
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; COPY u-boot.dtb
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; COPY u-boot.bin
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;원하는 결과인 u-boot.bin이 정상적으로 만들어졌다. 이제 이를 emmc에 플래싱하면 되는데, 이상하게 직접 하면 계속 잘 되지 않아서 보통 &lt;a href="https://forum.odroid.com/viewtopic.php?t=969"&gt;emmc recovery tool&lt;/a&gt;을 통해 업데이트하였다. 위 파티션 내용에서 설명한, 섹터 63부터 시작하는 곳에 u-boot.bin을 플래싱하면 되는데, 이게 이상하게 직접 dd를 통해 플래싱하면 아무런 효과가 없고 꼭 emmc recovery tool을 사용해야만 업데이트가 된다. 아마 부팅이 완료된 시스템에서는 u-boot에서 이 영역을 readonly 처리를 하는 것이 아닐까 하는데, 이것만 해결하면 자동화할 수 있을 것 같다.&lt;/p&gt;
&lt;p&gt;emmc recovery tool은 다음과 같은 디렉토리/파일 구조를 가진다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ tree
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── boot.ini
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└── update
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ├── bl1.bin
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ├── bl2.bin
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ├── sd_fusing.sh
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ├── tzsw.bin
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; └── u-boot.bin
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; directory, &lt;span style="color:#ae81ff"&gt;6&lt;/span&gt; files
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;이를 emmc가 아니라 sd카드에 플래싱하고 여기서 새롭게 컴파일한 u-boot.bin을 기존의 u-boot.bin과 교체한다. 원래대로라면 recovery tool의 u-boot.bin이 업데이트되는데, 업데이트를 새로 만든 u-boot.bin으로 대신 진행하려 하기 때문이다. emmc를 탈착한 상태에서 이 sd카드로만 부팅 후 잠시 기다렸다가 emmc를 장착하고, 또 잠시 기다렸다가 PC와 오드로이드를 USB케이블로 연결하면 플래싱이 시작된다.(전원이 들어오는지만 보는 것 같다. 설명도 트리거로 삼는다고만 되어 있다.)&lt;/p&gt;
&lt;p&gt;USB UART를 사용해서 확인하면 위 내용이 다음과 같이 진행된다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;U-Boot 2010.12-svn &lt;span style="color:#f92672"&gt;(&lt;/span&gt;May &lt;span style="color:#ae81ff"&gt;12&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2014&lt;/span&gt; - 15:05:46&lt;span style="color:#f92672"&gt;)&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; Exynox4412
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;CPU: S5PC220 &lt;span style="color:#f92672"&gt;[&lt;/span&gt;Samsung SOC on SMP Platform Base on ARM CortexA9&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;APLL &lt;span style="color:#f92672"&gt;=&lt;/span&gt; 1000MHz, MPLL &lt;span style="color:#f92672"&gt;=&lt;/span&gt; 880MHz
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;DRAM: &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; GiB
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;PMIC VERSION : 0x00, CHIP REV : &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;TrustZone Enabled BSP
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;BL1 version: &lt;span style="color:#ae81ff"&gt;20121128&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Checking Boot Mode ... SDMMC
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MMC Device 0: &lt;span style="color:#ae81ff"&gt;30528&lt;/span&gt; MB
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MMC Device &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; not found
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;*** Warning - using default environment
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;USB3503 NINT &lt;span style="color:#f92672"&gt;=&lt;/span&gt; OUTPUT LOW!
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ModeKey Check... run normal_boot
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;No ethernet found.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Hit any key to stop autoboot: &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;do_fat_cfgload : cmd &lt;span style="color:#f92672"&gt;=&lt;/span&gt; fatload mmc 0:1 0x41000000 boot.ini
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;reading boot.ini
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;2701&lt;/span&gt; bytes read in &lt;span style="color:#ae81ff"&gt;25&lt;/span&gt; ms &lt;span style="color:#f92672"&gt;(&lt;/span&gt;105.5 KiB/s&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Find boot.ini file from FAT Area!!
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; setenv flag_true &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; setenv flag_false &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; setenv system_memory_end &lt;span style="color:#ae81ff"&gt;80000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; setenv emmc_update_from_sdmmc &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; setenv emmc_wait &lt;span style="color:#e6db74"&gt;&amp;#39;if itest.s ${emmc_update_from_sdmmc} -eq ${flag_true}; then wait_usb_trigger; fi;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; run emmc_wait
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Insert eMMC Module before usb connect....
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Trigger Detected... read boot.scr form SDMMC &amp;amp; boot
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; setenv movi_init &lt;span style="color:#e6db74"&gt;&amp;#39;if itest.s ${emmc_update_from_sdmmc} -eq ${flag_true}; then movi init 1; fi;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; run movi_init
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;emmc reset...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;REVISION: 2.0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Manufacture ID 0x11 &lt;span style="color:#f92672"&gt;[&lt;/span&gt; 59640MB &lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;NAME: S5P_MSHC4
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Device: S5P_MSHC4
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Manufacturer ID: &lt;span style="color:#ae81ff"&gt;11&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;OEM: &lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Name: 064G9
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Tran Speed: &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Rd Block Len: &lt;span style="color:#ae81ff"&gt;512&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MMC version 4.0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;High Capacity: Yes
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Size: 0MB &lt;span style="color:#f92672"&gt;(&lt;/span&gt;block: 59640&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Bus Width: 8-bit DDR
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Boot Partition Size: &lt;span style="color:#ae81ff"&gt;4096&lt;/span&gt; KB
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; setenv update_device_num &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; setenv load_device_num &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; setenv load_partition_num &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; setenv emmc_open &lt;span style="color:#e6db74"&gt;&amp;#39;if itest.s ${emmc_update_from_sdmmc} -eq ${flag_true}; then emmc open 1; fi;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; run emmc_open;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;eMMC OPEN Success.!!
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; !!!Notice!!!
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;!You must close eMMC boot Partition after all image writing!
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;!eMMC boot partition has continuity at image writing time.!
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;!So, Do not close boot partition, Before, all images is written.!
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; fatload mmc 0:1 &lt;span style="color:#ae81ff"&gt;40008000&lt;/span&gt; update/bl1.bin;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;reading update/bl1.bin
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;15360&lt;/span&gt; bytes read in &lt;span style="color:#ae81ff"&gt;29&lt;/span&gt; ms &lt;span style="color:#f92672"&gt;(&lt;/span&gt;516.6 KiB/s&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; setenv bl1_write &lt;span style="color:#e6db74"&gt;&amp;#39;if itest.s ${emmc_update_from_sdmmc} -eq ${flag_true}; then movi w z f 1 40008000; else movi w f 1 40008000; fi;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; run bl1_write
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;writing FWBL1 ..device &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; Start 0, Count &lt;span style="color:#ae81ff"&gt;30&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MMC write: dev &lt;span style="color:#75715e"&gt;# 1, block # 0, count 30 ... 30 blocks written: OK&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;completed
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; fatload mmc 0:1 &lt;span style="color:#ae81ff"&gt;40008000&lt;/span&gt; update/bl2.bin;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;reading update/bl2.bin
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;14592&lt;/span&gt; bytes read in &lt;span style="color:#ae81ff"&gt;32&lt;/span&gt; ms &lt;span style="color:#f92672"&gt;(&lt;/span&gt;445.3 KiB/s&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; setenv bl2_write &lt;span style="color:#e6db74"&gt;&amp;#39;if itest.s ${emmc_update_from_sdmmc} -eq ${flag_true}; then movi w z b 1 40008000; else movi w b 1 40008000; fi;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; run bl2_write
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;writing BL2 ..device &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; Start 30, Count &lt;span style="color:#ae81ff"&gt;32&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MMC write: dev &lt;span style="color:#75715e"&gt;# 1, block # 30, count 32 ... 32 blocks written: OK&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;completed
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; fatload mmc 0:1 &lt;span style="color:#ae81ff"&gt;40008000&lt;/span&gt; update/u-boot.bin;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;reading update/u-boot.bin
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;489728&lt;/span&gt; bytes read in &lt;span style="color:#ae81ff"&gt;42&lt;/span&gt; ms &lt;span style="color:#f92672"&gt;(&lt;/span&gt;11.1 MiB/s&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; setenv uboot_write &lt;span style="color:#e6db74"&gt;&amp;#39;if itest.s ${emmc_update_from_sdmmc} -eq ${flag_true}; then movi w z u 1 40008000; else movi w u 1 40008000; fi;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; run uboot_write
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;writing bootloader..device &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; Start 62, Count &lt;span style="color:#ae81ff"&gt;2048&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MMC write: dev &lt;span style="color:#75715e"&gt;# 1, block # 62, count 2048 ... 2048 blocks written: OK&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;completed
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; fatload mmc 0:1 &lt;span style="color:#ae81ff"&gt;40008000&lt;/span&gt; update/tzsw.bin;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;reading update/tzsw.bin
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;159744&lt;/span&gt; bytes read in &lt;span style="color:#ae81ff"&gt;28&lt;/span&gt; ms &lt;span style="color:#f92672"&gt;(&lt;/span&gt;5.4 MiB/s&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; setenv tzsw_write &lt;span style="color:#e6db74"&gt;&amp;#39;if itest.s ${emmc_update_from_sdmmc} -eq ${flag_true}; then movi w z t 1 40008000; else movi w t 1 40008000; fi;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; run tzsw_write
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;writing &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; TrustZone S/W.. Start 2110, Count &lt;span style="color:#ae81ff"&gt;312&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MMC write: dev &lt;span style="color:#75715e"&gt;# 1, block # 2110, count 312 ... 312 blocks written: OK&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;completed
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; setenv emmc_close &lt;span style="color:#e6db74"&gt;&amp;#39;if itest.s ${emmc_update_from_sdmmc} -eq ${flag_true}; then emmc close 1; fi;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; run emmc_close;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;eMMC CLOSE Success.!!
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot.ini command &lt;span style="color:#f92672"&gt;=&lt;/span&gt; mmc write &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; 0x40008000 0x977 0x20;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MMC write: dev &lt;span style="color:#75715e"&gt;# 1, block # 2423, count 32 ... 32 blocks written: OK&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;이제 emmc를 사용하여 부팅하면 아래와 같이 새 버전의 u-boot로 부팅되는 것을 확인할 수 있다. 처음에는 버전 &lt;code&gt;2022.04&lt;/code&gt;으로 했는데 조금 진행하다 다시 rc버전으로 올려서, 위에서 설명한 내용과는 출력된 버전이 다르다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;U-Boot 2022.07-rc1-00291-g145921bdbd &lt;span style="color:#f92672"&gt;(&lt;/span&gt;May &lt;span style="color:#ae81ff"&gt;07&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2022&lt;/span&gt; - 18:10:11 +0900&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;CPU: Exynos4412 @ &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; GHz
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Model: Odroid based on Exynos4412
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Type: u3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;DRAM: &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; GiB
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Core: &lt;span style="color:#ae81ff"&gt;101&lt;/span&gt; devices, &lt;span style="color:#ae81ff"&gt;12&lt;/span&gt; uclasses, devicetree: separate
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;LDO20@VDDQ_EMMC_1.8V: set &lt;span style="color:#ae81ff"&gt;1800000&lt;/span&gt; uV; enabling
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;LDO22@VDDQ_EMMC_2.8V: set &lt;span style="color:#ae81ff"&gt;2800000&lt;/span&gt; uV; enabling
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;LDO21@TFLASH_2.8V: set &lt;span style="color:#ae81ff"&gt;2800000&lt;/span&gt; uV; enabling
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MMC: sdhci@12530000 - probe failed: -19
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Loading Environment from MMC... *** Warning - bad CRC, using default environment
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Boot device: MMC&lt;span style="color:#f92672"&gt;(&lt;/span&gt;0&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Net: No ethernet found.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Hit any key to stop autoboot: &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;no mmc device at slot &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;switch to partitions &lt;span style="color:#75715e"&gt;#0, OK&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mmc0&lt;span style="color:#f92672"&gt;(&lt;/span&gt;part 0&lt;span style="color:#f92672"&gt;)&lt;/span&gt; is current device
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;** No partition table - mmc &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; **
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Couldn&lt;span style="color:#960050;background-color:#1e0010"&gt;&amp;#39;&lt;/span&gt;t find partition mmc 0:1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="debootstrap을-사용한-rootfs-생성"&gt;debootstrap을 사용한 rootfs 생성&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://wiki.debian.org/Debootstrap"&gt;debootstrap&lt;/a&gt;을 사용하면 데비안 기반 리눅스, 우분투 등의 시스템 파일 상태를 가지는 rootfs를 만들 수 있다. 물론 커널이나 다른 기타 데이터는 직접 준비해야 한다. 이 또한 데스크탑에서 진행할 것이므로, armhf용 어플리케이션을 실행하기 위해 &lt;code&gt;qemu-arm-static&lt;/code&gt;이 필요하다. 이는 패키지 &lt;code&gt;qemu-user-static&lt;/code&gt;에 포함되어 있다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get install -y qemu-user-static binfmt-support debootstrap
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;한국에서 armhf용 우분투 패키지를 제공하는 곳은 &lt;code&gt;kr.ports.ubuntu.com&lt;/code&gt; 인데, 이게 ip를 찍어 보면 영국에서 제공하고 있는 것 같다. 그래서 설치 속도가 그다지 빠르지는 않다&amp;hellip; 어쨌든 새 우분투의 코드네임은 &lt;code&gt;jammy jellyfish&lt;/code&gt;이므로 아래와 같은 형태로 debootstrap을 진행할 수 있다.&lt;/p&gt;
&lt;p&gt;debootstrap은 크게 두 스텝으로 나뉜다. 첫 스텝은 패키지를 다운로드하기만 하는 것 같고, 두 번째 스텝으로 패키지를 설치하는 과정을 거치는 것 같다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo debootstrap --foreign --arch&lt;span style="color:#f92672"&gt;=&lt;/span&gt;armhf jammy . http://kr.ports.ubuntu.com/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Retrieving InRelease
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Checking Release signature
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Valid Release signature &lt;span style="color:#f92672"&gt;(&lt;/span&gt;key id F6ECB3762474EDA9D21B7022871920D1991BC93C&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Retrieving Packages
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Validating Packages
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Resolving dependencies of required packages...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Resolving dependencies of base packages...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Checking component main on http://kr.ports.ubuntu.com...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Retrieving adduser 3.118ubuntu5
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Validating adduser 3.118ubuntu5
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Retrieving apt 2.4.5
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Validating apt 2.4.5
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Retrieving apt-utils 2.4.5
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Validating apt-utils 2.4.5
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Retrieving base-files 12ubuntu4
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Validating base-files 12ubuntu4
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Retrieving base-passwd 3.5.52build1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Validating base-passwd 3.5.52build1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Retrieving bash 5.1-6ubuntu1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Validating bash 5.1-6ubuntu1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Retrieving bsdutils 1:2.37.2-4ubuntu3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;두 번째 스텝은 다음과 같이 진행된다. &lt;code&gt;chroot&lt;/code&gt;를 통해 새로운 루트 위치를 debootstrap가 생성한 디렉토리가 되도록 조정한다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo chroot . debootstrap/debootstrap --second-stage --verbose
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Installing core packages...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Unpacking required packages...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Unpacking base-files...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Unpacking base-passwd...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Unpacking bash...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Unpacking bsdutils...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Unpacking coreutils...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Unpacking dash...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Unpacking debconf...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Unpacking debianutils...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Unpacking diffutils...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Unpacking dpkg...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Configuring the base system...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Configuring media-types...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Configuring libtext-iconv-perl...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Configuring libtext-charwidth-perl...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Configuring init...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Configuring xdg-user-dirs...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Configuring libyaml-0-2:armhf...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Configuring libglib2.0-0:armhf...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Configuring distro-info-data...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Configuring libestr0:armhf...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Configuring libfastjson4:armhf...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Configuring libsqlite3-0:armhf...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Configuring cron...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Configuring python3-yaml...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Configuring netplan.io...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Configuring ubuntu-advantage-tools...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Configuring networkd-dispatcher...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Configuring kbd...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Configuring console-setup-linux...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Configuring console-setup...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Configuring ubuntu-minimal...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Configuring libc-bin...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Configuring ca-certificates...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;I: Base system installed successfully.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;필요한 아주 최소의 패키지가 설치되었으므로 여기에 아주 기본적인 설정을 진행하려고 한다. 예를 들어 새 유저 &lt;code&gt;ubuntu&lt;/code&gt;를 추가하거나, 최초 부팅시 필요한 파티션을 마운트하도록 fstab을 수정하거나 하는 작업이 되겠다. 아래 내용을 통해 debootstrap의 결과로 나온 rootfs를 실제 리눅스가 돌아가는 환경처럼 만들어줄 수 있다&lt;/p&gt;
&lt;p&gt;마운트 타입이 다 제각각이라 이 또한 나중에 함께 정리해보면 좋을 것 같다. 왜 bind인지, 왜 proc인지 등등.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo mount -t sysfs sysfs sys/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo mount -t proc proc proc/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo mount -o bind /dev dev/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo mount -o bind /dev/pts dev/pts
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;이후 필요한 초기 패키지를 설치해 나간다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo chroot . apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Hit:1 http://kr.ports.ubuntu.com jammy InRelease
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Get:2 http://kr.ports.ubuntu.com jammy/main Translation-en &lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;510&lt;/span&gt; kB&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Fetched &lt;span style="color:#ae81ff"&gt;510&lt;/span&gt; kB in 4s &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;119&lt;/span&gt; kB/s&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo chroot . apt-get -y install openssh-server
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Reading package lists... Done
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Building dependency tree... Done
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;The following additional packages will be installed:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; libcbor0.8 libedit2 libfido2-1 libpsl5 libwrap0 libx11-6 libx11-data libxau6 libxcb1 libxdmcp6 libxext6 libxmuu1 ncurses-term openssh-client openssh-sftp-server publicsuffix python3-distro ssh-import-id
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; wget xauth
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Suggested packages:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; keychain libpam-ssh monkeysphere ssh-askpass molly-guard ufw
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;The following NEW packages will be installed:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; libcbor0.8 libedit2 libfido2-1 libpsl5 libwrap0 libx11-6 libx11-data libxau6 libxcb1 libxdmcp6 libxext6 libxmuu1 ncurses-term openssh-client openssh-server openssh-sftp-server publicsuffix python3-distro
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ssh-import-id wget xauth
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; upgraded, &lt;span style="color:#ae81ff"&gt;21&lt;/span&gt; newly installed, &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; to remove and &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; not upgraded.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Need to get &lt;span style="color:#ae81ff"&gt;3245&lt;/span&gt; kB of archives.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;After this operation, 14.9 MB of additional disk space will be used.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Get:1 http://kr.ports.ubuntu.com jammy/main armhf libedit2 armhf 3.1-20210910-1build1 &lt;span style="color:#f92672"&gt;[&lt;/span&gt;78.7 kB&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo chroot . adduser ubuntu
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;perl: warning: Setting locale failed.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;perl: warning: Please check that your locale settings:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LANGUAGE &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;ko&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LC_ALL &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;unset&lt;span style="color:#f92672"&gt;)&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LANG &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;ko_KR.UTF-8&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; are supported and installed on your system.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;perl: warning: Falling back to the standard locale &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;C&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Adding user &lt;span style="color:#e6db74"&gt;`&lt;/span&gt;ubuntu&lt;span style="color:#e6db74"&gt;&amp;#39; ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;Adding new group `ubuntu&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;1000&lt;span style="color:#f92672"&gt;)&lt;/span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Adding new user &lt;span style="color:#e6db74"&gt;`&lt;/span&gt;ubuntu&lt;span style="color:#e6db74"&gt;&amp;#39; (1000) with group `ubuntu&amp;#39;&lt;/span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Creating home directory &lt;span style="color:#e6db74"&gt;`&lt;/span&gt;/home/ubuntu&lt;span style="color:#e6db74"&gt;&amp;#39; ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;Copying files from `/etc/skel&amp;#39;&lt;/span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;New password:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Retype new password:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;passwd: password updated successfully
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Changing the user information &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; ubuntu
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Enter the new value, or press ENTER &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; the default
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Full Name &lt;span style="color:#f92672"&gt;[]&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Room Number &lt;span style="color:#f92672"&gt;[]&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Work Phone &lt;span style="color:#f92672"&gt;[]&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Home Phone &lt;span style="color:#f92672"&gt;[]&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Other &lt;span style="color:#f92672"&gt;[]&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Is the information correct? &lt;span style="color:#f92672"&gt;[&lt;/span&gt;Y/n&lt;span style="color:#f92672"&gt;]&lt;/span&gt; y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;이 서버에 접속할 수 있도록 &lt;code&gt;openssh-server&lt;/code&gt;를, 그리고 초기 유저가 필요하므로 &lt;code&gt;ubuntu&lt;/code&gt;라는 유저를 추가해 주었다. 유저 ubuntu의 경우 root권한이 필요하므로 그룹 &lt;code&gt;sudo&lt;/code&gt;에 포함시키는 것이 좋겠다. 이외에도 호스트네임을 변경하거나 fstab등을 미리 등록해 두거나, 필요한 추가 패키지를 더 설치해도 된다. 모두 완료한 후에는 이를 emmc에 복사한다. 별 상관은 없지만 파일 메타데이터도 그대로 유지하며 복사하고 싶어서 &lt;code&gt;rsync&lt;/code&gt;를 사용하였다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo rsync -aX --progress ./ /media/cublr/1f683619-b0ab-4df2-a676-c2a8ee15e432/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sending incremental file list
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;./
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;bin -&amp;gt; usr/bin
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lib -&amp;gt; usr/lib
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sbin -&amp;gt; usr/sbin
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;boot/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dev/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dev/console
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dev/fd -&amp;gt; /proc/self/fd
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dev/full
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dev/ptmx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dev/random
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dev/stderr -&amp;gt; /proc/self/fd/2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dev/stdin -&amp;gt; /proc/self/fd/0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dev/stdout -&amp;gt; /proc/self/fd/1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dev/tty
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dev/urandom
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dev/zero
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dev/pts/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dev/shm/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etc/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etc/.pwd.lock
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; 100% 0.00kB/s 0:00:00 &lt;span style="color:#f92672"&gt;(&lt;/span&gt;xfr#1, ir-chk&lt;span style="color:#f92672"&gt;=&lt;/span&gt;1235/1269&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etc/adduser.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 3,028 100% 0.00kB/s 0:00:00 &lt;span style="color:#f92672"&gt;(&lt;/span&gt;xfr#2, ir-chk&lt;span style="color:#f92672"&gt;=&lt;/span&gt;1234/1269&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etc/bash.bashrc
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 2,319 100% 2.21MB/s 0:00:00 &lt;span style="color:#f92672"&gt;(&lt;/span&gt;xfr#3, ir-chk&lt;span style="color:#f92672"&gt;=&lt;/span&gt;1233/1269&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etc/bindresvport.blacklist
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;367&lt;/span&gt; 100% 358.40kB/s 0:00:00 &lt;span style="color:#f92672"&gt;(&lt;/span&gt;xfr#4, ir-chk&lt;span style="color:#f92672"&gt;=&lt;/span&gt;1232/1269&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etc/ca-certificates.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 5,529 100% 5.27MB/s 0:00:00 &lt;span style="color:#f92672"&gt;(&lt;/span&gt;xfr#5, ir-chk&lt;span style="color:#f92672"&gt;=&lt;/span&gt;1231/1269&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etc/crontab
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 1,136 100% 1.08MB/s 0:00:00 &lt;span style="color:#f92672"&gt;(&lt;/span&gt;xfr#6, ir-chk&lt;span style="color:#f92672"&gt;=&lt;/span&gt;1230/1269&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;etc/debconf.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 2,969 100% 2.83MB/s 0:00:00 &lt;span style="color:#f92672"&gt;(&lt;/span&gt;xfr#7, ir-chk&lt;span style="color:#f92672"&gt;=&lt;/span&gt;1229/1269&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;그리고 emmc를 다시 오드로이드에 장착 후 부팅하면 정상적으로 22.04로 올라온다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;U-Boot 2022.07-rc1-00291-g145921bdbd &lt;span style="color:#f92672"&gt;(&lt;/span&gt;May &lt;span style="color:#ae81ff"&gt;07&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2022&lt;/span&gt; - 18:10:11 +0900&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;CPU: Exynos4412 @ &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; GHz
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Model: Odroid based on Exynos4412
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Type: u3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Starting kernel ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Booting Linux on physical CPU 0xa00
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Linux version 5.4.80-gc32b3e142fe9 &lt;span style="color:#f92672"&gt;(&lt;/span&gt;cublr@cublr-j5005&lt;span style="color:#f92672"&gt;)&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;gcc version 7.5.0 &lt;span style="color:#f92672"&gt;(&lt;/span&gt;Ubuntu/Linaro 7.5.0-3ubuntu1~18.04&lt;span style="color:#f92672"&gt;))&lt;/span&gt; &lt;span style="color:#75715e"&gt;#1 SMP PREEMPT Mon Dec 28 22:01:48 KST 2020 ()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; CPU: ARMv7 Processor &lt;span style="color:#f92672"&gt;[&lt;/span&gt;413fc090&lt;span style="color:#f92672"&gt;]&lt;/span&gt; revision &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;ARMv7&lt;span style="color:#f92672"&gt;)&lt;/span&gt;, cr&lt;span style="color:#f92672"&gt;=&lt;/span&gt;10c5387d
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; OF: fdt: Machine model: Hardkernel ODROID-X2 board based on Exynos4412
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Memory policy: Data cache writealloc
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Reserved memory: created DMA memory pool at 0xbf700000, size &lt;span style="color:#ae81ff"&gt;8&lt;/span&gt; MiB
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Started Dispatcher daemon &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; systemd-networkd.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Reached target Multi-User System.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Reached target Graphical Interface.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Starting Record Runlevel Change in UTMP...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Finished Record Runlevel Change in UTMP.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Ubuntu 22.04 LTS cublr-nfs-storage-0001 ttySAC1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cublr-nfs-storage-0001 login:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="커널-컴파일"&gt;커널 컴파일&lt;/h3&gt;
&lt;p&gt;커널 컴파일의 목표로 zImage, 커널 헤더, 모듈을 만들려 한다.&lt;/p&gt;
&lt;p&gt;우선 zImage만 만들어도 부팅에는 문제가 없는데, 패키지를 추가로 설치하거나 할 때
문제가 발생할 수 있다. 펌웨어도 원래대로라면 필요하겠는데 커널 4버전인가
언젠가부터 커널 소스 트리에서 생성하는 펌웨어 인스톨이 없어졌고, 그냥 각 리눅스
배포판에서 제공하도록 바뀐 것 같다.
예를 들어 우분투에서는 이를 &lt;code&gt;linux-firmware&lt;/code&gt;라는 패키지로 제공하는데, 용량이 매우 크다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo apt-get install linux-firmware
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Reading package lists... Done
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Building dependency tree... Done
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Reading state information... Done
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Recommended packages:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; firmware-sof-signed
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;The following NEW packages will be installed:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; linux-firmware
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; upgraded, &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; newly installed, &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; to remove and &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; not upgraded.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Need to get &lt;span style="color:#ae81ff"&gt;238&lt;/span&gt; MB of archives.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;After this operation, &lt;span style="color:#ae81ff"&gt;866&lt;/span&gt; MB of additional disk space will be used.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;아무튼 커널 컴파일을 위해 커널 소스를 다운로드하자. 우분투 jammy에서 사용하는 커널 소스는 여기에서 다운로드할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://git.launchpad.net/~ubuntu-kernel-stable/+git/jammy"&gt;https://git.launchpad.net/~ubuntu-kernel-stable/+git/jammy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="images/images_00002.png" alt="ubuntu-current-lts-version"&gt;&lt;/p&gt;
&lt;p&gt;현재 최신 태그는 &lt;code&gt;jammy-stable-v5.15.35&lt;/code&gt;이므로, 이를 바로 가져와 보자. 커널 소스는 용량이 매우 크기 때문에 모두 다운로드하려면 시간이 꽤 걸려서 특정 브랜치의 1depth만을 가져오기 위해 다음과 같은 옵션을 주었다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ git clone https://git.launchpad.net/~ubuntu-kernel-stable/+git/jammy --branch jammy-stable-v5.15.35 --depth &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;커널 컴파일은 여러 환경에 맞는 커널을 컴파일하기 위해 컴파일 전, 만들어낼 커널의 기능을 토글할 수 있는 방법을 제공한다. 그래서 컴파일 전에는 반드시 필요한 커널 플래그를 설정해 주어야 하는데, 그 필드가 매우 방대하므로 모든 것을 직접 설정하기에는 매우 어렵다. 그래서 커널 소스에서 &lt;code&gt;defconfig&lt;/code&gt;라는 이름으로 현존하는 많은 환경에 대한 커널 플래그를 미리 준비해 두고 있다. 그러므로 커널 컴파일을 하기 전에 어떤 defconfig를 사용해야 가장 변경이 적을지 알아보는 것이 좋다.&lt;/p&gt;
&lt;p&gt;u2/u3에 대한 전용 설정은 딱히 없지만 가장 가까운 defconfig로는 &lt;a href="https://git.launchpad.net/~ubuntu-kernel-stable/+git/jammy/tree/arch/arm/configs/exynos_defconfig"&gt;&lt;code&gt;exynos_defconfig&lt;/code&gt;&lt;/a&gt;가 있다. 하드커널의 옛 커널 소스에서 odroidu_defconfig를 제공하고 있지만 지금 커널과는 많이 다르기 때문에 그대로 사용할 수는 없을거고, 나중에 시간이 되면 뭐가 다른지 알아보면 좋을 것 같다.&lt;/p&gt;
&lt;p&gt;아무튼 이 exynos_defconfig를 사용하여 위에서 진행했던 u-boot 컴파일 과정과 마찬가지로 초기 설정을 만들고 여기에 추가 기능을 위한 플래그도 활성화시킨다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ make exynos_defconfig
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# configuration written to .config&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;make menuconfig&lt;/code&gt;를 사용하면 TUI상에서 각 플래그의 의존 관계를 보면서 플래그를 켜거나 끌 수 있다. 이 커널 빌드의 목표 중 하나는 NFS서버이므로 NFS관련 플래그를 활성화, 두 번째는 컨테이너를 실행할 수 있도록 네임스페이스와 기타 네트워크 관련 기능을 활성화한다.&lt;/p&gt;
&lt;p&gt;&lt;img src="images/images_00003.png" alt="menuconfig-checkconfig"&gt;&lt;/p&gt;
&lt;p&gt;menuconfig 실행 중 &lt;code&gt;/&lt;/code&gt;를 눌러 각 플래그를 검색해보는 것이 가능하다. 하지만 도커를 위해 어떤 커널 플래그가 필요할 지를 알 수가 없는데, 그리하여 여기서부터는 &lt;a href="https://github.com/moby/moby/blob/master/contrib/check-config.sh"&gt;check-config&lt;/a&gt;를 통해 커널의 상태가 도커와 적합한지를 확인한다. 컴파일된 커널이 도커를 사용하는 것에 무리가 없도록 플래그를 조정하였다. 스크립트 내용을 보면 &lt;code&gt;.config&lt;/code&gt;를 읽어올 경로가 정의되어 있어서 이를 그냥 커널 소스의 .config만 보도록 고치면 뭐 그럭저럭 간단하다.&lt;/p&gt;
&lt;p&gt;check-config의 결과를 모두 &lt;code&gt;enabled&lt;/code&gt;로 만들지 않아도 되는데, 예를 들어 &lt;code&gt;aufs&lt;/code&gt;를 사용하지 않을 거라면 플래그는 필요 없고.. 뭐 그런 식. cgroups이나 nat, iptables, apparmor/selinux 정도가 중요할 것 같은데 &lt;a href="https://docs.docker.com/engine/install/binaries/#prerequisites"&gt;자세한 건 공식 매뉴얼을 통해&amp;hellip;&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ make -j8
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SYNC include/config/auto.conf.cmd
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SYSHDR arch/arm/include/generated/uapi/asm/unistd-oabi.h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SYSHDR arch/arm/include/generated/uapi/asm/unistd-eabi.h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; WRAP arch/arm/include/generated/uapi/asm/kvm_para.h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; WRAP arch/arm/include/generated/uapi/asm/bitsperlong.h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; WRAP arch/arm/include/generated/uapi/asm/ioctl.h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; HOSTCC scripts/dtc/fstree.o
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; HOSTCC scripts/dtc/data.o
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; HOSTCC scripts/dtc/livetree.o
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; HOSTCC scripts/dtc/treesource.o
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; WRAP arch/arm/include/generated/asm/early_ioremap.h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CC &lt;span style="color:#f92672"&gt;[&lt;/span&gt;M&lt;span style="color:#f92672"&gt;]&lt;/span&gt; net/hsr/hsr_framereg.o
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LD &lt;span style="color:#f92672"&gt;[&lt;/span&gt;M&lt;span style="color:#f92672"&gt;]&lt;/span&gt; net/vmw_vsock/vsock.o
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LD &lt;span style="color:#f92672"&gt;[&lt;/span&gt;M&lt;span style="color:#f92672"&gt;]&lt;/span&gt; net/vmw_vsock/vsock_diag.o
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LD &lt;span style="color:#f92672"&gt;[&lt;/span&gt;M&lt;span style="color:#f92672"&gt;]&lt;/span&gt; net/vmw_vsock/vmw_vsock_virtio_transport_common.o
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CC &lt;span style="color:#f92672"&gt;[&lt;/span&gt;M&lt;span style="color:#f92672"&gt;]&lt;/span&gt; net/hsr/hsr_slave.o
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CC fs/fhandle.o
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CC &lt;span style="color:#f92672"&gt;[&lt;/span&gt;M&lt;span style="color:#f92672"&gt;]&lt;/span&gt; fs/shiftfs.o
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LD &lt;span style="color:#f92672"&gt;[&lt;/span&gt;M&lt;span style="color:#f92672"&gt;]&lt;/span&gt; net/hsr/hsr.o
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; AR net/built-in.a
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; AR fs/built-in.a
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;그 다음은 보드에서 사용할 zImage를 생성해 보자.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ make zImage
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CALL scripts/checksyscalls.sh
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CALL scripts/atomic/check-atomics.sh
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CHK include/generated/compile.h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CC kernel/bpf/core.o
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CC kernel/bpf/syscall.o
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CC kernel/bpf/verifier.o
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CC kernel/bpf/inode.o
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CC kernel/bpf/task_iter.o
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SHIPPED arch/arm/boot/compressed/bswapsdi2.S
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; AS arch/arm/boot/compressed/bswapsdi2.o
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LD arch/arm/boot/compressed/vmlinux
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; OBJCOPY arch/arm/boot/zImage
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Kernel: arch/arm/boot/zImage is ready
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;이 zImage를 emmc FAT16 파티션에 복사하면 된다. 이미 u-boot에서는 FAT16의 zImage를 읽어서 부팅하도록 되어 있다.&lt;/p&gt;
&lt;p&gt;그 다음에는 커널 헤더와 모듈도 같이 설치해 보자.&lt;/p&gt;
&lt;p&gt;커널 헤더와 모듈은 컴파일된 커널 소스 트리에서 각각 &lt;code&gt;make headers_install&lt;/code&gt;, &lt;code&gt;make modules_install&lt;/code&gt;을 입력하여 만들어낼 수 있다. 문제는 그대로 입력하면 내 데스크탑의 헤더와 모듈 경로에 그대로 복사해버린다는 것인데, 이를 방지하기 위해 &lt;code&gt;INSTALL_HDR_PATH&lt;/code&gt;, &lt;code&gt;INSTALL_MOD_PATH&lt;/code&gt;의 환경 변수를 통해 설치할 경로를 따로 지정해 둔다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ make INSTALL_HDR_PATH&lt;span style="color:#f92672"&gt;=&lt;/span&gt;compiled_header headers_install
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; HOSTCC scripts/unifdef
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; HDRINST usr/include/asm-generic/stat.h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; HDRINST usr/include/asm-generic/fcntl.h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; HDRINST usr/include/asm-generic/termios.h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; HDRINST usr/include/asm-generic/signal-defs.h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; HDRINST usr/include/asm/kvm_para.h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; HDRINST usr/include/asm/resource.h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; HDRINST usr/include/asm/bitsperlong.h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; HDRINST usr/include/asm/ipcbuf.h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; HDRINST usr/include/asm/sembuf.h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; INSTALL compiled_header/include
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ make INSTALL_MOD_PATH&lt;span style="color:#f92672"&gt;=&lt;/span&gt;compiled_module modules_install
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; INSTALL compiled_module/lib/modules/5.15.35-g162933771873/kernel/arch/arm/crypto/aes-arm-bs.ko
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; INSTALL compiled_module/lib/modules/5.15.35-g162933771873/kernel/arch/arm/crypto/chacha-neon.ko
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; INSTALL compiled_module/lib/modules/5.15.35-g162933771873/kernel/arch/arm/crypto/sha1-arm-neon.ko
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; INSTALL compiled_module/lib/modules/5.15.35-g162933771873/kernel/arch/arm/crypto/sha1-arm.ko
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; INSTALL compiled_module/lib/modules/5.15.35-g162933771873/kernel/net/nfc/nci/nci_uart.ko
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; INSTALL compiled_module/lib/modules/5.15.35-g162933771873/kernel/net/nfc/nfc_digital.ko
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; INSTALL compiled_module/lib/modules/5.15.35-g162933771873/kernel/net/sched/cls_cgroup.ko
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; INSTALL compiled_module/lib/modules/5.15.35-g162933771873/kernel/net/wireless/cfg80211.ko
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; INSTALL compiled_module/lib/modules/5.15.35-g162933771873/kernel/net/xfrm/xfrm_user.ko
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; DEPMOD compiled_module/lib/modules/5.15.35-g162933771873
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;이제 compiled_header, compiled_module 밑에 있는 헤더와 모듈 모두 그대로 emmc에 복사하면 된다. 각 모듈은 환경변수를 루트로 삼아 설치하였으므로, 그대로 새로운 emmc루트에 복사하면 된다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;U-Boot 2022.07-rc1-00291-g145921bdbd &lt;span style="color:#f92672"&gt;(&lt;/span&gt;May &lt;span style="color:#ae81ff"&gt;07&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2022&lt;/span&gt; - 18:10:11 +0900&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;CPU: Exynos4412 @ &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; GHz
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Model: Odroid based on Exynos4412
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Type: u3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;DRAM: &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; GiB
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Core: &lt;span style="color:#ae81ff"&gt;101&lt;/span&gt; devices, &lt;span style="color:#ae81ff"&gt;12&lt;/span&gt; uclasses, devicetree: separate
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;LDO20@VDDQ_EMMC_1.8V: set &lt;span style="color:#ae81ff"&gt;1800000&lt;/span&gt; uV; enabling
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;LDO22@VDDQ_EMMC_2.8V: set &lt;span style="color:#ae81ff"&gt;2800000&lt;/span&gt; uV; enabling
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;LDO21@TFLASH_2.8V: set &lt;span style="color:#ae81ff"&gt;2800000&lt;/span&gt; uV; enabling
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MMC: sdhci@12530000 - probe failed: -19
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Loading Environment from MMC... *** Warning - bad CRC, using default environment
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Boot device: MMC&lt;span style="color:#f92672"&gt;(&lt;/span&gt;0&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Net: No ethernet found.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Hit any key to stop autoboot: &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;no mmc device at slot &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;switch to partitions &lt;span style="color:#75715e"&gt;#0, OK&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mmc0&lt;span style="color:#f92672"&gt;(&lt;/span&gt;part 0&lt;span style="color:#f92672"&gt;)&lt;/span&gt; is current device
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Scanning mmc 0:1...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Found U-Boot script /boot.scr
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;773&lt;/span&gt; bytes read in &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; ms &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;377&lt;/span&gt; KiB/s&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;## Executing script at 42000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;7609984&lt;/span&gt; bytes read in &lt;span style="color:#ae81ff"&gt;268&lt;/span&gt; ms &lt;span style="color:#f92672"&gt;(&lt;/span&gt;27.1 MiB/s&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;53984&lt;/span&gt; bytes read in &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt; ms &lt;span style="color:#f92672"&gt;(&lt;/span&gt;12.9 MiB/s&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Kernel image @ 0x40008000 &lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0x000000 - 0x741e80 &lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;## Flattened Device Tree blob at 41f00000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Booting using the fdt blob at 0x41f00000
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Using Device Tree in place at 41f00000, end 41f10fff
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Starting kernel ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Booting Linux on physical CPU 0xa00
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Linux version 5.15.35-g162933771873 &lt;span style="color:#f92672"&gt;(&lt;/span&gt;cublr@cublr-naverlabs&lt;span style="color:#f92672"&gt;)&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;arm-linux-gnueabihf-gcc &lt;span style="color:#f92672"&gt;(&lt;/span&gt;Ubuntu 11.2.0-17ubuntu1&lt;span style="color:#f92672"&gt;)&lt;/span&gt; 11.2.0, GNU ld &lt;span style="color:#f92672"&gt;(&lt;/span&gt;GNU Binutils &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; Ubuntu&lt;span style="color:#f92672"&gt;)&lt;/span&gt; 2.38&lt;span style="color:#f92672"&gt;)&lt;/span&gt; &lt;span style="color:#75715e"&gt;#4 SMP PREEMPT Sun May 8 17:)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; CPU: ARMv7 Processor &lt;span style="color:#f92672"&gt;[&lt;/span&gt;413fc090&lt;span style="color:#f92672"&gt;]&lt;/span&gt; revision &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;ARMv7&lt;span style="color:#f92672"&gt;)&lt;/span&gt;, cr&lt;span style="color:#f92672"&gt;=&lt;/span&gt;10c5387d
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; OF: fdt: Machine model: Hardkernel ODROID-X2 board based on Exynos4412
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Memory policy: Data cache writealloc
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Reserved memory: created DMA memory pool at 0xbf700000, size &lt;span style="color:#ae81ff"&gt;8&lt;/span&gt; MiB
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; OF: reserved mem: initialized node region-mfc-right, compatible id shared-dma-pool
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Reserved memory: created DMA memory pool at 0xbd300000, size &lt;span style="color:#ae81ff"&gt;36&lt;/span&gt; MiB
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; OF: reserved mem: initialized node region-mfc-left, compatible id shared-dma-pool
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; cma: Reserved &lt;span style="color:#ae81ff"&gt;96&lt;/span&gt; MiB at 0xb7000000
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Samsung CPU ID: 0xe4412220
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Zone ranges:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Normal &lt;span style="color:#f92672"&gt;[&lt;/span&gt;mem 0x0000000040000000-0x000000006fffffff&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; HighMem &lt;span style="color:#f92672"&gt;[&lt;/span&gt;mem 0x0000000070000000-0x00000000bfefffff&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Movable zone start &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; each node
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Early memory node ranges
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; node 0: &lt;span style="color:#f92672"&gt;[&lt;/span&gt;mem 0x0000000040000000-0x00000000bd2fffff&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; node 0: &lt;span style="color:#f92672"&gt;[&lt;/span&gt;mem 0x00000000bd300000-0x00000000bfefffff&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Initmem setup node &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;mem 0x0000000040000000-0x00000000bfefffff&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Running under secure firmware.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; percpu: Embedded &lt;span style="color:#ae81ff"&gt;16&lt;/span&gt; pages/cpu s36588 r8192 d20756 u65536
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Built &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; zonelists, mobility grouping on. Total pages: &lt;span style="color:#ae81ff"&gt;522496&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Kernel command line: video&lt;span style="color:#f92672"&gt;=&lt;/span&gt;HDMI-A-1:1280x720M@60 console&lt;span style="color:#f92672"&gt;=&lt;/span&gt;ttySAC1,115200n8 root&lt;span style="color:#f92672"&gt;=&lt;/span&gt;PARTUUID&lt;span style="color:#f92672"&gt;=&lt;/span&gt;b6896738-02 rootfstype&lt;span style="color:#f92672"&gt;=&lt;/span&gt;ext4 rootwait ro
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Dentry cache hash table entries: &lt;span style="color:#ae81ff"&gt;131072&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;order: 7, &lt;span style="color:#ae81ff"&gt;524288&lt;/span&gt; bytes, linear&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Inode-cache hash table entries: &lt;span style="color:#ae81ff"&gt;65536&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;order: 6, &lt;span style="color:#ae81ff"&gt;262144&lt;/span&gt; bytes, linear&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Finished Set console scheme.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Started OpenBSD Secure Shell server.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Finished Remove Stale Onli…ext4 Metadata Check Snapshots.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Created slice Slice /system/getty.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Started Getty on tty1.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Reached target Login Prompts.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Started User Login Management.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Started Dispatcher daemon &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; systemd-networkd.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Reached target Multi-User System.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Reached target Graphical Interface.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Starting Record Runlevel Change in UTMP...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Finished Record Runlevel Change in UTMP.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Ubuntu 22.04 LTS cublr-nfs-storage-0001 ttySAC1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cublr-nfs-storage-0001 login:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;새 버전의 u-boot, 커널, 우분투로 새롭게 부팅된 것을 확인할 수 있다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cublr-nfs-storage-0001 login: ubuntu
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Password:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Welcome to Ubuntu 22.04 LTS &lt;span style="color:#f92672"&gt;(&lt;/span&gt;GNU/Linux 5.15.35-g162933771873 armv7l&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; * Documentation: https://help.ubuntu.com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; * Management: https://landscape.canonical.com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; * Support: https://ubuntu.com/advantage
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;The programs included with the Ubuntu system are free software;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;the exact distribution terms &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; each program are described in the
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;individual files in /usr/share/doc/*/copyright.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;applicable law.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;To run a command as administrator &lt;span style="color:#f92672"&gt;(&lt;/span&gt;user &lt;span style="color:#e6db74"&gt;&amp;#34;root&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;, use &lt;span style="color:#e6db74"&gt;&amp;#34;sudo &amp;lt;command&amp;gt;&amp;#34;&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;See &lt;span style="color:#e6db74"&gt;&amp;#34;man sudo_root&amp;#34;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; details.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ubuntu@cublr-nfs-storage-0001:~$ uname -r
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;5.15.35-g162933771873
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;이전 커널 4.15대에서는 리부팅을 시도하면 보드가 그냥 먹통이 되어서, 반드시 전원을 분리하거나 하드웨어 리셋을 통해 새롭게 부팅했어야 했다. 그런데 u-boot, 커널 모두 새 버전이라 그런가, 이상하게 재부팅이 잘 되어서 의심하는 중. 어? 잘 되네?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo reboot
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;sudo&lt;span style="color:#f92672"&gt;]&lt;/span&gt; password &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; ubuntu:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Stopping Session c1 of User ubuntu...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Removed slice Slice /system/modprobe.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Stopped target Graphical Interface.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Stopped target Multi-User System.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Stopped target Login Prompts.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Stopped target Host and Network Name Lookups.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Stopped target Sound Card.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Stopped target Timer Units.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Stopped File System Check …3-74d5-45d4-b7d8-490b0f7e7061.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Removed slice Slice /system/systemd-fsck.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Stopped target Preparation &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; Local File Systems.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Stopped Create Static Device Nodes in /dev.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Stopped Create System Users.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Stopped Remount Root and Kernel File Systems.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Stopped File System Check on Root Device.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Reached target System Shutdown.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Reached target Late Shutdown Services.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Finished System Reboot.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; OK &lt;span style="color:#f92672"&gt;]&lt;/span&gt; Reached target System Reboot.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;U-Boot 2022.07-rc1-00291-g145921bdbd &lt;span style="color:#f92672"&gt;(&lt;/span&gt;May &lt;span style="color:#ae81ff"&gt;07&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2022&lt;/span&gt; - 18:10:11 +0900&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;CPU: Exynos4412 @ &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; GHz
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Model: Odroid based on Exynos4412
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Type: u3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;DRAM: &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; GiB
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Core: &lt;span style="color:#ae81ff"&gt;101&lt;/span&gt; devices, &lt;span style="color:#ae81ff"&gt;12&lt;/span&gt; uclasses, devicetree: separate
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;LDO20@VDDQ_EMMC_1.8V: set &lt;span style="color:#ae81ff"&gt;1800000&lt;/span&gt; uV; enabling
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;LDO22@VDDQ_EMMC_2.8V: set &lt;span style="color:#ae81ff"&gt;2800000&lt;/span&gt; uV; enabling
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;LDO21@TFLASH_2.8V: set &lt;span style="color:#ae81ff"&gt;2800000&lt;/span&gt; uV; enabling
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MMC: sdhci@12530000 - probe failed: -19
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Loading Environment from MMC... *** Warning - bad CRC, using default environment
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Boot device: MMC&lt;span style="color:#f92672"&gt;(&lt;/span&gt;0&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Net: No ethernet found.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Hit any key to stop autoboot: &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;no mmc device at slot &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;switch to partitions &lt;span style="color:#75715e"&gt;#0, OK&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mmc0&lt;span style="color:#f92672"&gt;(&lt;/span&gt;part 0&lt;span style="color:#f92672"&gt;)&lt;/span&gt; is current device
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Scanning mmc 0:1...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Found U-Boot script /boot.scr
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;773&lt;/span&gt; bytes read in &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; ms &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;377&lt;/span&gt; KiB/s&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;## Executing script at 42000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;7609984&lt;/span&gt; bytes read in &lt;span style="color:#ae81ff"&gt;268&lt;/span&gt; ms &lt;span style="color:#f92672"&gt;(&lt;/span&gt;27.1 MiB/s&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;53984&lt;/span&gt; bytes read in &lt;span style="color:#ae81ff"&gt;5&lt;/span&gt; ms &lt;span style="color:#f92672"&gt;(&lt;/span&gt;10.3 MiB/s&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Kernel image @ 0x40008000 &lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0x000000 - 0x741e80 &lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;## Flattened Device Tree blob at 41f00000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Booting using the fdt blob at 0x41f00000
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Using Device Tree in place at 41f00000, end 41f10fff
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Starting kernel ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Booting Linux on physical CPU 0xa00
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Linux version 5.15.35-g162933771873 &lt;span style="color:#f92672"&gt;(&lt;/span&gt;cublr@cublr-naverla&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; CPU: ARMv7 Processor &lt;span style="color:#f92672"&gt;[&lt;/span&gt;413fc090&lt;span style="color:#f92672"&gt;]&lt;/span&gt; revision &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;ARMv7&lt;span style="color:#f92672"&gt;)&lt;/span&gt;, cr&lt;span style="color:#f92672"&gt;=&lt;/span&gt;10c5387d
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instructie
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; OF: fdt: Machine model: Hardkernel ODROID-X2 board based on Exyn2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Memory policy: Data cache writealloc
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Reserved memory: created DMA memory pool at 0xbf700000, size &lt;span style="color:#ae81ff"&gt;8&lt;/span&gt; MB
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; OF: reserved mem: initialized node region-mfc-right, compatible l
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Reserved memory: created DMA memory pool at 0xbd300000, size &lt;span style="color:#ae81ff"&gt;36&lt;/span&gt; B
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; OF: reserved mem: initialized node region-mfc-left, compatible il
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; cma: Reserved &lt;span style="color:#ae81ff"&gt;96&lt;/span&gt; MiB at 0xb7000000
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; 0.000000&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Samsung CPU ID: 0xe4412220
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;커널 모듈이 들어 있으므로 nfs-server도 설치하여 정상적으로 동작시킬 수 있다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ps -ef | grep nfs
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;root &lt;span style="color:#ae81ff"&gt;63&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; 14:48 ? 00:00:00 &lt;span style="color:#f92672"&gt;[&lt;/span&gt;nfsiod&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;root &lt;span style="color:#ae81ff"&gt;224&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; 14:48 ? 00:00:00 /usr/sbin/nfsdcld
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;root &lt;span style="color:#ae81ff"&gt;283&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; 14:48 ? 00:00:00 &lt;span style="color:#f92672"&gt;[&lt;/span&gt;nfsd&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;root &lt;span style="color:#ae81ff"&gt;284&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; 14:48 ? 00:00:00 &lt;span style="color:#f92672"&gt;[&lt;/span&gt;nfsd&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;root &lt;span style="color:#ae81ff"&gt;285&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; 14:48 ? 00:00:00 &lt;span style="color:#f92672"&gt;[&lt;/span&gt;nfsd&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;root &lt;span style="color:#ae81ff"&gt;286&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; 14:48 ? 00:00:00 &lt;span style="color:#f92672"&gt;[&lt;/span&gt;nfsd&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;root &lt;span style="color:#ae81ff"&gt;287&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; 14:48 ? 00:00:00 &lt;span style="color:#f92672"&gt;[&lt;/span&gt;nfsd&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;root &lt;span style="color:#ae81ff"&gt;288&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; 14:48 ? 00:00:00 &lt;span style="color:#f92672"&gt;[&lt;/span&gt;nfsd&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;root &lt;span style="color:#ae81ff"&gt;289&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; 14:48 ? 00:00:00 &lt;span style="color:#f92672"&gt;[&lt;/span&gt;nfsd&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;root &lt;span style="color:#ae81ff"&gt;290&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; 14:48 ? 00:00:00 &lt;span style="color:#f92672"&gt;[&lt;/span&gt;nfsd&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ubuntu &lt;span style="color:#ae81ff"&gt;329&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;312&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; 14:49 pts/0 00:00:00 grep --color&lt;span style="color:#f92672"&gt;=&lt;/span&gt;auto nfs
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo service nfs-kernel-server status
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;● nfs-server.service - NFS server and services
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Loaded: loaded &lt;span style="color:#f92672"&gt;(&lt;/span&gt;/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Drop-In: /run/systemd/generator/nfs-server.service.d
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; └─order-with-mounts.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Active: active &lt;span style="color:#f92672"&gt;(&lt;/span&gt;exited&lt;span style="color:#f92672"&gt;)&lt;/span&gt; since Sun 2022-05-08 14:48:49 UTC; 59s ago
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Process: &lt;span style="color:#ae81ff"&gt;276&lt;/span&gt; ExecStartPre&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/usr/sbin/exportfs -r &lt;span style="color:#f92672"&gt;(&lt;/span&gt;code&lt;span style="color:#f92672"&gt;=&lt;/span&gt;exited, status&lt;span style="color:#f92672"&gt;=&lt;/span&gt;0/SUCCESS&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Process: &lt;span style="color:#ae81ff"&gt;277&lt;/span&gt; ExecStart&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/usr/sbin/rpc.nfsd &lt;span style="color:#f92672"&gt;(&lt;/span&gt;code&lt;span style="color:#f92672"&gt;=&lt;/span&gt;exited, status&lt;span style="color:#f92672"&gt;=&lt;/span&gt;0/SUCCESS&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Main PID: &lt;span style="color:#ae81ff"&gt;277&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;code&lt;span style="color:#f92672"&gt;=&lt;/span&gt;exited, status&lt;span style="color:#f92672"&gt;=&lt;/span&gt;0/SUCCESS&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CPU: 107ms
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;May &lt;span style="color:#ae81ff"&gt;08&lt;/span&gt; 14:48:49 cublr-nfs-storage-0001 systemd&lt;span style="color:#f92672"&gt;[&lt;/span&gt;1&lt;span style="color:#f92672"&gt;]&lt;/span&gt;: Starting NFS server and services...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;May &lt;span style="color:#ae81ff"&gt;08&lt;/span&gt; 14:48:49 cublr-nfs-storage-0001 systemd&lt;span style="color:#f92672"&gt;[&lt;/span&gt;1&lt;span style="color:#f92672"&gt;]&lt;/span&gt;: Finished NFS server and services.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="다음-스텝"&gt;다음 스텝&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;커널 자동 빌드&lt;/li&gt;
&lt;li&gt;u-boot 업데이트 자동화&lt;/li&gt;
&lt;li&gt;u-boot 자동 빌드&lt;/li&gt;
&lt;li&gt;emmc가 아닌 img에 결과 작성&lt;/li&gt;
&lt;li&gt;img를 호스팅하기(github releases나 다른 방법으로)&lt;/li&gt;
&lt;li&gt;커널과 헤더, 모듈을 &lt;code&gt;deb&lt;/code&gt;으로 패키징하기&lt;/li&gt;
&lt;li&gt;ppa 열기&lt;/li&gt;
&lt;/ol&gt;</description></item></channel></rss>