9/15/2022

ESP32-S3 TinyML (Edge AI )

1. Arduino IDE 와 TinyML 

우연히 LinkedIn에서 보게되었는데, MCU기반으로 Machine Learning을 해서 동작이되는 것을 보고, 좀 쇼크를 받았다. 
Arduino 기반으로 Transfer Learning하여 이를 지원하는 것으로 보이며 음성인식을 하여 로봇 손을 제어한다. 
아이러니한 것은 소스를 보면, BLE로 동작되는 걸로 보인다. 

  • HW 사양 
  1. Board: Arduino Nano 33 BLE Sense (Nordic 사)
  2. 기타: Servo 와 BreadBoard(빵판) 과 Jumper 

  • 개발 Tools 
  1. Edge Impulse Studio 
  2. Arduino IDE 

일단 Transfer Learning(Training) 알려고 하면, 어쩔 수 없이 상위 Edge impulse Studio를 좀 알아야 할 것 같다. 
 
  • 음성인식 방법(모델?)
  1. MFCC(Mel-Frequency Cepstral Coefficient)
  2. MFE 

MFE 와 MFCC 비교 


  • Inference
NVIDIA Jetson 처럼 INT8 까지는 아니여도, INT16까지 양자화해서 Inference하는 것으로 보인다. 

  • 결론 
MFCC or MFE 사용한다고 하며, 아직 MFE는 검색이 안되어서 잘 모르겠다.
MFCC는 상위 블로그로 읽어보면, 간단히 동작방식의 핵심 다음과 같다고 생각되어진다. 

Mel-Filter Bank 라는 것을 일종의 Pattern을 저장해서 Machine Learning하는 것으로 보인다. 
다만 가성주파수 영역에 (300Hz ~ 3300Hz) 집중적 배포하여 사람 목소리인 음성인식을 하는 것으로 보인다. 

다시 DCT도 나오고 그렇는데, 오랜만에 다시 DSP를 보니 골치아프다. 
DCT 와 DFT/FFT 의 차이는 간단히 말해, 허수 사용여부이다. 
추후 시간이되면 좀 더 자세히 알아보도록 하자 .


1.1 Edge Impulse Studio 

Edge Impulse가 무엇인지 궁금해서 찾아 보게되었는데, 아래 사이트에서 쉽게 답을 얻었다. 

나의 경우는 거의 Arduino를 거의 사용해본 경험이 없는데, 거의 Arduino 기반으로 Library가 제공되어지는 것으로 보인다. 

  • EdgeImpulse Studio 
이 사이트 기반으로 Project를 진행하는 것으로 보이며, 나도 오늘 가입을 했다. 


1.2 Tensorflow light for MCU

Tensorflow를 보니, 지원되어지는 MCU Board는 적은 것으로 보이며, 다행히 Espressif 사의 ESP도 지원가능한걸로 보인다. 
다만, 대체적으로 Arduino 기반으로 Project가 진행이 되는 것으로 보인다. 
일단 Arduino 와 ESP32 or 다른 MCU EVM이 필요하다 

TensorFlow light for Microcontroller

ESP32 와 Tensorflow Lite for Microcontroller
ESP-IDF 와 ESP-NN을 사용한 것으로 보이며, CNN구조의 간단한 예제 


2. TinyML 

좀 생소하기는 한데, 아직 제한적으로 사용되어지는 것 같으며, MCU기반으로 사용되어지는 걸로 보인다. 
검색을 해보면, 책까지 나왔을 정도로 많이 보편화가 된 것으로 보이며, 현재 관심을 두고 보고 있다.
대부분 Inference를 할 경우, 각 NN Library와 연결하여 사용하는 것으로 생각되어진다. 


2.1 TinyML 관련책 과 세미나  


TinyML 
O'REILLY 에서 처음 영문으로만 나왔는데, 한글로 나옴 

TinyML Home 

Google TinyML 

Meetup TinyML
Meetup을 통해서, 자주 Youtube에 관련내용들이 공유되어지고 있음 


2.2 ARM 의 TinyML

