<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>linuxso.log</title>
        <link>https://velog.io/</link>
        <description>리눅스 마스터 쏘</description>
        <lastBuildDate>Thu, 13 Jun 2024 15:29:01 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. linuxso.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/review_study" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[Compile Error] error: ‘IplImage’ does not name a type]]></title>
            <link>https://velog.io/@review_study/Compile-Error-error-IplImage-does-not-name-a-type</link>
            <guid>https://velog.io/@review_study/Compile-Error-error-IplImage-does-not-name-a-type</guid>
            <pubDate>Thu, 13 Jun 2024 15:29:01 GMT</pubDate>
            <description><![CDATA[<h2 id="문제">문제</h2>
<ul>
<li>컴파일하는 도중 문제가 발생된다.<p align="left">
<img style="margin: 0 0 0 0" src="https://velog.velcdn.com/images/review_study/post/08cf0248-882d-4b21-9a6d-a662225cbc46/image.png"/>
</p> 

</li>
</ul>
<h2 id="해결방안">해결방안</h2>
<ul>
<li>darknet 디렉토리 안에 있는 <code>src/image_opencv.cpp</code> 파일을 수정해야한다.
1) include 해야하는 header 추가하기
2) function 다시 작성하기 </li>
</ul>
<pre><code class="language-bash">vim src/image_opencv.cpp</code></pre>
<p align="left">
<img style="margin: 0 0 0 0" src="https://velog.velcdn.com/images/review_study/post/1c1c4801-7008-4b45-a556-a6c10aa25855/image.png"/>
</p> ]]></description>
        </item>
        <item>
            <title><![CDATA[[Compile Error] fatal error: opencv2/opencv.hpp: No such file or directory]]></title>
            <link>https://velog.io/@review_study/Compile-Error-fatal-error-opencv2opencv.hpp-No-such-file-or-directory</link>
            <guid>https://velog.io/@review_study/Compile-Error-fatal-error-opencv2opencv.hpp-No-such-file-or-directory</guid>
            <pubDate>Thu, 13 Jun 2024 15:16:16 GMT</pubDate>
            <description><![CDATA[<h2 id="문제">문제</h2>
<ul>
<li>컴파일하는 도중 문제가 발생된다.<p align="left">
<img style="margin: 0 0 0 0" src="https://velog.velcdn.com/images/review_study/post/09031fd5-515d-4dc7-b109-fdb3debbbc27/image.png"/>
</p> 

</li>
</ul>
<h2 id="해결방안">해결방안</h2>
<pre><code>sudo ln -s /usr/include/opencv4/opencv2 /usr/include/opencv2</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[ROS2] ROS2 Dashing 설치하기]]></title>
            <link>https://velog.io/@review_study/ROS2-ROS2-Dashing-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@review_study/ROS2-ROS2-Dashing-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0</guid>
            <pubDate>Fri, 03 May 2024 10:40:13 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>💡 <a href="https://docs.ros.org/en/dashing/Installation/Ubuntu-Development-Setup.html">ROS2 Dashing 공식 홈페이지</a>를 참조하여 내용을 작성하였다.</p>
</blockquote>
<blockquote>
<p>💡 ROS2 Dashing은 ubuntu 18.04 혹은 20.04에서만 설치가 가능하다. 특히 ubuntu 18.04에서 설치하는 것을 권장한다.</p>
</blockquote>
<h3 id="1-set-locale">1. Set locale</h3>
<pre><code class="language-bash">locale  

sudo apt update &amp;&amp; sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8

locale  # verify settings</code></pre>
<h3 id="2-add-the-ros2-apt-repository">2. Add the ROS2 apt repository</h3>
<pre><code class="language-bash">sudo apt update &amp;&amp; sudo apt install curl gnupg2 lsb-release
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

sudo sh -c &#39;echo &quot;deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main&quot; &gt; /etc/apt/sources.list.d/ros2-latest.list&#39;
</code></pre>
<h3 id="3-install-development-tools-and-ros-tools">3. Install development tools and ROS tools</h3>
<pre><code class="language-bash">sudo apt update &amp;&amp; sudo apt install -y \
  build-essential \
  cmake \
  git \
  python3-colcon-common-extensions \
  python3-pip \
  python3-rosdep \
  python3-vcstool \
  wget
