• ์„ค์น˜ํ™˜๊ฒฝ, Ubuntu 24.04

    ์„ค์น˜ํ•  ๋•Œ, ์–ธ์–ด๋Š” ์˜์–ด(English)๋กœ ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœ. ํ•œ๊ธ€ ์ž…๋ ฅ์€ https://ahnbk.dev/?p=368 ์ฐธ๊ณ .

    ROS2 ์„ค์น˜์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ ๊ณต์‹ ๋ฌธ์„œ ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐ. (https://docs.ros.org/en/jazzy/Installation/Ubuntu-Install-Debians.html)


    Repository ์„ค์ •

    $ sudo apt install software-properties-common
    $ sudo add-apt-repository universe
    $ sudo apt update && 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 "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

    ROS2 ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ํˆด๋“ค์„ ๋ชจ์•„๋†“์€ ๋ฉ”ํƒ€ ํŒจํ‚ค์ง€ ์„ค์น˜ (์˜ต์…˜)

    $ sudo apt install ros-dev-tools


    ROS2 ์„ค์น˜ ์‹œ์ž‘

    $ sudo apt update
    $ sudo apt install ros-jazzy-desktop

    DDS ์„ค์น˜. ๊ธฐ๋ณธ์œผ๋ก  FastRTPS๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์œผ๋‚˜, CycloneDDS์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•จ

    $ sudo apt install ros-jazzy-rmw-cyclonedds-cpp


    ํ™˜๊ฒฝ์„ค์ •

    $ echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc

    ๋„๋ฉ”์ธ ์•„์ด๋”” ์„ค์ •

    $ echo "export ROS_DOMAIN_ID=<your_domain_id>" >> ~/.bashrc

    Jazzy ๋ฒ„์ „๋ถ€ํ„ฐ๋Š” DDS๋ฅผ ์ด์šฉํ•œ ์ž๋™ ์—ฐ๊ฒฐ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋ฒ”์œ„๋ฅผ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ • ๊ฐ€๋Šฅ

    $ echo "export ROS_AUTOMATIC_DISCOVERY_RANGE=<discover option>" >> ~/.bashrc

    ์˜ต์…˜๊ฐ’์€ ๋‹ค์Œ์˜ ํ•œ ์ข…๋ฅ˜๋ฅผ ์„ ํƒ

    SUBNET : ํ˜„์žฌ ์„œ๋ธŒ๋„ท ์„ค์ • (์˜ˆ: 255.255.255.0)์— ๋”ฐ๋ผ Node ๋ฐœ๊ฒฌ(Discover) ๋ฐ ์—ฐ๊ฒฐ (Default)
    LOCALHOST : ํ˜„์žฌ ๋จธ์‹  ๋‚ด์—์„œ๋งŒ Node ๋ฐœ๊ฒฌ(Discover) ๋ฐ ์—ฐ๊ฒฐ 
    OFF : ๋‹ค๋ฅธ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š์Œ, ๋‹จ๋… ์‹คํ–‰
    SYSTEM_DEFAULT : ์ดˆ๊ธฐ๊ฐ’ ์‚ฌ์šฉ (SUBNET)

    ์„ค์ •์ด ๋๋‚œ ๋‹ค์Œ, source๋‚˜ ํ„ฐ๋ฏธ๋„ ์žฌ์‹คํ–‰์œผ๋กœ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์…‹์—… ์ ์šฉ

    $ source ~/.bashrc


    ๊ฐœ๋ฐœํˆด(colcon) ์„ค์น˜ ๋ฐ ์„ค์ •

    $ sudo apt install python3-colcon-common-extensions

    colcon_cd ๋ช…๋ น ์‚ฌ์šฉ์„ ์œ„ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์…‹์—…

    $ echo "source /usr/share/colcon_cd/function/colcon_cd.sh" >> ~/.bashrc
    $ echo "export _colcon_cd_root=/opt/ros/jazzy/" >> ~/.bashrc

    workspace ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ

    $ mkdir -p ~/dev_ws/src
    $ cd ~/dev_ws

    ๋นŒ๋“œ

    $ colcon build --symlink-install

    ํ˜„์žฌ workspace ์‚ฌ์šฉํ•˜๋„๋ก ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •

    $ echo "source ~/dev_ws/install/setup.bash" >> ~/.bashrc

    rosdep ์„ค์น˜

    $ sudo apt install python3-rosdep
    $ sudo rosdep init
    $ rosdep update

    vcstool ์„ค์น˜

    $ sudo apt install python3-vcstool

    ์ด๊ฒƒ์œผ๋กœ ์ผ๋‹จ ๊ธฐ๋ณธ ์„ค์น˜ ๋ฐ ํ™˜๊ฒฝ ์…‹์—… ์™„๋ฃŒ.

  • ์„ค์น˜๋Š” ๊ฐ„๋‹จํžˆ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž…๋ ฅํ•˜์—ฌ ์„ค์น˜

    $ sudo apt install neovim

    ๋‹ค์Œ์œผ๋กœ, ๊ธฐ๋ณธ vi, vim ์ปค๋งจ๋“œ๋ฅผ ์ž…๋ ฅ์‹œ ์ž๋™์œผ๋กœ nvim์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋„๋ก ์„ค์ •ํ•œ๋‹ค.

    $ sudo update-alternatives --config vim
    There are 2 choices for the alternative vim (providing /usr/bin/vim).
    
      Selection    Path                Priority   Status
    ------------------------------------------------------------
      0            /usr/bin/nvim        30        auto mode
    * 1            /usr/bin/nvim        30        manual mode
      2            /usr/bin/vim.basic   30        manual mode
    
    Press <enter> to keep the current choice[*], or type selection number:

    ์—ฌ๊ธฐ์„œ /user/bin/nvim์„ ์„ ํƒํ•˜๋ฉด, vim ์ž…๋ ฅ์‹œ nvim์ด ์‹คํ–‰์ด ๋จ. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ vi์— ๋Œ€ํ•ด์„œ๋„ ์„ค์ •.

    $ sudo update-alternatives --config vi
    There are 2 choices for the alternative vi (providing /usr/bin/vi).
    
      Selection    Path                Priority   Status
    ------------------------------------------------------------
      0            /usr/bin/nvim        30        auto mode
    * 1            /usr/bin/nvim        30        manual mode
      2            /usr/bin/vim.basic   30        manual mode
    
    Press <enter> to keep the current choice[*], or type selection number:

    ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 1๋ฒˆ ์„ ํƒ.

    alias๋‚˜ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋ฒˆ๊ฑฐ๋กญ๊ฒŒ ์„ค์ •ํ•˜๋Š” ๋Œ€์‹ , ์œ„์™€ ๊ฐ™์ด ์„ค์ •ํ•˜๋ฉด ๊ฐ„๋‹จํžˆ ํ•ด๊ฒฐ๋จ.

  • ํ˜„์žฌ ์•„์ดํฐ์„ ๋ฉ”์ธ ํšŒ์„ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ , ๋‘ ๊ฐœ์˜ ์•„์ดํŒจ๋“œ๋ฅผ ๋ฐ์ดํ„ฐ ํ•จ๊ป˜์“ฐ๊ธฐ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์ „์—๋Š” ์•„์ดํŒจ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜๋ฉด, ํ˜„์žฌ ๊ผฝํ˜€์žˆ๋Š” ์œ ์‹ฌ์„ ๋ฝ‘์•„์„œ, ์ƒˆ๋กœ์šด ์•„์ดํŒจ๋“œ์— ๊ผฝ์œผ๋ฉด ๋ณ„๋‹ค๋ฅธ ๋ฌธ์ œ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ, ์˜ฌํ•ด 9์›”๋ถ€ํ„ฐ ์•ฝ๊ฐ„์˜ ์ •์ฑ…์ด ๋ฐ”๋€Œ์—ˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

    ๊ฒฐ๋ก ์œผ๋ก ,

    ์˜ˆ์ „ ์•„์ดํŒจ๋“œ์—์„œ ์œ ์‹ฌ์„ ๋ฝ‘๊ธฐ ์ „, ๋ฐ˜๋“œ์‹œ ํ•ด๋‹น ๊ธฐ๊ธฐ์˜ ์ „์›์„ ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ „์›์ด ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋œ ์ดํ›„์—, ์œ ์‹ฌ์„ ๋ฝ‘์•„ ์ƒˆ๋กœ์šด ๊ธฐ๊ธฐ์— ๊ผฝ๊ฒŒ ๋˜๋ฉด, ์ž ์‹œ ํ›„ ๋ฐ”๋กœ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋˜ ์ „์›์„ ๋ˆ ์ดํ›„ 24์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค.

    ์œ„ ๊ณผ์ •์„ ๊ฑฐ์น˜์น˜ ์•Š์œผ๋ฉด, ํ•ด๋‹น ์œ ์‹ฌ์ด ๋ฝ์ด ๊ฑธ๋ ค์„œ ํ†ต์‹ ์ด ์•ˆ๋˜๋„๋ก ํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ๋Š” ์˜ˆ์ „ ๊ธฐ๊ธฐ์— ๋‹ค์‹œ ์œ ์‹ฌ์„ ๊ผฝ๊ณ , ์ „์› ์ข…๋ฃŒ๋ฅผ ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ „ ๊ธฐ๊ธฐ๊ฐ€ ์—†์–ด์ง„ ์ƒํƒœ๊ฑฐ๋‚˜, ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด ์–ด์ฉ”์ˆ˜ ์—†์ด ๋Œ€๋ฆฌ์ ์— ๋ฐฉ๋ฌธํ•ด์•ผ ํ•  ๋“ฏ ํ•˜๋„ค์š”.

  • Xenomai๋Š” ๊ธฐ์กด Linux ์‹œ์Šคํ…œ์˜ ์ปค๋„๊ณผ ๋ณ‘ํ–‰ํ•˜์—ฌ ์‹คํ–‰๋˜๋ฉฐ, Hard Realtime Task๋ฅผ ์ง€์›ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋ ˆ์ž„์›์ž…๋‹ˆ๋‹ค. ์„ค์น˜ ๋ฐฉ๋ฒ•๋„ ๊ฐ„๋‹จํ•˜๊ณ , POSIX ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง€์›ํ•˜์—ฌ ๊ฐœ๋ฐœ๋„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ธํ„ฐ๋„ท์—์„œ Xenomai ์„ค์น˜ ๋ฐฉ๋ฒ•์„ ๊ฒ€์ƒ‰ํ•ด๋ณด๋ฉด, Xenomai2 ๋ฒ„์ „๊ณผ ์˜ˆ์ „ Linux ๋ฒ„์ „์„ ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…ํ•ด๋†“๋Š” ๊ฒƒ๋“ค์ด ๋งŽ๊ณ  (๊ทธ๋งŒํผ ์ธ๊ธฐ๊ฐ€ ์—†๋‹ค๋Š” ์–˜๊ธฐ…) Xenomai3๋ผ๊ณ  ํ•ด๋„ ์˜ˆ์ „ iPipe๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์œ„์ฃผ๋ผ์„œ, ๊ฐ€์žฅ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ Xenomai๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

    ๋ฌผ๋ก  Xenoami๋„ Xenomai4 ๋ฒ„์ „์ด ์ถœ์‹œ๋˜์–ด์žˆ๊ธด ํ•˜์ง€๋งŒ, ์•„์ง๊นŒ์ง„ ์„ฑ๋Šฅ ๊ฒ€์ฆ ๋ฐ ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์นœ์ ˆํ•œ ๋ฌธ์„œ๋ฅผ ์ฐพ์•„๋ณด๊ธฐ๊ฐ€ ํž˜๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํฌ์ŠคํŠธ๋Š” Xenoami3, Ubuntu 22.04 ๋ฒ„์ „์„ ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ˆ๋‹ค.

    ๋จผ์ € ์ปค๋„์„ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•œ ํˆด์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

    $ sudo apt install git build-essential libncurses-dev flex bison libelf-dev libssl-dev devscripts debhelper

    ๋‹ค์Œ์œผ๋กœ ์ž‘์—…ํ•  ์ž„์‹œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ , ๊ทธ๊ณณ์— ์ปค๋„ ๋ฐ Xenomai ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์†Œ์Šค๋ฅผ ๋ฐ›์•„์˜ต๋‹ˆ๋‹ค.

    $ mkdir ~/tmp
    $ cd ~/tmp
    $ wget https://source.denx.de/Xenomai/linux-dovetail/-/archive/v6.1.61-dovetail1/linux-dovetail-v6.1.61-dovetail1.tar.gz
    $ wget https://source.denx.de/Xenomai/xenomai/-/archive/v3.2.4/xenomai-v3.2.4.tar.gz
    
    
    $ tar zxf linux-dovetail-v6.1.61-dovetail1.tar.gz
    $ tar zxf xenomai-v3.2.4.tar.gz

    ์ปค๋„ ๋ฒ„์ „์€ ์ž์œ ๋กญ๊ฒŒ ์„ ํƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜๋Š” ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„ ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์ ์ ˆํžˆ ์„ ํƒํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ €๋Š” 6.1.61 ๋ฒ„์ „์„ ์„ ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ipipe ํŒจ์น˜๋ฅผ ํ•ด์ค˜์•ผ ํ–ˆ์ง€๋งŒ, ipipe๋Š” ๊ฐœ๋ฐœ์ด ์ข…๋ฃŒ๋˜์—ˆ๊ณ , dovetail์ด ๊ทธ ๊ธฐ๋Šฅ์„ ์ด์–ด๋ฐ›์•„ ๊ฐœ๋ฐœ ์ค‘์ž…๋‹ˆ๋‹ค. ์œ„ Repository์—์„œ๋Š” dovetail์ด ํŒจ์น˜๋œ ์ปค๋„ ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Xenomai ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ฐ€์žฅ ์ตœ์‹  ๋ฒ„์ „์ธ 3.2.4๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    Xenomai๋Š” ๋‘ ๊ฐ€์ง€ ๋ชจ๋“œ๋กœ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•œ๋ฐ, Cobalt๋Š” ๊ธฐ์กด ์ปค๋„๊ณผ Xenomai ์ปค๋„์„ ๋™์‹œ์— ์กด์žฌํ•˜๊ณ , ๋‘ ๊ฐœ์˜ ์ปค๋„ ์‚ฌ์ด์˜ ํ†ต์‹ ์„ ์œ„ํ•ด dovetail์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.

    ์ปค๋„์„ ํŒจ์น˜ํ•˜๊ธฐ ์œ„ํ•ด ํŒจ์น˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ปค๋„ ์†Œ์Šค์— ์ ์šฉํ•ด ์ค๋‹ˆ๋‹ค.

    $ cd ~/tmp/xenomai-v3.2.4/scripts
    $ ./prepare-kernel.sh --linux=/home/robot/tmp/linux-dovetail-v6.1.61-dovetail1 --arch=x86_64 --outpatch=/home/robot/tmp/patch-cobalt-3.2.4.patch
    
    $ cd ~/tmp/linux-dovetail-v6.1.61-dovetail1
    $ patch -p1 < ../patch-cobalt-3.2.4.patch

    ์ด์ œ ์ปค๋„์„ ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค. make menuconfig ๋ฅผ ์ด์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์„ค์น˜๋œ Ubuntu์˜ ์ปค๋„ ์„ค์ •์„ ๋ณต์‚ฌํ•˜์—ฌ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    $ cd ~/tmp/linux-dovetail-v6.1.61-dovetail1
    $ cp /boot/config-`uname -r` .config
    $ make menuconfig

    ๋ช‡๊ฐ€์ง€ ํ•„์ˆ˜ ์„ค์ •๋“ค์ด ํ•„์š”ํ•˜๊ณ , ๊ทธ ์™ธ์—” ์‚ฌ์šฉํ•˜๋Š” ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์ปค๋„ ๋ชจ๋“ˆ ๋ฐ ์„ค์ •์„ ์ถ”๊ฐ€/์‚ญ์ œํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

    General setup  --->
    	Preemption Model (Preemptible Kernel --->
    		(X) Preemptible Kernel (Low-Latency Desktop)
    
    Processor type and features  --->
    	Processor family (Generic-x86-64)  --->
    		(X) Core 2/newer Xeon
    
    	[*] Multi-core scheduler support
    	[ ]   CPU core priorities scheduler support
    
    Power management and ACPI options  --->
    	CPU Frequency scaling  --->
    		[ ] CPU Frequency scaling
    
    	[*] ACPI (Advanced Configuration and Power Interface) Support  --->
    		< >   Processor
    
    	CPU Idle  --->
    		[ ] CPU idle PM support
    
    Memory Management options  --->
    	[ ] Transparent Hugepage Support
    	[ ] Allow for memory compaction
    	[ ] Page migration
      [ ] Contiguous Memory Allocator
    
    
    [*] Xenomai/cobalt (NEW)  --->
    	Drivers  --->
    		RTnet  --->
    			<M> RTnet, TCP/IP socket interface
    				Drivers  --->
    
        Real-time IPC drivers  --->
          <M> RTIPC protocol family
            [*]   XDDP cross-domain datagram protocol (NEW)
            [*]   IDDP intra-domain datagram protocol (NEW)
            (32)    Number of IDDP communication ports (NEW)
            [*]   Buffer protocol (NEW)
            (32)    Number of BUFP communication ports (NEW)

    ์ €์žฅํ•˜๊ณ , ๋‹ค์‹œ ํ„ฐ๋ฏธ๋„๋กœ ๋Œ์•„์˜ต๋‹ˆ๋‹ค.

    ๋นŒ๋“œํ•˜๊ธฐ ์ „์— ์‹œ์Šคํ…œ ํ‚ค ์„ค ์ • ๋ฐ ๋””๋ฒ„๊น…์ฝ”๋“œ ์ƒ์„ฑ์„ ์ค‘์ง€ํ•˜๋„๋ก ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ํ‚ค ์„ค์ •์€ ๋”ฐ๋กœ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š” ํ•œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ , ๋””๋ฒ„๊น… ์ฝ”๋“œ์˜ ์ƒ์„ฑ ์ค‘์ง€๋Š” ๋นŒ๋“œ๋ฅผ ์กฐ๊ธˆ ๋” ๋น ๋ฅด๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

    $ scripts/config --disable SYSTEM_TRUSTED_KEYS
    $ scripts/config --set-str CONFIG_SYSTEM_TRUSTED_KEYS ""
    $ scripts/config --disable SYSTEM_REVOCATION_KEYS
    $ scripts/config --set-str CONFIG_SYSTEM_REVOCATION_KEYS ""
    $ scripts/config --disable CONFIG_DEBUG_INFO_BTF
    
    $ scripts/config --disable GDB_SCRIPTS
    $ scripts/config --disable DEBUG_INFO
    $ scripts/config --disable DEBUG_INFO_SPLIT
    $ scripts/config --disable DEBUG_INFO_REDUCED
    $ scripts/config --disable DEBUG_INFO_COMPRESSED
    $ scripts/config --set-val DEBUG_INFO_NONE y
    $ scripts/config --set-val DEBUG_INFO_DWARF5 n
    $ scripts/config --disable DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT

    ์ด์ œ ๋นŒ๋“œ๋ฅผ ์ง„ํ–‰ํ•ด ์ค๋‹ˆ๋‹ค. (์•„์ฃผ~~~ ์ข‹์€ PC๊ฐ€ ์•„๋‹ˆ๋ฉด ๋Œ€์ถฉ 1์‹œ๊ฐ„ ์‚ด์ง ๋„˜๊ฒŒ ๊ฑธ๋ฆฌ๋Š” ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค. )

    $ make -j4 bindeb-pkg

    ๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด, ์ƒ์„ฑ๋œ deb ํŒŒ์ผ์„ ์ด์šฉํ•˜์—ฌ ์ปค๋„์„ ์„ค์น˜ํ•ด์ค๋‹ˆ๋‹ค.

    $ cd ..
    $ sudo dpkg -i *.deb

    ์„ค์น˜๋ฅผ ์™„๋ฃŒํ•œ ์ดํ›„, ๋ช‡๊ฐ€์ง€ ์„ค์ •์„ ์ง„ํ–‰ํ•ด ์ค๋‹ˆ๋‹ค.

    ์ผ๋‹จ xenomai ๊ด€๋ จํ•œ ๊ธฐ๋Šฅ์„ sudo ๋ช…๋ น์—†์ด ์‚ฌ์šฉํ•˜๋„๋ก ํ˜„์žฌ ์œ ์ €๋ฅผ xenomai ๊ทธ๋ฃน์— ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.

    $ sudo addgroup xenomai
    $ sudo addgroup root xenomai
    $ sudo usermod -aG xenomai $(whoami)

    Group ID (GID)๋ฅผ ์ฐพ์•„๋ด…๋‹ˆ๋‹ค.

    $ cat /etc/group | grep xenomai
    1001

    ๋‹ค์Œ์œผ๋กœ GRUB์˜ ๋ถ€ํŒ… ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.

    $ sudo vi /etc/default/grub
    GRUB_DEFAULT=saved
    GRUB_SAVEDEFAULT=true
    #GRUB_TIMEOUT_STYLE=menu
    GRUB_TIMEOUT=10
    GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset i915.enable_rc6=0 i915.enable_dc=0 noapic xenomai.allowed_group=1001 isolcpus=0,1 xenomai.supported_cpus=0x3"
    GRUB_CMDLINE_LINUX=""
    
    GRUB_GFXMODE=1280x1024
    GRUB_GFXPAYLOAD_LINUX=1280x1024

    ์˜ต์…˜ ์ค‘ ๋ช‡ ๊ฐ€์ง€๋ฅผ ์„ค๋ช…ํ•ด๋ณด๋ฉด,

    xenomai.allowed_group=1001     % ์ƒ์„ฑํ•œ ๊ทธ๋ฃน์˜ ์‚ฌ์šฉ์ž๋“ค์ด xenomai๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ถŒํ•œ ๋ถ€์—ฌ
    isolcpus=0,1                   % CPU0, CPU1์„ ์ผ๋ฐ˜ ์ปค๋„์—์„œ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋„๋ก Isolation
    xenomai.supported_cpus=0x3     % CPU0, CPU1์„ Xenomai์—์„œ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •

    update-grub๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ์˜ต์…˜์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

    $ sudo update-grub
    $ sudo reboot

    ๋‹ค์Œ์œผ๋กœ XDDP (๋น„์‹ค์‹œ๊ฐ„ ์ปค๋„๊ณผ ์‹ค์‹œ๊ฐ„ ์ปค๋„๊ณผ์˜ ํ†ต์‹ ์„ ์œ„ํ•œ IPC ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜)๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํผ๋ฏธ์…˜์„ ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค. udev ๋ฃฐ์„ ์ด์šฉํ•˜์—ฌ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    $ sudo vi /etc/udev/rules.d/99-xenomai.rules
    
    KERNEL=="rtp[0-32]*", MODE="0666"
    SUBSYSTEM=="rtdm", MODE="0666"

    ๋‹ค์Œ์œผ๋กœ XDDP ์ปค๋„ ๋ชจ๋“ˆ์„ ๋ถ€ํŒ… ์‹œ์— ์ž๋™์œผ๋กœ ๋กœ๋”ฉํ•˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    $ sudo vi /etc/modules
    
    xeno_rtipc

    ์ด์ œ ์žฌ๋ถ€ํŒ…ํ•ด์ค๋‹ˆ๋‹ค. ์žฌ๋ถ€ํŒ…์‹œ ์„ค์น˜๋œ ์‹ค์‹œ๊ฐ„ ์ปค๋„ ๋ฒ„์ „์„ ์„ ํƒํ•ด์ค๋‹ˆ๋‹ค.


    ์ปค๋„ ๋ฒ„์ „ ํ™•์ธ

    $ uname -a
    Linux former-0030 6.1.61-xenomai #5 SMP PREEMPT_DYNAMIC IRQ_PIPELINE Fri Nov 17 16:46:35 KST 2023 x86_64 x86_64 x86_64 GNU/Linux

    XDDP ์ปค๋„ ๋ชจ๋“ˆ ๋กœ๋”ฉ ํ™•์ธ

    $ lsmod | grep xeno
    xeno_rtipc

    Xenomai ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•ด์ค๋‹ˆ๋‹ค. ๋จผ์ € ๋นŒ๋“œ๋ฅผ ์œ„ํ•œ ํŒจํ‚ค์ง€ ํ•„์š” ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

    $ sudo apt install fuse

    Xenomai ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

    $ cd ~/tmp/xenomai-v3.2.4
    $ ./scripts/bootstrap
    $ ./configure --with-pic --with-core=cobalt --enable-smp --disable-tls --enable-dlopen-libs --disable-clock-monotonic-raw
    $ make -j4
    $ sudo make install

    PATH ํ™˜๊ฒฝ๋ณ€์ˆ˜์— Xenomai bin ๊ฒฝ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ ,

    $ echo "export PATH=/usr/xenomai/bin:$PATH" >> ~/.bashrc

    ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.

    $ sudo vi /etc/ld.so.conf.d/xenomai.conf
    
    /usr/xenomai/lib
    
    $ sudo ldconfig

    ์„ค์น˜ ์™„๋ฃŒ


    ํ…Œ์ŠคํŠธ์šฉ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ ์ž˜ ๋™์ž‘๋˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

    #include <stdio.h>
    #include <signal.h>
    #include <unistd.h>
    #include <alchemy/task.h>
    
    RT_TASK demo_task;
    
    void demo(void *arg)
    {
      RT_TASK_INFO curtaskinfo;
      rt_task_inquire(&demo_task, &curtaskinfo);
      printf("Task name : %s \n", curtaskinfo.name);
    }
    
    int main(int argc, char* argv[])
    {
      char *str = "demo";
    
      printf("start task\n");
    
      rt_task_create(&demo_task, str, 0, 50, 0);
      rt_task_start(&demo_task, &demo, 0);
    
      sleep(1);
    } 
    $ gcc -o hello_xenomai hello_xenomai.c $(xeno-config --posix --alchemy --cflags) $(xeno-config --posix --alchemy --ldflags)
    $ ./hello_xenomai 
    start task
    Task name : demo

    Latency๋„ ํ™•์ธํ•ด๋ด…๋‹ˆ๋‹ค.

    $ sudo sh -c "echo 0 > /proc/xenomai/latency"
    $ latency
    == Sampling period: 100 us
    == Test mode: periodic user-mode task
    == All results in microseconds
    warming up...
    RTT|  00:00:01  (periodic user-mode task, 100 us period, priority 99)
    RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
    RTD|      1.919|      1.963|      3.277|       0|     0|      1.919|      3.277
    RTD|      1.922|      1.964|      4.412|       0|     0|      1.919|      4.412
    RTD|      1.914|      1.958|      3.316|       0|     0|      1.914|      4.412

    ์ „์ฒด์ ์œผ๋กœ 100us ์ œ์–ด ์ฃผ๊ธฐ์— ์•ฝ 4us latency๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” User ๋ชจ๋“œ (dovetail์„ ํ†ตํ•ด์„œ xenomai ์ปค๋„์— ์ ‘๊ทผ)์ธ ๊ฒฝ์šฐ์— ๊ทธ๋ ‡๊ณ , ์ปค๋„ ๋ชจ๋“œ or ์ปค๋„ IRQ ๋ชจ๋“œ๋กœ ์‹คํ–‰ํ•˜๋ฉด ์ข€ ๋” ์ข‹์€ ์„ฑ๋Šฅ์ด ๋‚˜์˜ต๋‹ˆ๋‹ค.

    ์™„๋ฃŒ.

  • Ubuntu์—์„œ ifconfig, ip ๋“ฑ์˜ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ, ํ˜„์žฌ ์—ฐ๊ฒฐ๋œ ์ƒํƒœ ๋ฐ IP ๋“ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ํ˜„์žฌ ์—ฐ๊ฒฐ๋œ ๋„คํŠธ์›Œํฌ ์นด๋“œ์˜ ๋””๋ฐ”์ด์Šค๋ช…์ด๋‚˜ ์—ฐ๊ฒฐ๋œ ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„์„ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ์˜ ๋ช…๋ น์œผ๋กœ ๊ฐ€๋Šฅํ•˜๋‹ค.

    ์—ฌ๋Ÿฌ ๊ฐœ์˜ Ethernet ํฌํŠธ๊ฐ€ ์žˆ๊ณ , ์„œ๋กœ ๋‹ค๋ฅธ ๋””๋ฐ”์ด์Šค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ํŠน์ • ๋””๋ฐ”์ด์Šค์—๋งŒ ์—ฐ๊ฒฐํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ํ•„์š”ํ•˜๋‹ค.

    $ sudo lshw -c network

    ์œ„์™€ ๊ฐ™์ด ์ž…๋ ฅํ•˜๋ฉด, ํ˜„์žฌ ์‹œ์Šคํ…œ์— ์žˆ๋Š” ๋ชจ๋“  ๋„คํŠธ์›Œํฌ ๋””๋ฐ”์ด์Šค์˜ ๋ฆฌ์ŠคํŠธ์™€ ์ƒ์„ธํ•œ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ์˜ˆ๋ฅผ ๋“ค์ž๋ฉด,

     *-network                                                                                                                                                                                                            
           description: Ethernet interface                                                                                                                                                                                 
           product: I210 Gigabit Network Connection                                                                                                                                                                        
           vendor: Intel Corporation                                                                                                                                                                                       
           physical id: 0                                
           bus info: pci@0000:02:00.0                    
           logical name: enp2s0                          
           version: 03                                   
           serial: c4:00:ad:c4:85:3d                     
           size: 100Mbit/s                               
           capacity: 1Gbit/s                             
           width: 32 bits                                
           clock: 33MHz                                  
           capabilities: pm msi msix pciexpress bus_master cap_list rom ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation                                                                         
           configuration: autonegotiation=on broadcast=yes driver=igb driverversion=6.2.0-34-generic duplex=full firmware=3.25, 0x800005d0 latency=0 link=yes multicast=yes port=twisted pair speed=100Mbit/s              
           resources: irq:17 memory:80480000-804fffff ioport:3000(size=32) memory:80500000-80503fff memory:80400000-8047ffff          

    ํ˜„์žฌ ์ด ๋„คํŠธ์›Œํฌ ๋””๋ฐ”์ด์Šค๋Š” Intel์‚ฌ์˜ i210 ์นฉ์…‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๊ฐ€๋น— ๋„คํŠธ์›Œํฌ๋ฅผ ์ง€์›ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋˜ ํ˜„์žฌ enp2s0๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.

  • ํ˜„์žฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋…ธํŠธ๋ถ์ด XPS17 9700์ธ๋ฐ, 2020๋…„ 11์›”์— ์ƒ€์œผ๋‹ˆ, ์ด์ œ ๋Œ€๋žต 2๋…„ 8๊ฐœ์›” ์ •๋„ ์‚ฌ์šฉํ•œ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค. ์–ผ๋งˆ์ „๋ถ€ํ„ฐ ๋ฐฐํ„ฐ๋ฆฌ ๊ด€๋ จํ•ด์„œ ๊ฒฝ๊ณ ๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•˜๊ณ , ๋ฐฐํ„ฐ๋ฆฌ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„์ด ํ˜„์ €ํžˆ ์ค„์–ด๋“ค๊ธฐ ์‹œ์ž‘ํ•ด์„œ ๊ฑฐ์Šฌ๋ ธ๋Š”๋ฐ… ๋ธ ์„œํฌํŠธ๋ฅผ 2011๋…„ ์ดํ›„์— ์—ฐ์žฅ์„ ํ•˜์ง€ ์•Š์€ ๊ด€๊ณ„๋กœ, ์œ ์ƒ ์ˆ˜๋ฆฌ๋งŒ ๊ฐ€๋Šฅํ•œ ์ƒํ™ฉ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

    ๊ธฐ์กด์—๋„ SSD ์ถ”๊ฐ€๋‚˜, ๋žจ ์ถ”๊ฐ€ ๋“ฑ๋“ฑ์˜ ์ž‘์—…๋“ค์€ ์ง์ ‘ ํ•ด๋†จ๋˜ ํ„ฐ๋ผ ์ผ๋‹จ ๋ฐฐํ„ฐ๋ฆฌ๋ฅผ ๊ตฌ๋งคํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ฐพ์•„๋ดค๋Š”๋ฐ, ๋‚˜๋ฆ„ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋ธ์ด๋ผ์„œ ๊ทธ๋Ÿฐ๊ฐ€ ์ค‘๊ตญ ์–ด๋А ๊ฐ€๊ฒŒ์—์„œ ํŒ๋งคํ•˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌ… ์ŠคํŽ™ ํ™•์ธํ•˜๊ณ .. ์ฃผ๋ฌธ…

    ์˜ค๋Š˜ ๋„์ฐฉํ•ด์„œ ๊ต์ฒด ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค.

    ๋ฐฐํ„ฐ๋ฆฌ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ด๋ณด๋‹ˆ, ๊ฑฐ์˜ ๋ฐ˜ํ† ๋ง‰๋‚œ ์ˆ˜์ค€์ด์—ˆ๋„ค์š”.. ๊ต์ฒด๋Š” ๋’ทํŒ๋งŒ ๋ถ„๋ฆฌํ•˜๊ณ , ๋‚˜์‚ฌ ๋ช‡๊ฐœ๋งŒ ํ’€๋ฉด ๋˜์„œ ์•„์ฃผ~~~ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

  • fcitx5, fcitx5-hangul ์„ค์น˜

    $ sudo apt install fcitx5 fcitx5-hangul

    Setting > Region and Language > Manage Installed Langugages

    ํ•œ๊ธ€์ž…๋ ฅ ๋ฐฉ์‹์„ IBUS์—์„œ fcitx5๋กœ ๋ณ€๊ฒฝ.

    ์žฌ๋ถ€ํŒ….

    ๋ฉ”๋‰ด ์ƒ๋‹จ์— ํ‚ค๋ณด๋“œ ํ‘œ์‹œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ

    ํ‚ค๋ณด๋“œ ํ‘œ์‹œ์—์„œ ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ Configure ์„ ํƒํ•˜์—ฌ ์„ค์ •์ฐฝ ์ง„์ž…

    ์™ผ์ชฝ ์‚ฌ์šฉํ•  ์ž…๋ ฅ ๋ฐฉ์‹์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถ”๊ฐ€. Hangul์ด ์•ˆ๋ณด์ด๋ฉด, ์˜ค๋ฅธ์ชฝ ํ•˜๋‹จ, Only Show Current Language๋ฅผ ํด๋ฆญ ํ•ด์ œ.

    ๋‹ค์Œ์œผ๋กœ ํ•œ์˜ํ‚ค ์„ค์ •. ์˜๋ฌธํ™˜๊ฒฝ์—์„  ํ•œ์˜ ๋ณ€ํ™˜ํ‚ค๊ฐ€ Right Alt๋กœ๋งŒ ์ธ์‹๋จ. Right Alt๋กœ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ๊ฐ„ํ—์ ์œผ๋กœ ๋ฉ”๋‰ด ํ˜ธ์ถœ๊ณผ ํ˜ผ๋™๋˜์–ด ์‚ฌ์šฉ๋˜๋ฏ€๋กœ ๋ฒˆ๊ฑฐ๋กœ์›€. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ gnome-tweaks ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•จ.

    $ sudo apt install gnome-tweaks

    Tweaks ์•ฑ์„ ์‹คํ–‰

    ํ‚ค๋ณด๋“œ&๋งˆ์šฐ์Šค ์„ค์ •์œผ๋กœ ๊ฐ€์„œ Additional Layout Options๋ฅผ ์„ ํƒ

    Korean Hangul/Hanja Keys๋กœ ์ด๋™ํ•˜์—ฌ Right Alt๋ฅผ Hangul key๋กœ ์‚ฌ์šฉ์— ์ฒดํฌ

    ์ด์ œ ๋‹ค์‹œ, fcitx5 ์„ค์ •์œผ๋กœ ๋Œ์•„๊ฐ€์„œ,

    Triger Input Method์—์„œ ์„ ํƒํ•˜์—ฌ Right Altํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด Hangulํ‚ค๋กœ ์ธ์‹๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ.

    ๋!

  • docker ๋‚ด๋ถ€์—์„œ GUI ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    ๋จผ์ € host ๋จธ์‹ ์—์„œ docker๊ฐ€ x์œˆ๋„์šฐ์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ถŒํ•œ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    $ xhost +local:docker

    ๋‹ค์Œ์œผ๋กœ docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    $ docker run --rm -it --runtime nvidia -e DISPLAY -e NVIDIA_DRIVER_CAPABILITIES=all -e NVIDIA_VISIBLE_DEVICES=all -v /tmp/.X11-unix:/tmp/.X11-unix ubuntu  

    ์˜ต์…˜์„ ์„ค๋ช…ํ•˜๋ฉด

    • -e DISPLAY : GUI๊ฐ€ ์ถœ๋ ฅ๋  DISPLAY ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ „๋‹ฌ
    • -e NVIDIA_DRIVER_CAPABILITIES=all : NVIDIA ๋“œ๋ผ์ด๋ฒ„ ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ Docker ๋‚ด๋ถ€์— ๋งˆ์šดํŠธ ํ•˜๊ธฐ
    • -e NVIDIA_VISIBLE _DEVICES=all : Docker ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  GPU ์„ค์ •
    • -v /tmp/.X11-unix:/tmp/.X11-unix : X์œˆ๋„์šฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์†Œ์ผ“ ์—ฐ๊ฒฐ

    ์œ„์™€ ๊ฐ™์ด ์˜ต์…˜์„ ์„ค์ •ํ•˜๊ณ  ์‹คํ–‰ ํ›„, ๋‚ด๋ถ€์—์„œ GUI ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋ฉด ๋จ.

    $ docker run --rm -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY --runtime nvidia -e NVIDIA_DRIVER_CAPABILITIES=all -e NVIDIA_VISIBLE_DEVICES=all ubuntu
    root@92913cdca2a1:/# glxgears
    Running synchronized to the vertical refresh.  The framerate should be
    approximately the same as the monitor refresh rate.

    ๊ทธ์™ธ gtk ๊ด€๋ จ ํ”„๋กœ๊ทธ๋žจ๋„ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


    ์‚ฝ์งˆ ๊ธฐ๋ก

    1) ์œ„ -e NVIDIA_DRIVER_CAPABILITIES=all -e NVIDIA_VISIBLE_DEVICES=all ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์‹คํ–‰์ด ๋˜์ง€ ์•Š์Œ.

    X Error of failed request:  BadShmSeg (invalid shared segment parameter)
      Major opcode of failed request:  130 (MIT-SHM)
      Minor opcode of failed request:  3 (X_ShmPutImage)
      Segment id in failed request:  0x2e00005
      Serial number of failed request:  54
      Current serial number in output stream:  55

    2) Host ๋จธ์‹ ์—์„œ ๊ถŒํ•œ ์„ค์ •์„ ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด, ์‹คํ–‰ ๋ถˆ๊ฐ€

    Authorization required, but no authorization protocol specified
    cannot open display: :1


    ์ฐธ๊ณ ๋งํฌ: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/user-guide.html

  • docker๋ฅผ ์„ค์น˜ํ•˜๊ณ , ๋‚ด๋ถ€๋กœ ์ง„์ž…ํ•ด์„œ ์ด๋Ÿฐ์ €๋Ÿฐ ์ž‘์—…์„ ์ง„ํ–‰ํ•  ๋•Œ, bash์˜ ์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ์ด ์—†์–ด ๋งค๋ฒˆ ํƒ€์ดํ•‘์„ ํ•ด์•ผํ•˜๋Š” ๋ถˆํŽธํ•œ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋กœ apt install ํ›„ ํŒจํ‚ค์ง€๋ช…์„ ์ˆ˜๋™์œผ๋กœ ์ „์ฒด ์ž…๋ ฅํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ ์ด์š”.

    bash-completion์ด ์„ค์น˜๋˜์ง€ ์•Š์•„์„œ์ธ๋ฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์œผ๋กœ ์ง„ํ–‰ํ•˜์‹œ๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    $ apt install bash-completion vim
    $ vi /etc/bash.bashrc
    
    ์ฃผ์„ ํ•ด์ œ
    # enable bash completion in interactive shells
    if ! shopt -oq posix; then
      if [ -f /usr/share/bash-completion/bash_completion ]; then
        . /usr/share/bash-completion/bash_completion
      elif [ -f /etc/bash_completion ]; then
        . /etc/bash_completion
      fi
    fi
    
    $ source /etc/bash.bashrc
    $ rm /etc/apt/apt.conf.d/docker-clean
    $ apt update

    ์ด์ œ apt ๋ช…๋ น ์ด์™ธ์—๋„ bash ์‰˜์—์„œ ์ž๋™ ์™„์„ฑ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์—…๋ฐ์ดํŠธ: ์—ฌ์ „ํžˆ ๋ธŒ๋ฆฟ์ง€ ๋ชจ๋“œ์—์„  ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ธŒ ๋จธ์‹ ๊ณผ ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์—์„œ ๋™์‹œ์— ์ธํ„ฐ๋„ท ์ ‘์†์„ ํ•  ๊ฒฝ์šฐ์— ์„œ๋กœ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.


    WSL2์˜ ์„œ๋ธŒ ๋จธ์‹ ์—์„œ ์™ธ๋ถ€IP๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด, ๋„คํŠธ์›Œํฌ ์นด๋“œ์— ๋ธŒ๋ฆฟ์ง€ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํฌ์ŠคํŒ…ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ ์šฉ ์‹œ ๋ฌธ์ œ๋กœ๋Š” ์—…๋กœ๋“œ ์†๋„๊ฐ€ ๋ฌด์ฐจ๋ณ„๋กœ ์ €ํ•˜๋˜๋Š” ์ฆ์ƒ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

    ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋ก  ๋””๋ฐ”์ด์Šค ์„ค์ •์—์„œ, ์ƒˆ๋กœ ์ƒ์„ฑ๋œ Virtual Ethernet Adapter์˜ ์˜ต์…˜์—์„œ Large Send Offload Version 2 (IPv4) ,Large Send Offload Version 2 (IPv6) ํ•ญ๋ชฉ์„ Enable์—์„œ Disable๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

    ๋‘ ๊ฐœ ํ•ญ๋ชฉ ๋ชจ๋‘ Disabled๋กœ ์„ค์ •ํ•˜๊ณ , ๋‹ค์‹œ ์†๋„ ์ฒดํฌ๋ฅผ ํ•ด๋ณด๋ฉด,

    ์•„์ง ์‚ด์ง ์ €ํ•˜๋˜๋Š”๋“ฏ ํ•˜์ง€๋งŒ, ๊ทธ๋ž˜๋„ ๊ฑฐ์˜ ์ •์ƒ์œผ๋กœ ๋Œ์•„์™”์Šต๋‹ˆ๋‹ค.