ARM을 주로 보면 Cortex-M 기반으로 CMISIS-NN으로 연결하여, 주로 Inference용으로 사용하는 것 같다. 





2.3 ESP32의 TinyML 

ESP경우, ESP-NN이 존재하며, 연결하여 확장해서 ESP-DL 
주로 Inference용으로 사용


ESP-NN(Neural Network) 와 ESP-DL(Deep Learning Model)


9/14/2022

VS Code Extension

1. VS Code Extension 

이전에 VS Code 와 관련해서 사용했던 것들을 아래와 같이 링크 

  • VS Code 기본사용 및 Extension 추천 
이전에 설치하여 주로 사용하던 걸로 Remote Development 관련설명 

  • VS Code Extension 저장장소 (본인계정에 저장)
C:\Users\jhlee\.vscode\extensions 저장되어짐 
** 만약 설치시 문제 생기면 상위부분에 가서 각 extensions 직접 삭제

각각의 VS Code extensions program들이 존재 및 설정값도 직접확인 가능 


1.1 VS Code Extension Tools

VS Code Extension 이 2020 과 2022년 비교를 하면 많이 달라졌으며, 현재 내가 주로 사용하고있는 Extension List들을 표시한다. 
그리고, VS Code Extension Program이 계속 Update 되고 사용법도 매번 조금씩 변경되므로, 각 세부사항은 Manaul을 반드시 참조 

  • VS Code Extension- Remote Package 필수사용  
MS사에서 제공하는 Remote Package로 요즘 한꺼번에 다 설치를 해줌(이전과 다름)

  • VS Code Extension- Markdown 관련사항 
Markdown 쉽게 작성하기 위해서 사용 

  • VS Code Extension- Hex File 볼 경우 

  • VS Code Extension- Git 관련사항 

  • VS Code Extension- Cmake 관련사항 
흐음 필요사항을 아직 모름

  • VS Code Extension- C/C++ 관련사항 
C/C++ 관련것으로 소스 분석용 설치 


1.2 VS Code Extension Tools for Comments

주석(Comments)에 관련부분들은 따로 분류하여 링크를 한다. 

Better Comments
가장 많이 사용되어지는 Tool로 현재 나는 Disable 
간단한 사용법은 아래이며, 실제 사이트에서 가서 Update가 되므로 상위에서 확인  