# install some pip packages needed for testing
python3 -m pip install -U \
  argcomplete \
  flake8 \
  flake8-blind-except \
  flake8-builtins \
  flake8-class-newline \
  flake8-comprehensions \
  flake8-deprecated \
  flake8-docstrings \
  flake8-import-order \
  flake8-quotes \
  pytest-repeat \
  pytest-rerunfailures \
  pytest \
  pytest-cov \
  pytest-runner \
  setuptools
# install Fast-RTPS dependencies
sudo apt install --no-install-recommends -y \
  libasio-dev \
  libtinyxml2-dev
# install Cyclone DDS dependencies
sudo apt install --no-install-recommends -y \
  libcunit1-dev
</code></pre>
<h3 id="4-get-ros2-code">4. Get ROS2 Code</h3>
<pre><code class="language-bash">mkdir -p ~/ros2_dashing/src
cd ~/ros2_dashing
wget https://raw.githubusercontent.com/ros2/ros2/dashing/ros2.repos
vcs import src &lt; ros2.repos
</code></pre>
<h3 id="5-install-dependencies-using-rosdep">5. Install dependencies using rosdep</h3>
<pre><code class="language-bash">sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src --rosdistro dashing -y --skip-keys &quot;console_bridge fastcdr fastrtps libopensplice67 libopensplice69 rti-connext-dds-5.3.1 urdfdom_headers&quot;</code></pre>
<blockquote>
</blockquote>
<h4 id="--error-unable-to-process-source-httpsrawgithubusercontentcomrosrosdistromasterrosdepbaseyaml">- Error: unable to process source [<a href="https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml%5D">https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml]</a></h4>
<ul>
<li>rosdep update할 때 pip3에 rosdep과 관련된 dependency가 설치되어있지 않아서 문제가 발생한다.<p align="left" style="margin-left: 0px;">
<img style="margin: 0 0 0 0" src="https://velog.velcdn.com/images/review_study/post/3cba6a6d-39dd-46ce-9651-c6907149ec04/image.png"width="800" height="300">
</p>
#### - Solution
```bash
pip3 install rosdep
```


</li>
</ul>
<h3 id="6-build">6. Build</h3>
<pre><code class="language-bash">cd ~/ros2_dashing/
colcon build --symlink-install
</code></pre>
<blockquote>
<h4 id="--error-setuptoolsdeprecationwarning-setuppy-install-is-deprecated-use-build-and-pip-and-other-standards-based-tools">- Error: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.</h4>
</blockquote>
<ul>
<li>python version이 낮으면<code>colcon build</code>가 제대로 되지 않는 문제가 발생한다. <p align="left" style="margin-left: 0px;">
<img style="margin: 0 0 0 0" src="https://velog.velcdn.com/images/review_study/post/587a5b33-0e4b-4e86-a988-29f67c7c4c75/image.png"width="800" height="300">
</p>
>
#### - Solution    
>
1. version 확인
```bash
python --version
```
<p align="left" style="margin-left: 40px;">
<img style="margin: 0 0 0 0" src="https://velog.velcdn.com/images/review_study/post/0c34e8ea-3706-48bf-bdab-ef2c6eb2a4e2/image.png" width="500" height="300">
</p>
>
2. python을 2.7에서 3.6으로 변경한다
```bash
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2
```
<p align="left" style="margin-left: 40px;">
<img style="margin: 0 0 0 0" src="https://velog.velcdn.com/images/review_study/post/d810ef3b-8ebd-42d1-a8ea-017b95719133/image.png" width="800" height="300">
</p>
>
3. auto mode로 설정되어있으면 성공적으로 바뀐 것이다.
```bash
update-alternatives --config python
```
<p align="left" style="margin-left: 40px;">
<img style="margin: 0 0 0 0" src="https://velog.velcdn.com/images/review_study/post/0bba1071-9e5e-4d15-a5c2-119387cfe965/image.png" width="700" height="300">
</p>
>
4. pip3에 알맞은 setuptools version을 설치한다.
```bash
pip3 install setuptools==58.2.0
```

</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[ROS2] ROS2 Humble 설치하기]]></title>
            <link>https://velog.io/@review_study/ROS2-ROS2-Humble-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@review_study/ROS2-ROS2-Humble-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0</guid>
            <pubDate>Wed, 01 May 2024 17:56:28 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>💡 <a href="https://docs.ros.org/en/humble/Installation/Alternatives/Ubuntu-Development-Setup.html">ROS2 Humble 공식 홈페이지</a>를 참조하여 내용을 작성하였다.</p>
</blockquote>
<blockquote>
<p>💡 ROS2 Humble은 ubuntu 20.04 혹은 22.04에서만 설치가 가능하다. 특히 ubuntu 22.04에서 설치하는 것을 권장한다.</p>
</blockquote>
<h3 id="1-set-locale">1. Set locale</h3>
<pre><code class="language-bash">locale  # check for UTF-8

sudo apt update &amp;&amp; sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8

locale  # verify settings</code></pre>
<h3 id="2-add-the-ros2-apt-repository">2. Add the ROS2 apt repository</h3>
<pre><code class="language-bash">sudo apt install software-properties-common
sudo add-apt-repository universe

sudo apt update &amp;&amp; sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg

echo &quot;deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release &amp;&amp; echo $UBUNTU_CODENAME) main&quot; | sudo tee /etc/apt/sources.list.d/ros2.list &gt; /dev/null</code></pre>
<h3 id="3-install-development-tools-and-ros-tools">3. Install development tools and ROS tools</h3>
<pre><code class="language-bash">sudo apt update &amp;&amp; sudo apt install -y \
  python3-flake8-docstrings \
  python3-pip \
  python3-pytest-cov \
  ros-dev-tools</code></pre>
<ul>
<li>Ubuntu 22.04일 경우</li>
</ul>
<pre><code class="language-bash">sudo apt install -y \
   python3-flake8-blind-except \
   python3-flake8-builtins \
   python3-flake8-class-newline \
   python3-flake8-comprehensions \
   python3-flake8-deprecated \
   python3-flake8-import-order \
   python3-flake8-quotes \
   python3-pytest-repeat \
   python3-pytest-rerunfailures</code></pre>
<h3 id="4-get-ros2-code">4. Get ROS2 Code</h3>
<pre><code class="language-bash">mkdir -p ~/ros2_humble/src
cd ~/ros2_humble
vcs import --input https://raw.githubusercontent.com/ros2/ros2/humble/ros2.repos src</code></pre>
<h3 id="5-install-dependencies-using-rosdep">5. Install dependencies using rosdep</h3>
<pre><code class="language-bash">sudo apt upgrade

sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src -y --skip-keys &quot;fastcdr rti-connext-dds-6.0.1 urdfdom_headers&quot;</code></pre>
<h3 id="6-build">6. Build</h3>
<pre><code class="language-bash">cd ~/ros2_humble/
colcon build --symlink-install</code></pre>
<blockquote>
</blockquote>
<ul>
<li>ROS2 공식 홈페이지에서 development tool 한 개를 미설치하여, build가 아래와 같이 실패한다. <p align="left" style="margin-left: -10px;">
<img style="margin: 0 0 0 0" src="https://velog.velcdn.com/images/review_study/post/042ea6c0-c971-4c34-803e-5d578febcf16/image.png"/>
</p></li>
<li>아래 command를 이용하여 관련 tool을 설치하면 된다.<pre><code class="language-bash">pip install setuptools==58.2.0</code></pre>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python Error] easy_install command is deprecated. Use build and pip and other standards-based tools.]]></title>
            <link>https://velog.io/@review_study/Python-Error-easyinstall-command-is-deprecated.-Use-build-and-pip-and-other-standards-based-tools</link>
            <guid>https://velog.io/@review_study/Python-Error-easyinstall-command-is-deprecated.-Use-build-and-pip-and-other-standards-based-tools</guid>
            <pubDate>Wed, 01 May 2024 17:45:28 GMT</pubDate>
            <description><![CDATA[<h2 id="문제">문제</h2>
<ul>
<li>컴파일하는 도중 문제가 발생된다.<p align="left">
<img style="margin: 0 0 0 0" src="https://velog.velcdn.com/images/review_study/post/ceaed958-c5aa-4b6a-802e-fcf18c55d1e4/image.png"/>
</p> 

</li>
</ul>
<h2 id="해결방안">해결방안</h2>
<pre><code>pip install setuptools==58.2.0</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[Git Error] error: src refspec main does not match any]]></title>
            <link>https://velog.io/@review_study/Git-Error-error-src-refspec-main-does-not-match-any</link>
            <guid>https://velog.io/@review_study/Git-Error-error-src-refspec-main-does-not-match-any</guid>
            <pubDate>Wed, 01 May 2024 17:40:39 GMT</pubDate>
            <description><![CDATA[<h2 id="문제">문제</h2>
<ul>
<li>git push할 때 문제가 발생된다.<p align="left" style="margin-left: -10px;">
<img style="margin:0 0 0 0" src="https://velog.velcdn.com/images/review_study/post/52ca7618-5190-4c1d-a56b-2df630eb5ab0/image.png"/>
</p> 

</li>
</ul>
<h2 id="해결방안">해결방안</h2>
<pre><code> git branch -m master main</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[Git] 많이 사용하는 git command]]></title>
            <link>https://velog.io/@review_study/Git-%EB%A7%8E%EC%9D%B4-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-git-command</link>
            <guid>https://velog.io/@review_study/Git-%EB%A7%8E%EC%9D%B4-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-git-command</guid>
            <pubDate>Wed, 01 May 2024 14:37:25 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>💡 Local은 코드를 수정한 embedded board 혹은 host pc를 의미한다.</p>