Doxygen Documentation Generator
Doxygen 과 Comment를 쉽게 생성하는방법 
소스위치에서 ( /** 만 입력한 후 엔터 ) 입력하며, Function 위/ File 맨위 각 다르게 생성 

Auto Comment Blocks
주석을 자동으로 Blocking 관리 ( /** or /*!  입력한 후 엔터) 입력 
상위를 이용하면 불필요

TODO Highlight
주석(Comment) 에 TODO/FIXME 쉽게 파악 

이외 Google Translate를 이용하여 주석 자동으로 번역해주는 기능을 비롯하여 다양하다.

1.3 VS Code Extension ESP-IDF

  • VS Code Extension (ESP-IDF 설치)
ESP-IDF 설치 
이전과 변경되어있으며, 쉽게 IDF를 설치를 진행한다.

최근꺼는 MS 의 Email 기반으로도 VS Code Extesion을 Sync를 맞출수 있는 것으로 보여진다.

Espressif IDF VS Code Extension (Node.js 소스)

VS Code Extension 설치위치 
  C:\Users\jhlee\.vscode\extensions


2. VS Code Extension 사용법


이전에 내가 작성한 VS Code Extension Tools 사용법들을 아래에 링크 


2.1 VS Code Remote Package 

VS Code에서 Remote에 있는 Linux Server or WSL를 연결하여 사용하는 법 

VS Code 에서 Remote X11 연결방법 
현재 필요 WSL을 사용하면 필요가 없어보이며, 외부에서 사용할 경우에만 필요 

VS Code 에서 WSL 설치 후 Remote 진행 


2.2 VS Code Git 사용 

VS Code는 기본적으로 Git Package가 없으므로 반드시 먼저 Git을 먼저 설치 한후 사용진행 
세부내용은 아래링크 확인 
 
VS Code에서 Git 사용법 

VS Code VersionControl 


2.3 VS Code JTAG 설정 및 Debug

이 부분은 매번 조금씩 변경되어왔으므로, 만약 더 최신버전을 사용한다면, 반드시 Manaul 참조


ESP32의 OpenOCD 관련설정 (거의 유사하지만 쉽게 설정가능)

  • launch.json
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [

        {
            "name": "ESP32 Debugger",
            "type": "espidf", 
            "request": "launch",
            "gdbinitFile":"${workspaceFolder}/.vscode/gdbinit",    
                    
        }
    ]
}  

상위와 같이 ${workspaceFolder} 변수 이용 

  • settings.json 
{
// ESP-IDF 기반으로 개인적으로 생성하여,설정한 설정값들 (불편한것은, 직접 Setting.json에서 변경해야함)     
    "idf.RS485Port": "COM8",     
    "idf.RS485Baudrate": "921600",  
    "idf.RS485ResponseTimeout": "0.100", //0.050 -> 0.100
    "idf.RS485MaxUnit": "5",       
    "idf.RS485TimerInterval": "1", 
    "idf.RS485TesTimeHour": "10",      
    
//ESP-IDF 설치 후 환경설정 값들 (VS Code의 아래 버튼으로 변경가능)     
    "idf.adapterTargetName": "esp32",  
    "idf.flashType": "UART",
    "idf.portWin": "COM3",                  
    "idf.svdFilePath": "${workspaceFolder}/esp32.svd",  //OpenOCD를 위해서 Register Map을 보기 위한 도구 https://github.com/espressif/svd
    "idf.openOcdConfigs": [                             //OpenOCD의 설정 이부분이 이해가 안된다면, OpenOCD를 참조 
        "interface/ftdi/esp32_devkitj_v1.cfg",
        "target/esp32.cfg"
    ]
} 

상위 설정된 값은 tasks.json의 command에서 사용가능하며, template으로 숨겨진 설정값도 존재한다. 

VS Code에 Espressif IDF 포함된 Template 으로 좀 더 다양하게 확인가능 
Command가 Window/Linux 지원해야하므로, 두개로 분리 운영 

상위 소스는 C:\Users\jhlee\.vscode\extensions\espressif.esp-idf-extension-xxxx\\templates\.vscode 존재하며, 나의 경우 직접 수정해서 사용함 

  • gdbinit
target remote :3333
set remote hardware-watchpoint-limit 2
symbol-file ./build/xxxxx.elf
mon reset halt
flushregs
thb app_main
c

2.4 VS Code Task 설정 및 사용법  

각 Project 마다 본인의 Task를 만들어서 TEST Program들을 쉽게 설치하고, Chainging도 가능하므로, 각 자동화도 가능하다. 

우선 내부적으로 사용되어지는 환경변수 및 VS Coe Extesion Tools 내부에서만 사용하는 환경변수들을 알아 두면 좋다. 
또한 dependson을 이용하여 다른 Task 와 Chaining도 가능하다. 

  • tasks.json (Window용)
아래와 같이 자동화 및 Window에서도 Powershell을 이용하여 다양하게 확장가능하다.
만약 Linux/Window 같이 사용하고 자하면 command 위에 별도의 window용을 별도로 설정
{
// See task.json Manual in VSCode
// for the documentation about the tasks.json format
// 아래의 예제들은 내가 간단하게 사용하는 예제 중 일부를 가져온 것이며, 나의 경우, TEST Task가 너무 많아 이를 Chain해서 사용한다. 

    "version": "2.0.0",
    "tasks": [
        {
            "label": "IP Config",
            "type": "shell",
            "command": "ipconfig"
        }, 
// 기본 실행되는 위치가 workspaceFoder가 아닐 경우, 
//다음과 같이 Command를 연속해서 실행가능하며,아래와 같이 ; 세미콜론을 사용하자 (PowerShell Script는 관련 Manaul 참조하도록)   
        {
            "label": "TEST Release",
            "type": "shell",
            "command": "cd ${workspaceFolder}/release; ./makeFirmware.ps1"
        },          
        {
            "label": "ESP-IDF Erase ALL",
            "type": "shell",
            "command": "${userHome}/.espressif/python_env/idf4.2_py3.8_env/Scripts/python.exe ${userHome}/esp/esp-idf/components/esptool_py/esptool/esptool.py -p ${config:idf.portWin}  -b 460800 --before default_reset --after hard_reset --chip ${config:idf.adapterTargetName} erase_flash"
        },       
//아래와 같이 dependson을 사용하여 각 Command의 Label로 적어 Macro로 형식으로, Chain하여 사용하자
//아래처럼 실행하하면, TEST Release -> ESP-IDF Erase ALL -> ESP-IDF WRITE ALL        
        {
            "label": "ESP-IDF WRITE ALL",
            "type": "shell",
            "command": "${config:idf.pythonBinPathWin} ${userHome}/esp/esp-idf/components/esptool_py/esptool/esptool.py -p ${config:idf.portWin} -b 460800 --before default_reset --after hard_reset --chip ${config:idf.adapterTargetName} write_flash --flash_mode dio --flash_freq 80m --flash_size detect 0x070000 ${workspaceFolder}/release/firmware/mxx610-app.bin 0x1000 ${workspaceFolder}/release/firmware/bootloader.bin 0x10000 ${workspaceFolder}/release/firmware/partition-table.bin 0x15000 ${workspaceFolder}/release/firmware/ota_data_initial.bin 0x17000 ${workspaceFolder}/release/firmware/phy_init_data.bin 0x39000 ${workspaceFolder}/release/firmware/storage_data.bin",       
            "dependsOrder": "sequence",
            "dependsOn": ["TEST Release", "ESP-IDF Erase ALL", "ESP-IDF WRITE ALL"]
        
        },
//아래의 경우, 상위 내가 정의한 변수를 이용하여 각각 Python TEST Program을 Jenkins 처럼 사용하고 있다. 
        {
            "label": "TEST MODBUS-CHK-EventGR",
            "type": "shell",
            "command": "& D:/Tools/python/python-3.7.5-embed-amd64/python.exe ${workspaceFolder}/main/module/modbus/modbus_test_check_rspevent_general.py -p ${config:idf.RS485Port} -b ${config:idf.RS485Baudrate}  "
        },
        {
            "label": "TEST MODBUS-CHK-EventBT",
            "type": "shell",
            "command": "& D:/Tools/python/python-3.7.5-embed-amd64/python.exe ${workspaceFolder}/main/module/modbus/modbus_test_check_rspevent_burst.py -p ${config:idf.RS485Port} -b ${config:idf.RS485Baudrate}  -r ${config:idf.RS485ResponseTimeout}  -u ${config:idf.RS485MaxUnit}  -i ${config:idf.RS485TimerInterval} -t ${config:idf.RS485TesTimeHour}  "
        },
        {
            "label": "TEST MODBUS-CHK-SystemInfo",
            "type": "shell",
            "command": "& D:/Tools/python/python-3.7.5-embed-amd64/python.exe ${workspaceFolder}/main/module/modbus/modbus_test_check_systeminfo.py -p ${config:idf.RS485Port} -b ${config:idf.RS485Baudrate}  -r ${config:idf.RS485ResponseTimeout}  -u ${config:idf.RS485MaxUnit}  -i ${config:idf.RS485TimerInterval} -t ${config:idf.RS485TesTimeHour}  "
        },
        
//나의 경우는 다양하게 최대한 편한게 사용하도록 하고 있으며, Jenkins가 없이 쉽게 Task로 모든 TEST 가 가능하다 
        {
            "label": "TEST MQTT ONLY Subscribe",
            "type": "shell",
            "command": "& D:/Tools/python/python-3.7.5-embed-amd64/python.exe ${workspaceFolder}/main/module/mqtt/mqtt_only_subscribe.py"
        },
        {
            "label": "TEST MQTT General Publish",
            "type": "shell",
            "command": "& D:/Tools/python/python-3.7.5-embed-amd64/python.exe ${workspaceFolder}/main/module/mqtt/mqtt_publish_general.py"
        },
        {
            "label": "TEST MQTT RSPSetup Publish",
            "type": "shell",
            "command": "& D:/Tools/python/python-3.7.5-embed-amd64/python.exe ${workspaceFolder}/main/module/mqtt/mqtt_publish_rspsetup.py"
        },    
        
//다만 현재 Window인데, Embedded Python으로 설치해서 사용해야 다른 이에게 동일한 환경을 전해줄 수 있으므로, 추천         
// Linux에서도 VS Code가 사용가능한데, 좀 더 화려하게 사용가능하다. (grep.xargs,sed/awk 비롯하여 tee 등)  Python venv 기반으로 추천  
// EPS-IDF는 Window or Linux 이건 Python은 venv되어있지만, Window에서는 좀 venv를 사용하기가 좀 귀찮다. (export.ps1) 
        {
            "label": "TEST Python List",
            "type": "shell",
            "command": "& D:/Tools/python/python-3.7.5-embed-amd64/python.exe -m pip list  "
        },      
        
// 아래와 같이 Powershell에서 Linux의 Pipe를 비롯하여 간단한 명령어 비롯하여, tee 역시 지원가능하다, 
// Powershell이 매번 Upgrade 될때마다, 매번 Linux Command를 좀 더 다양하게 지원해주는 것 같다.              
        {
            "label": "TEST Shell",
            "type": "shell",
            "command": "echo Hellow | tee ${workspaceFolder}/test.log  "
        }           
     ]
}

모든예제를 기록할 수 없지만, 아래의 predefined 변수(variable)을 비롯하여, Powershell 변수(variable) 이외 외부 설정된 변수 (variable)가능 
더불어 조금 더 고급스럽게 사용하고자 한다면, Node.js는 필수인것 같다. 
이 부분은 추후 다시 사용하도록 하자 

참고로 VS Code도 계속 업그레이드 중이며, Task 내부 Command도 업그레이드 되면서 새로 추가된 것이니, 추후에도 계속 VS Code Manual는 봐야한다.
앞으로 계속 추가되어 변경되어질테니 ㅋㅋㅋ (나중에 Jenkins 없이 자동화로 해도 되겠다)

  • 상위 Tasks.json 과 launch.json 에 사용되어지는 내부환경변수(predefined)
  1. ${workspaceFolder}  : Project PATH
  2. ${userHome} : User Home PATH
VS Code에서 predefined-variables 내부변수로 반드시 확인 
각 값들은 기본으로 알아두도록하자 

  • Tasks.Json 세부 구성방법 
세부사항은 VS Code도 항상 업데이트 되므로 아래 사이트에서 사용방법과 구조를 확인
매번 VS Code가 업데이트 될때 마다 조금씩 변경됨 (Node.js도 지원됨) 
  1. version
  2. configurations
  3. tasks
  4. inputs

  • PowerShell 변수 사용법 
PowerShell에서 사용하는 변수를 동일하게 사용가능 

  • Tasks.json에서 외부 설정된 변수값 (settings.json) 사용법 
VS Extension에 이미 설정되어진것의 값 or settings.json 에서도 변수 값 가져와 tasks.json에서 사용가능하다.

예를들면 VS Code의 extension인 ESP-IDF를 설치하면, 아래에서 각 값들을 찾을수 있다. 
or VS Code의 각 Extension manual을 보면 각 값의 용도 설명을 알려준다. 

ESP-IDF 의 vscode-esp-idf-extension Github
설사 상위 Manual이 없다고 해도 .vscode/extensions/xxxxx 관련부분을 본인이 직접 분석하면된다. 

외부의 환경변수 값을 사용할 경우, 
아래와 같이 ${config:xxxxx} 로 형태로 사용하면된다.  
  1. ${config:idf.portWin} : 현재 settings.json 설정된 Port
  2. ${config:idf.adapterTargetName}: 현재 settings.json 설정된 Target
  3. ${config:idf.pythonBinPathWin} : ESP-IDF Python PATH

ESP-IDF ${config:xxxxx} 의 다양한 예제 
VS Extension에는 이미 숨겨진 환경값도 많으니, 관련사항을  찾아 보도록 하자
더불어 Task도 depends on을 이용하여 Chaining도 가능  


  • Tasks.json에서 Command들 간의 종속연결(depends) 
Tasks.json에서 Command를 많이 만들 경우, 한꺼번에 연속으로 실행하여, 자동화를 하고 싶을 경우가 많을 것이다.  
이 때 사용하는게 dependsOrder dependson 이며 이를 이용하여 쉽게 각 Command들을 종속연결하여 실행가능하다  
상위와 같이 간단히 자동화를 할수 있다. 

  • VSCode JSON 기본사용법 
JSON의 기본문법으로 어떻게 사용하는지 확인 



3. VS Code Tips Update 

주로 사용하는 것이 멀티커서 에디팅이며 다른 Tips들도 알아두도록하자. 

VS Code의 사용 Tips 관련사항 

VS Code Multi Cursor
좌측으로 이동정렬: Shift+Tab
우측으로 이동정렬: Tab



VS Code Markdown View

VS code Search / Modify (Regular Expression)

VS Code에서 diff 기능 

9/08/2022

Window 11 WSL1/2 설치 및 활용

1. Window 11 WSL1/2 설치 

Window WSL 설치관련내용 및 Remote X11 

WSL 과 VS Code Extension 


최근 MS를 보니, Manual이 너무 잘되어 있어 아래와 같이 링크만 걸어논다. 
MS에서는 Command 기반으로 설치를 진행하기를 권장한다. 


WSL을 WSL2로 변경하여 설치하고 싶어서 다시 Window 11 Pro에서 WSL2기반으로 다시 설치를 진행을 해본다. 

  • Window 기능 켜기/끄기 
WSL Ubuntu 설치 후 아래 오류가 나와 보니, 이전 처럼 Windows 기능 켜기/끄기를 반드시 확인을 해야한다. 
  1. Linux용 Window 하위 시스템 
  2. Hyper-V   (나의 경우 이것도 선택했음)


  • WSL -> WSL2 설정변경

  • WSL2 설치 설정 (PowerShell 관리자권한)
PS C:\Users\jhlee dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart 

  • WSL2 Linux Kernel Update 진행 
WSL1 과 WSL2는 Kernel이 다르다고 하여 관련부분을 Update 하였음 
(Hyper-V를 사용해서 다른 것으로 추측) 

  • WSL2  기본설정 (PowerShell 관리자권한)
PS C:\Users\jhlee wsl --set-default-version 2  

2. Window 11 Pro WSL2 활용 

MS에서 Manual로 자세히 잘 작성해주어서 관련내용을 링크 

  • 활용방법 VS Code 와 연결 
VS Code 와 연결해서 사용하는 것을 권장하며, 달라진점을 추후 확인 

이전에도 WSL 기반으로 VS Code로 연결하여 Docker 사용했지만, 달라진점을 추후 확인 

GPU 가속기능은 이전에 못보던 것인데, 이 부분은 추후에 다시 보자.

이전에는 Electron기반으로 간단하게만 테스트 진행했으며, npm으로 쉽게 관리가 되어질것이다.


2.1  WSL 기반의 Linux GUI 설정 및 테스트 

MS에서 GUI를 제공해주는 것 같아서 설치해서 테스트를 해보니, 이전 WSL과 많이 달라졌다.   
이전처럼 X11 Remote로 연결하여 복잡하게 사용할 필요가 없으며, 이외에도 다양한 App을 제공 

  • WSL GPU Driver 설치 
현재 GPU는 AMD 와 NVIDIA지만, AMD는 별로이므로 NVIDIA만 설치만 진행하며 장치관리자에서 각 GPU를 확인 


WSL용 NVIDIA Driver Download 
Official Drivers | NVIDIA


  • WSL Update 
상위 Driver 설치 진행 후 WSL 도 Update 진행 
PS C:\Users\jhlee wsl --update  
PS C:\Users\jhlee wsl --shutdown  

  • WSL Ubuntu 각 App 및 X11 설치 진행  
아래에서 본인이 필요한 것들만 설치를 진행을 하도록하자. 
만약 필요없다면 생략하며 나의 경우 다 테스트 해보고 싶어 설치했다. 
jhlee@LAPTOP-JH:~$ sudo apt update  
jhlee@LAPTOP-JH:~$ sudo apt install gedit -y 
jhlee@LAPTOP-JH:~$ sudo apt install gimp -y       // 이미지 편집기 
jhlee@LAPTOP-JH:~$ sudo apt install nautilus -y   // 윈도우 탐색기 비슷 
jhlee@LAPTOP-JH:~$ sudo apt install vlc -y        // 멀티미디어 재생 
jhlee@LAPTOP-JH:~$ sudo apt install x11-apps -y   // X11기반의 App, xclock, xcalc 이전에 이것을 연결해서 사용했음 

그리고, Linux MS Teams와 Edge도 다 지원가능한 것으로 보이며, Ubuntu 기반으로도 MS Teams도 지원가능하다.
아마 Mac에서도 다 지원을 해줘야 할테니, Linux인 Ubuntu도 다 지원을 해줄 것이라고 생각되어진다. ㅋㅋㅋ

  • 일단 상위 설치된 것들 테스트 진행 

VLC 실행 

GIMP실행 

nautilus 실행 


X11 Apps

만약 원격으로 X11으로 하고 싶다면 다 실행이 될 것이라고 생각되어진다. 


2.2  Powershell 확인사항  


  • WSL 실행 
Powershell에서 wsl를 바로 실행하여, linux의 명령어 사용 
예를들면, VS Code의 본인 Project에서 Powershell을 띄어 사용하면 WSL바로 사용가능 
PS C:\Users\jhlee wsl # wsl 바로 실행 본인의 위치에서 wsl이 동작  

  • WSL Network 확인
간혹 WSL 내부 Network 불일치 문제로 동작이 WSL network 동작안됨 (Reboot)하면 대충됨 

PS C:\Users\jhlee wsl hostname -I  # wsl network 정보 확인  
172.23.51.70 

PS C:\Users\jhlee wsl hostname   # wsl hostname 확인 
LAPTOP-JH

PS C:\Users\jhlee ipconfig  # wsl hostname -I 의 주소와 비교 불일치  

무선 LAN 어댑터 Wi-Fi:

   연결별 DNS 접미사. . . . :
   링크-로컬 IPv6 주소 . . . . : fe80::d47d:b7ad:2f79:45f0%17
   IPv4 주소 . . . . . . . . . : 192.168.1.26
   서브넷 마스크 . . . . . . . : 255.255.255.0
   기본 게이트웨이 . . . . . . : 192.168.1.1
.....

이더넷 어댑터 vEthernet (WSL):

   연결별 DNS 접미사. . . . :
   링크-로컬 IPv6 주소 . . . . : fe80::271f:e1b3:31c3:b7e0%50
   IPv4 주소 . . . . . . . . . : 172.23.48.1
   서브넷 마스크 . . . . . . . : 255.255.240.0
   기본 게이트웨이 . . . . . . :

PS C:\Users\jhlee wsl ip a  # wsl ip a 실행 (ifconfig를 미쳐 설치못함) 

1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: bond0: BROADCAST,MULTICAST,MASTER mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 3e:2b:3b:7c:54:8e brd ff:ff:ff:ff:ff:ff
3: dummy0: BROADCAST,NOARP mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 22:48:03:fa:46:b0 brd ff:ff:ff:ff:ff:ff
4: tunl0@NONE: NOARP mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/ipip 0.0.0.0 brd 0.0.0.0
5: sit0@NONE: NOARP mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0
6: eth0: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:fa:88:da brd ff:ff:ff:ff:ff:ff
    inet 172.23.51.182/20 brd 172.23.63.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fefa:88da/64 scope link
       valid_lft forever preferred_lft forever


  • 관련해결방법 
Window Reset하고 다시 WSL 실행 

WSL에 사용하는 network을 별도로 추가연결 방법

최근 고정 IP Shell Script 찾음