</blockquote>
<h2 id="1-local에서-git으로-파일-올리기">1. local에서 git으로 파일 올리기</h2>
<ul>
<li>Local에서 git으로 파일 올린다.</li>
<li>예시) Local에서 A directory에 있는 a.txt파일 올리기</li>
</ul>
<p align="left" style="margin-left: 75px;">
<img style="margin:0 0 0 0" src="https://velog.velcdn.com/images/review_study/post/d096e210-840e-49ca-bcdb-ad70ea0cf92a/image.png" width="500"/>
</p> 

<pre><code class="language-bash"># 현재 위치 = HOME (A directory가 위치한 곳)
git add A/a.txt
git commit -m &quot;Add a.txt file&quot;
git push -u origin main</code></pre>
<h2 id="2-git에서-local로-파일-다운받기">2. git에서 local로 파일 다운받기</h2>
<ul>
<li>git에서 local로 파일을 다운받는다. 이때 다운 받은 파일이 local에 있는 파일을 덮어 쓰이도록 만든다.</li>
<li>예시) Local에서 A directory안에 a.txt과 b.txt가 존재한다. A directory에 있는 a.txt 만 git에 저장되어 있던 a.txt로 변경하고 싶다. 즉, local에 있는 a.txt을 덮어 씌우고자 한다.</li>
</ul>
<p align="left" style="margin-left: 75px;">
<img style="margin:0 0 0 0" src="https://velog.velcdn.com/images/review_study/post/80321810-f661-4b66-ae47-c34853ca3df9/image.png" width="500"/>
</p> 

<pre><code># 현재 위치 = HOME (A directory가 위치한 곳)
git init
# git_address는 git clone을 하기 위해서 제공되는 url과 동일하다.
git remote add origin &lt;git_address&gt;
git remote -v
git fetch --all
git reset --hard origin/main
git pull origin main</code></pre><h2 id="3-git에서-파일-지우기">3. git에서 파일 지우기</h2>
<ul>
<li>local에는 파일이 있지만, git에서는 파일을 제거하고자 할 때 사용한다.</li>
<li>예시) git에서 A directory의 b.txt 파일을 지운다. 이때 Local에는 A directory의 b.txt 파일이 존재한다. 주로 실험한 결과 data들을 정리할 때 사용된다. </li>
</ul>
<p align="left" style="margin-left: 75px;">
<img style="margin:0 0 0 0" src="https://velog.velcdn.com/images/review_study/post/4cde503e-a90c-488d-aedf-d5aca85a46a0/image.png" width="500"/>
</p> 

<pre><code># 현재 위치 = HOME (A directory가 위치한 곳)
git rm --cached A/b.txt
git commit -m &quot;remove b_file&quot;</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[Writing Code] Dummy Task 만들기]]></title>
            <link>https://velog.io/@review_study/Linux-Kernel-Development-Dummy-Task-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@review_study/Linux-Kernel-Development-Dummy-Task-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Sun, 28 Apr 2024 13:01:50 GMT</pubDate>
            <description><![CDATA[<h2 id="1-목적">1. 목적</h2>
<ul>
<li>임의의 실행시간을 갖는 task를 만들고자 한다. </li>
<li>일반적으로 for 문을 사용하여 임의의 실행시간을 갖는 task를 만든다. </li>
<li>그러나, for 문을 사용하게 되면 컴파일러가 최적화하여 개발자의 의도와는 다르게 동작할 수 있게 된다. 따라서 <code>__asm__ volatile</code>를 사용하여 컴파일러가 최적화하지 못하도록 한다. </li>
</ul>
<h2 id="2-예시-코드">2. 예시 코드</h2>
<ul>
<li><code>load</code> cycle 만큼 시간을 지연시키는 task를 의미한다. <pre><code class="language-cpp">void dummy_task(long load) {
  long i;
  for (i = 0 ; i &lt; load; i++) 
      __asm__ volatile (&quot;nop&quot;);
}</code></pre>
</li>
</ul>
<ol>
<li><code>__asm__ volatile (&quot;nop&quot;);</code><ul>
<li><code>volatile</code>은 메모리 직접 접근을 의미한다.</li>
<li><code>nop</code>은 no operation으로 아무것도 하지 않는 것을 의미한다.</li>
<li><strong>asm</strong> volatile (&quot;nop&quot;) 는 1 cycle을 지연한다는 의미한다.</li>
</ul>
</li>
<li>CPU frequency<ul>
<li>1 cycle 지연시간을 알기 위해서는 현재 cpu의 frequency를 알아야 한다.</li>
<li><code>lscpu</code> 명령어를 사용하여 현재 cpu의 frequcy를 확인한다. <ul>
<li>아래의 결과를 예로 들어서 설명한다. 현재 cpu가 max frequency (performance mode) 를 사용한다면, 1 cycle 당 약 0.7ns가 걸린다.</li>
</ul>
</li>
</ul>
</li>
</ol>
<p align="left" style="margin-left: 75px;">
<img style="margin:0 0 5px 0" src="https://velog.velcdn.com/images/review_study/post/6405ddc7-3cdc-4fec-8368-5d89193a68e4/image.png">
</p> 

<ol start="3">
<li>Dummy task<ul>
<li>따라서 max frequency를 사용하고 있을 때, 0.3s를 실행하는 dummy task를 만들고 싶다면 load는 4*(10^8) (=0.3s/0.7ns)가 되어야 한다.</li>
<li>이때, loop overhead가 존재하기 때문에 <strong>asm</strong> volatile (&quot;nop&quot;); 를 10번 연속해서 사용하고, load를 4*(10^7)로 사용하면 훨씬 더 정확한 결과가 나온다. </li>
</ul>
</li>
</ol>
<h2 id="3-활용방법">3. 활용방법</h2>
<ol>
<li>먼저 <code>benchmark.cpp</code> 파일을 만들고, 아래 코드를 붙여넣는다.<ul>
<li>input으로 원하는 시간을 넣으면, output으로 load를 반환하는 코드이다.</li>
<li>이 코드를 이용하면, 미리 프로파일링한 값으로 dummy task를 만들 수 있다.<pre><code class="language-cpp">#include &lt;chrono&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
</code></pre>
</li>
</ul>
</li>
</ol>
<p>void dummy_task(long load) {
    for (long i = 0; i &lt; load; i++) {
        <strong>asm</strong> volatile (&quot;nop&quot;);
        <strong>asm</strong> volatile (&quot;nop&quot;);
        <strong>asm</strong> volatile (&quot;nop&quot;);
        <strong>asm</strong> volatile (&quot;nop&quot;);
        <strong>asm</strong> volatile (&quot;nop&quot;);
        <strong>asm</strong> volatile (&quot;nop&quot;);
        <strong>asm</strong> volatile (&quot;nop&quot;);
        <strong>asm</strong> volatile (&quot;nop&quot;);
        <strong>asm</strong> volatile (&quot;nop&quot;);
        <strong>asm</strong> volatile (&quot;nop&quot;);
    }
}</p>
<p>double measure_execution_time(long load) {
    auto start = std::chrono::high_resolution_clock::now();
    dummy_task(load);
    auto end = std::chrono::high_resolution_clock::now();
    std::chrono::duration&lt;double, std::milli&gt; execution_time = end - start;
    return execution_time.count();
}</p>
<p>double measure_average_execution_time(long load, int num_measurements = 10) {
    double total_time = 0.0;
    for (int i = 0; i &lt; num_measurements; i++) {
        total_time += measure_execution_time(load);
    }
    return total_time / num_measurements;
}</p>
<p>long calculate_load_for_target_time(double target_time, double initial_time, long initial_load) {
    double ratio = target_time / initial_time;
    return static_cast<long>(initial_load * ratio);
}</p>
<p>int main(int argc, char* argv[]) {
    if (argc &lt; 2) {
        std::cerr &lt;&lt; &quot;Usage: &quot; &lt;&lt; argv[0] &lt;&lt; &quot; <target_time_ms>&quot; &lt;&lt; std::endl;
        return 1;
    }</p>
<pre><code>double target_time = std::stod(argv[1]);

long initial_load = 100;

double average_initial_time = measure_average_execution_time(initial_load);

long estimated_load = calculate_load_for_target_time(target_time, average_initial_time, initial_load);

std::cout &lt;&lt; &quot;Measured execution time for initial load &quot; &lt;&lt; initial_load &lt;&lt; &quot;: &quot; &lt;&lt; average_initial_time &lt;&lt; &quot; ms&quot; &lt;&lt; std::endl;
std::cout &lt;&lt; &quot;For a target time of &quot; &lt;&lt; target_time &lt;&lt; &quot; ms, the estimated load is: &quot; &lt;&lt; estimated_load &lt;&lt; std::endl;

return 0;</code></pre><p>}</p>
<pre><code>2. 아래 command를 이용하여 컴파일한다.
```bash
g++ -o benchmark_test benchmark_test.cpp</code></pre><ol start="3">
<li>아래 command를 이용하면, 원하는 시간에 따른 load가 반환된다. <pre><code class="language-bash">./benchmark_test &lt;원하는 시간&gt;</code></pre>
<p align="left" style="margin-left: 20px;">
<img style="margin:0 0 5px 0" src="https://velog.velcdn.com/images/review_study/post/0344b988-eb09-443e-9208-dd09ef7a6253/image.png">
</p>



</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Jetson Nano] Network Driver 설치하기 ]]></title>
            <link>https://velog.io/@review_study/Jetson-Nano-Network-Driver-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@review_study/Jetson-Nano-Network-Driver-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0</guid>
            <pubDate>Fri, 26 Apr 2024 12:50:00 GMT</pubDate>
            <description><![CDATA[<h2 id="1-check-driver">1. Check driver</h2>
<h4 id="jetson-nano에서-network-driver를-확인한다">Jetson Nano에서 network driver를 확인한다.</h4>
<pre><code>ethtool -i eth0</code></pre><p align="center" style="color:gray">
<img style="margin:0 0 5px 0" src="https://velog.velcdn.com/images/review_study/post/5040e54a-0db1-4f30-9593-abf01d5db351/image.png">
</p> 

<br/>

<h2 id="2-install-driver">2. Install driver</h2>
<h4 id="1-driver-source-code-file를-다운받는다">1. <a href="https://velog.velcdn.com/images/review_study/post/122481b7-f0b8-4737-8769-7d9348feb9aa/image.bz2">Driver Source Code File</a>를 다운받는다.</h4>
<h4 id="2-다운-받은-file의-압축을-푼다">2. 다운 받은 file의 압축을 푼다.</h4>
<pre><code>tar vjxf 0009-r8168-8.044.02.tar.bz2</code></pre><h4 id="3-driver-모듈을-컴파일-한다">3. Driver 모듈을 컴파일 한다.</h4>
<pre><code>cd r8168-8.044.02
sudo make clean modules
sudo make -j4</code></pre><h4 id="4-kernel에서-built-in-모듈이-아닌-다운받은-모듈을-사용할-수-있도록-변경해준다">4. Kernel에서 built-in 모듈이 아닌 다운받은 모듈을 사용할 수 있도록 변경해준다.</h4>
<p>(1) 아래의 command를 실행하면 그림과 같이 나타난다.</p>
<pre><code>cd Linux_for_Tegra/source/public/kernel/kernel-4.9
make menuconfig</code></pre><p align="center" style="color:gray">
<img style="margin:0 0 0 0" src="https://velog.velcdn.com/images/review_study/post/0c90cf7c-c406-4c1b-99af-21cb199f2569/image.png">
</p> 
<br/>
(2) "/r8168"을 치면 아래와 그림과 같이 나타남. "ok"를 누르면 된다.
<p align="center" style="color:gray">
<img style="margin:0 0 0 0" src="https://velog.velcdn.com/images/review_study/post/a1876ce9-9abd-425e-a19f-cd6aa9659364/image.png">
</p> 
<br/>
(3) "1" 누르고, 아래 그림과 같이 "M"으로 바꿔주면 다운받은 모듈을 사용할 수 있다.
<p align="center" style="color:gray">
<img style="margin:0 0 0 0" src="https://velog.velcdn.com/images/review_study/post/881092c9-59b4-42fe-a5b4-26dbedcdd6e5/image.png">
</p> 

<h4 id="5-kernel-컴파일하고-reboot-한다">5. Kernel 컴파일하고, reboot 한다.</h4>
<pre><code>make prepare &amp;&amp; make modules_prepare &amp;&amp; make -j4 Image &amp;&amp; make -j4 modules 
sudo make modules_install &amp;&amp; sudo cp arch/arm64/boot/Image /boot/Image
sudo reboot</code></pre><h4 id="6-기존의-built-in-driver를-rmmod한-후-설치한-모듈을-insmod하기">6. 기존의 built-in driver를 rmmod한 후, 설치한 모듈을 insmod하기</h4>
<pre><code>sudo rmmod r8168 &amp;&amp; sudo insmod ./src/r8168.ko</code></pre><h4 id="6-만약-custom-모듈을-기본으로-설정하고-싶다면-만들어진-ko-파일을-아래-directory로-copy하면-된다">6. 만약 custom 모듈을 기본으로 설정하고 싶다면, 만들어진 ko 파일을 아래 directory로 copy하면 된다.</h4>
<pre><code>sudo cp ./src/r8168.ko /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/realtek/</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[Jetson Nano] Kernel 컴파일하기]]></title>
            <link>https://velog.io/@review_study/Jetson-Nano-Kernel-%EC%BB%B4%ED%8C%8C%EC%9D%BC</link>
            <guid>https://velog.io/@review_study/Jetson-Nano-Kernel-%EC%BB%B4%ED%8C%8C%EC%9D%BC</guid>
            <pubDate>Fri, 26 Apr 2024 12:31:23 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>💡 <a href="https://blog.hypriot.com/post/nvidia-jetson-nano-build-kernel-docker-optimized/">블로그 글</a>을 참고하여 글을 작성하였다.</p>
</blockquote>
<blockquote>
<p>💡 Nvidia에서 제공하는 <a href="https://developer.nvidia.com/embedded/jetson-linux-archive">Jetpack Archive</a>에 따르면, 현재 Jetson Nano는 <strong>Ubuntu 18.04</strong>까지만 지원한다. 따라서 Ubuntu 18.04와 호환되는 <strong>Kernel 4.9</strong>의 Source code로 컴파일을 진행한다. </p>
</blockquote>
<blockquote>
<p>💡 Host machine에서 컴파일하여 image를 Jetson Nano에 flash하는 것이 아니라, Jetson Nano에서 kernel 컴파일하는 방법을 작성한다.</p>
</blockquote>
<h2 id="1-download--unzip-kernel-source-code">1. Download &amp; Unzip kernel source code</h2>
<pre><code class="language-bash">wget https://developer.nvidia.com/embedded/l4t/r32_release_v7.1/sources/t210/public_sources.tbz2
tar -xvf public_sources.tbz2
cd Linux_for_Tegra/source/public
tar -xvf kernel_src.tbz2</code></pre>
<h2 id="2-get-configure-file">2. Get configure file</h2>
<pre><code class="language-bash">cd kernel/kernel-4.9
zcat /proc/config.gz &gt; .config</code></pre>
<h2 id="3-compile-kernel">3. Compile kernel</h2>
<pre><code class="language-bash">make menuconfig
make prepare &amp;&amp; make modules_prepare &amp;&amp; make -j4 Image &amp;&amp; make -j4 modules</code></pre>
<blockquote>
</blockquote>
<h4 id="--error-fatal-error-cursesh-no-such-file-or-directory">- Error: fatal error: curses.h: No such file or directory</h4>
<ul>
<li><code>make menuconfig</code> 할 때 아래 라이브러리가 설치되어있지 않으면 문제가 생긴다.  <h4 id="--solution">- Solution</h4>
<pre><code class="language-bash">sudo apt-get install libncurses5-dev libncursesw5-dev</code></pre>
</li>
</ul>
<h2 id="4-install-kernel">4. Install kernel</h2>
<pre><code class="language-bash">sudo make modules_install &amp;&amp; sudo cp arch/arm64/boot/Image /boot/Image</code></pre>
<h2 id="5-reboot">5. Reboot</h2>
<pre><code class="language-bash">sudo reboot</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Jetson Nano] OS 설치하기]]></title>
            <link>https://velog.io/@review_study/Jetson-Nano-OS-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@review_study/Jetson-Nano-OS-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0</guid>
            <pubDate>Fri, 26 Apr 2024 12:05:00 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>💡 <a href="https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#write">Nvidia 공식 홈페이지</a>를 참고하여 글을 작성하였다.</p>
</blockquote>
<blockquote>
<p>💡 Nvidia에서 제공하는 <a href="https://developer.nvidia.com/embedded/jetson-linux-archive">Jetpack Archive</a>에 따르면, 현재 Jetson Nano는 Ubuntu 18.04까지만 지원한다. Ubuntu 20.04 혹은 22.04를 사용하고 싶다면, Jetson Orin Nano를 활용해야한다.</p>
</blockquote>
<h2 id="1-download--format-sd-card">1. Download &amp; Format SD card</h2>
<h4 id="1-sd-memory-card-formatter-for-window-download-사이트를-들어간-후-하단의-accept을-눌러서-formatter를-download-한다">1) <a href="https://www.sdcard.org/downloads/formatter/sd-memory-card-formatter-for-windows-download/">SD Memory Card Formatter for Window Download</a> 사이트를 들어간 후, 하단의 Accept을 눌러서 formatter를 download 한다.</h4>
<h4 id="2-sd-card-리더기를-이용하여-컴퓨터가-sd-card를-인식할-수-있도록-한다">2) <a href="https://search.danawa.com/dsearch.php?query=%EC%97%91%ED%86%A0+%EC%B9%B4%EB%93%9C%EB%A6%AC%EB%8D%94+%EA%B2%B8%EC%9A%A9+USB+%ED%97%88%EB%B8%8C&amp;tab=main">SD Card 리더기</a>를 이용하여, 컴퓨터가 SD card를 인식할 수 있도록 한다.</h4>
<h4 id="3-formatter가-sd-card를-인식하면-아래와-같이-선택한다">3) formatter가 SD card를 인식하면 아래와 같이 선택한다.</h4>
<ul>
<li>&quot;Select card&quot;에서 삽입한 SD card의 driver를 선택한다.</li>
<li>&quot;Formatting options&quot;에서 &quot;Quick format&quot;을 선택한다.</li>
<li>하단의 &quot;Format&quot; 버튼을 누른다.<p align="center" style="color:gray">
<img style="margin:0 0 5px 0" src="https://velog.velcdn.com/images/review_study/post/c91fa149-390c-4fd0-a7ee-2f130a800241/image.png">
</p> 

</li>
</ul>
<h2 id="2-download--flush-sd-card-image">2. Download &amp; Flush SD card image</h2>
<h4 id="1-flash-os-image-to-sd-card-사이트를-들어가서-etcher를-download한다">1) <a href="https://etcher.balena.io/">Flash OS image to SD card</a> 사이트를 들어가서 Etcher를 download한다.</h4>
<h4 id="2-ether를-실행한다">2) Ether를 실행한다.</h4>
<p align="center" style="color:gray">
<img style="margin:0 0 5px 0" src=
"https://velog.velcdn.com/images/review_study/post/6f2b45ec-3cc8-4f2c-a2a2-ae14f3e452f0/image.png">
</p> 

<h4 id="3-실행한-etcher에서-flush할-image-선택한다-image를-선택하는-방법에는-두-가지가-있다">3) 실행한 Etcher에서 flush할 image 선택한다. image를 선택하는 방법에는 두 가지가 있다.</h4>
<ul>
<li><a href="https://developer.nvidia.com/jetson-nano-sd-card-image">URL</a>을 복사해서 넣는다. (&quot;Flash from URL&quot; 선택)</li>
<li><a href="https://developer.nvidia.com/jetson-nano-sd-card-image">URL</a>을 클릭하여, SD card image를 다운받아서 넣는다. (&quot;Flash from file&quot; 선택)</li>
</ul>
<h4 id="4-위에서-format한-sd-card를-select-target에서-선택한다">4) 위에서 format한 SD card를 &quot;Select target&quot;에서 선택한다.</h4>
<h4 id="5-flash-버튼을-누른다-약-1시간정도-소요된다">5) &quot;Flash!&quot; 버튼을 누른다. 약 1시간정도 소요된다.</h4>
]]></description>
        </item>
    </channel>
</rss>