0. 준비

  가. ubuntu

  나. tmux 3.0a

 

1. 설정

  가. $ vi .tmux.conf

    1) set -g mouse on

      가) 마우스로 윈도우 사이즈 조정 가능

    2) unbind t

      가) t를 단축키로 할당하므로 기존의 t(clock mode)를 해제

    3) bind-key -T prefix t new-window \; split-window -v \; split-window -h 'htop' \; select-pane -t 0 \; split-window -h \; select-pane -t 0 \;

      가) 새로운 윈도우을 생성, 윈도우를 상하로 분리(상하팬이됨), 하부팬을 좌우로 분리(좌우팬이됨)하고 우측팬에 htop명령어 실행, 상부팬을 선택, 팬을 좌우로 분리(좌우팬이됨), 좌측상단팬을 선택

      나) 새로운 윈도우 생성을 하지 않을 경우 new-window \;를 삭제할 것

 

0. WSL2 in Windows10

  가. 22H2(OS Build 19045/3693)

  나. WSL2(Ubuntu20.04)

  다. 참고자료

    1) https://learn.microsoft.com/en-us/windows/wsl/connect-usb

 

1. USB/IP 설치

  가. Windows10에서

    1) https://github.com/dorssel/usbipd-win/releases/download/v3.2.0/usbipd-win_3.2.0.msi

    2) msi 설치

  나. WSL2에서

    1) $ sudo apt install linux-tools-generic hwdata

    2) $ sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/*-generic/usbip 20

 

2. USB/IP 활용

  가. Windws10에서 시리얼장치 검색

    1) PowerShell 실행(관리자권한)

      가) > usbipd wsl list

      나) 사용하려는 장치의 BUSID를 확인해 둘 것

      다) > usbipd wsl attach --busid <busid>

        (1) 장치가 WSL2로 연결됨

        (2) > usbipd wsl detach --busid <busid>

          (가) 장치 분리

  나. WSL2에서 시리얼장치 확인

    1) Terminal

      가) $ lsusb

0. 준비

  가. Ubuntu

  나. 특정포트는 애플리케이션에서 root권한이 있어야지 포트를 사용할 수 있음

    1) well-known port : 0~1023

 

1. $ sysctl net.ipv4.ip_unprivileged_port_start

  가. 해당 명령을 실행하면 root권한없이 사용할 수 있는 포트의 시작번호를 알려줌

  나. 1024가 기본으로 설정되어 있음

  다. 필요시에만 사용하려면

    1) $ sudo sysctl net.ipv4.ip_unprivileged_port_start=0

      가) ip_unprivileged_port_start와 =과 0은 붙여야함(공백없이)

 

2. service 파일 등록(운영체제 동작시마다)

  가. /etc/systemd/system/port502.service

    1) sysctl 명령어의 위치는 which sysctl로 확인하여 전체경로를 입력(/usr/sbin/sysctl일 수도 있음)

[Unit]
Description=port502open

[Service]
ExecStart=/sbin/sysctl net.ipv4.ip_unprivileged_port_start=0

[Install]
WantedBy=multi-user.target

  나. $ sudo systemctl enable port502.service --now

    1) now를 붙이면 systemctl enable 후에 systemctl start와 동일한 동작

0. 준비

  가. $ ip addr에서는 장치가 인식되어 있음을 확인함

  나. $ ifconfig에서는 장치가 나타나지 않음

    1) $ ifconfig 해당장치 up을 할 경우 장치가 나타남

  다. GUI로 설정할 경우 GUI에서 네트워크카드가 나타나지 않음

 

1. 해결

  가. $ sudo touch /etc/NetworkManager/conf.d/10-globally-managed-devices.conf

  나. $ sudo systemctl restart NetworkManager

L0. 준비

  가. odroid go advance

  나. ubuntu 18.04 이미지

    1) https://wiki.odroid.com/odroid_go_advance/os_image/ubuntu_es

 

1. 기본 설정

  가. ssh 접속

    1) 기본 ID, PW : odroid, odroid

  나. 패키지 최신 업데이트

    1) $ sudo apt update && sudo apt upgrade -y

    2) 재부팅

  다. joystick 소스코드 다운로드(from github)

    1) private 패키지이므로 github cli 설치

      가) https://github.com/cli/cli/blob/trunk/docs/install_linux.md

    2) 인증도 실시할 것

    3) $ git clone https://github.com/kajuha/oga_joy.git 

 

2. 우분투 응용 프로그램 패키지 등 설치

  가. $ sudo apt install build-essential libboost-all-dev libncurses5-dev

  나. 재부팅

 

3. 소스코드 수정 및 컴파일

  가. oga_joy 디렉토리내 kajuha/kapp 텍스트 문자열을 모두 odroid/oga_joy 으로 수정

    1) kajuha/kapp : 사용자 계정 / oga_joy의 변경된 명칭

  나. oga_joy/joystick 디렉토리에서

    1) $ make

  라. oga_joy/setting/add_menu_emulationstation 디렉토리에서

    1) $ make

  마. oga_joy/setting/systemd/getty@tty1.service.d 디렉토리에서

    1) override.conf 내용의 kajuha 을 사용자 계정 odroid로 변경할 것

    2) $ sudo systemctl enable getty@tty1

    3) $ sudo mkdir /etc/systemd/system/getty@tty1.service.d

    4) $ sudo ln -s `readlink -f override.conf` /etc/systemd/system/getty@tty1.service.d

      가) 홑따옴표가 이나라 backquote

 

4. 기존 서비스 비활성화

  가. $ sudo systemctl disable emulationstation

  나. $ sudo systemctl disable firstboot

  다. $ sudo systemctl disable gamestream

 

5. 쉘 수정

  가. zsh 설치(기본 쉘로 만들 것)

    1) 아래의 $TTY가 bash에서 응답하지 않았음

  나. 사용자 쉘(.bashrc 또는 .zshrc 등)의 마지막에 아래 추가

------------------------------------------------------------------

if [ $(ps -e|grep -i emulationstatio|wc -l) -ne 0 ]
then
    echo "emulationstation running"
else
    if [ $(echo $TTY|grep -i tty|wc -l) -ne 0 ]
    then
        echo "because of LCD, emulationstation run"
        /usr/bin/emulationstation/emulationstation.sh
    else
        echo "because of not LCD, don't run emulationstation"
    fi
fi

------------------------------------------------------------------

0. 준비

  가. odroid m1

  나. ubuntu 20.04

  다. kernel : odroidm1-4.19.y

 

1. 기본설정 확인

  가. $ dmesg|grep -i can

    1) can과 관련된 커널 메시지가 있는지 확인

    2) 기본 설치에는 없음

  나. $ sudo vi /boot/config.ini

    1) can0와 i2c1이 같은 핀을 공유하므로 i2c1을 해제하고 can0를 설정

    2) overlays = "i2c0 i2c1" 을 overlays = "i2c0 can0"로 변경

    3) 재부팅

  다. $ dmesg|grep -i can

    1) CAN device driver interface 가 출력됨

    2) rockchip_canfd: module license 'unspecified' taints kernel.

    3) rockchip_canfd: Unknown symbol .......... (err -2)

    4) 에러 발생함

 

2. 에러 해결

  가. 커널 가져와서 커널 모듈 컴파일 시도

    1) $ git clone --depth 1 https://github.com/hardkernel/linux.git -b odroidm1-4.19.y

      가) $ make menuconfig

        (1) 실행후 저장후 종료

      나) $ make modules

      다) $ find .|grep -i rockchip_canfd

        (1) 모듈 인스톨을 해도 되지만, 해당 모듈만 복사하려고 하였음

        (2) drivers/net/can/rockchip/ 에 커널 모듈 생성됨

      라) $ sudo find /|grep -i rockchip_canfd

        (1) /usr/lib/modules/4.19.219-odroid-arm64/kernel/drivers/net/can/rockchip/

      마) $ sudo cp drivers/net/can/rockchip/*.ko /usr/lib/modules/4.19.219-odroid-arm64/kernel/drivers/net/can/rockchip

        (1) 재부팅

  나. dmesg 확인

    1) $ dmesg|grep -i can

      가) rockchip_canfd: version magic '4.19.219 SMP mod_unload aarch64' should be '4.19.219-odroid-arm64 SMP mod_unload aarch64'

      나) 커널과 커널버전 모듈이 다름으로 인한 에러

        (1) 커널 버전은 동일하므로 뒤에 붙는 로컬버전 메시지가 다름으로 인한 에러

    2) 커널에서 버전 수정

      가) $ make menuconfig

        (1) General setup

        (2) Local version - append to kernel release

          (가) 선택하여 "-odroid-arm64" 입력

      나) $ make modules

        (1) missing MODULE_LICENSE() 경고 발생

  다. MODULE_LICENSE() 수정

    1) $ vi drivers/net/can/rockchip/rockchip_can.c

      가) 맨 마지막줄에 MODULE_LICENSE("GPL");

      나) 라이센스는 임시로 GPL로 부여

    2) $ vi drivers/net/can/rockchip/rockchip_canfd.c

      가) 맨 마지막줄에 MODULE_LICENSE("GPL");

      나) 라이센스는 임시로 GPL로 부여

    3) $ make modules

    4) $ sudo cp drivers/net/can/rockchip/*.ko /usr/lib/modules/4.19.219-odroid-arm64/kernel/drivers/net/can/rockchip

      가) 재부팅

    5) $ dmesg|grep -i can

      가) 에러없음

 

3. can loopback 시험

  가. 커널 모듈 확인

    1) $ lsmod|grep -i can

      가) rockchip_canfd가 정상로딩되어 있으면 ok

  나. 장치 인식 확인

    1) $ ip link show

    2) 상세확인

      가) $ ip -details link show

  다. 장치 설정

    0) 참고 : https://wiki.radxa.com/Rock3/dev/can

    1) $ sudo ip link set can0 down

    2) $ sudo ip link set can0 type can bitrate 1000000 dbitrate 1000000 loopback on fd on

    3) $ sudo ip link set can0 up

    9) 정상

  라. 통신 확인

    1) $ sudo apt install can-utils

    2) $ sudo candump can0&

    3) $ sudo cansend can0 123#1122334455667788

 

4. can 시험

  가. 커널 모듈 확인

    1) $ lsmod|grep -i can

      가) rockchip_canfd가 정상로딩되어 있으면 ok

  나. 장치 인식 확인

    1) $ ip link show

    2) 상세확인

      가) $ ip -details link show

  다. 장치 설정

    0) 참고 : https://wiki.radxa.com/Rock3/dev/can

    1) $ sudo ip link set can0 down

    2) $ sudo ip link set can0 type can bitrate 1000000 dbitrate 1000000 fd on

    3) $ sudo ip link set can0 up

    9) 정상

  라. 통신 확인

    1) $ sudo apt install can-utils

    2) $ sudo candump can0&

    3) $ sudo cansend can0 123#1122334455667788

0. 준비

  가. vscode

 

1. 상황

  가. 아래와 같이 pdf에서 텍스트를 블록한 상황

  나. 텍스트 파일에 붙여넣을 경우

  다. pdf에서 문자를 복사(ctrl + a, ctrl + c) 및 텍스트 파일에 쓰기(ctrl + v)

  라. 위와 같은 상황에서 일부 특징적인 부분이 있을 경우 필요한 부분을 가져오기

 

1. 정규표현식 사용

  가. 특징적인 부분

    1) 157, 개행, R/W, 개행, PID_로 시작하는 문자, ......

  나. 내가 생각한 전략 1

    1) PID_로 시작하는 문자를 추출하고 문자열 앞에 유니크한 텍스트 집어넣기

      가) 유니크한 텍스트는 현재 파일에서 표현되지 않을 것 같은 아무 문자열

    2) vscode의 검색창에 아래와 같이 입력(alt + r : 정규표현식 사용 활성화)

      가) ^[0-9]+[\r\n]+[CRW/-]+[\r\n]+PID_[A-Z_0-9]+$

        (1) ^ : 행의 처음

        (2) [0-9]+ : 숫자(0~9)가 1개이상(+)

          (가) * : 앞의 문자가 0개 이상

        (3) [\r\n]+ : LF 또는 CR이 1개이상(+)

          (가) * : 앞의 문자가 0개 이상

        (4) [CRW/-]+ : C, R, W, /, - 문자가 1개이상(+)

          (가) * : 앞의 문자가 0개 이상

        (5) PID_ : 찾을 문자열

        (3) [A-Z_0-9] : A-Z(알파벳), _(언더바), 0-9(숫자)인 문자 1개

        (4) + : 앞의 문자가 1개 이상

          (가) * : 앞의 문자가 0개 이상

        (5) $ : 행의 끝

  다. 내가 생각한 전략 2

    1) vscode의 바꾸기창에 아래와 같이 입력

      가) qwerty\n$0

        (1) $0 : 검색된 문자열이 들어감

  라. 내가 생각한 전략 3

    1) qwerty를 ctrl + d 로 모두 선택

    2) end 키, spacebar 키, delete 키 : qwerty 158 문자열만 남음

    3) end 키, spacebar 키, delete 키 : qwerty 158 R/W 문자열만 남음

    4) end 키, spacebar 키, delete 키 : qwerty 158 R/W PID_HIGH_SPEED_LIMIT 문자열만 남음

  마. 내가 생각한 전략 4

    1) qwerty를 ctrl + d 로 모두 선택

 

0. 준비

  가. Ubuntu 18.04

 

1. 설정

  가. 기본 라우팅 인터페이스 선택은 아니고 실제로 기본 라우팅 인터페이스로 선택하지 않게 하는 방법임

  나. $ sudo nmtui

    1) Edit a connection > Wi-Fi(Ethernet) 에서 기본 라우팅 인터페이스로 하지 않을 인터페이스를 선택 > Edit

    2) IPv4 CONFIGURATION 을 Hide > Show로 변경한뒤 > Never use this network for default route 선택

0. 준비

  가. ubuntu 18.04

  나. ros melodic

 

1. roslaunch 실행시 알 수없는 경고 현상

  가. roslaunch 실행시에 아래와 같은 경고가 나타남

    /opt/ros/melodic/lib/python2.7/dist-packages/roslib/packages.py:470: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
  if resource_name in files:

  나. 어떠한 파일에서 경고가 나오는지는 확인할 수 없었음

  다. $HOME/.ros/log/lastest의 로그에서 상세한 로그가 있는지 확인하려 했으나 확인할 수 없었음

  라. 아래와 같은 방식으로 경고가 없어지는지 하나씩 확인함

    1) launch 파일에서 다양한 노드를 실행하고 있었으므로 노드를 하나씩만 실행하여 어떠한 노드가 실행할 때 에러가 발생하는 지 확인, 특정한 노드를 실행할 때 경고가 나타나는 것을 확인함

    2) 경고가 발생한 패키지의 소스코드를 삭제하고 main에 printf하나만 입력하였으나 그래도 경고발생

    3) 해당 패키지의 src에 시험용 소스코드를 여러개 포함하고 있었으므로 이를 이상하다고 여겨, 시험용 디렉토리를 삭제해봄, 경고가 나타나지 않음

 

2. 경고현상 파악 및 해결

  가. src에 시험용 소스코드를 포함한 디렉토리를 삭제함으로 경고현상이 해결됨

  나. 시험용 소스코드가 2개의 디렉토리에 있었는데, 1개의 디렉토리를 삭제하면 경고가 없어졌고, 다른 1개의 디렉토리를 삭제하면 경고가 없어지지 않았음.

  다. 2개의 디렉토리가 가진 다른 점을 확인하였음

  라. 실행권한이 다른 것이 있는 파일 및 한글파일명의 존재유무임

  마. 실행권한은 상관없었음

  바. 한글파일명으로 인한 경고임

    1) 경고에도 unicode가 포함된 것으로 보아 한글 파일명을 영어로 변경

  사. 실행시 이상없음

 

3. ros에서 실행파일과 상관없이 src에 한글파일명이 있는 파일이 존재할 경우 경고가 나타남

0. 준비

  뷁. 초보자는 추천하지 않음

  가. 윈도우 10 기준

  나. ACR122U-A9 NFC 복사기

    1) https://ko.aliexpress.com/wholesale?catId=0&initiative_id=SB_20220109223853&SearchText=ACR122U 

  다. Mi band 6 NFC

    1) NFC가 되는 모델은 모두 가능(아마?)

    2) https://www.mi.com/global/product/mi-smart-band-6-nfc/

  라. Magic Card(NFC 카드)

    1) UID를 변경할 수 있는 NFC 카드

    2) https://ko.aliexpress.com/wholesale?catId=0&initiative_id=AS_20220109224252&SearchText=nfc+magic+card

  마. 아이폰 Mi Fit 앱

    1) 안드로이드에서도 가능하며 앱에서 NFC 카드 생성 명칭이 일부 다름

  바. 요약

    1) 암호화된 NFC 카드(A) 해킹하여 덤프

    2) 덤프된 파일(A 덤프)에서 암호화된 영역 제거(B 덤프)

    3) 암호화된 영역이 제거된 덤프(B 덤프)를 UID 변경가능한 NFC 카드(B)에 복제

    4) 복제된 NFC 카드(B)를 미밴드 NFC 카드(C)에 복제

    5) 미밴드 NFC 카드(C)에 암호화 영역이 있는 덤프(A 덤프)를 복제

1. ACR122U-A9 복사기 USB 장착
  가. 초기 기본 드라이버는 윈10 기본에서 인식(램프가 적색으로 표시, NFC 카드가 유무에 따라 적(없음)<->녹(있음)으로 변경됨)
    1) 초기 기본 드라이버로 인식되면 램프에 적색으로 표시(NFC 카드가 없음, 있으면 녹색)
    2) 장치 관리자 > 스마트 카드 판독기 > ACR122 Smart Card Reader <- 복사기 자체
    3) 장치 관리자 > 스마트 카드 > 알 수 없는 스마트 카드 <- 복사기에 올려놓은 카드
  나. 수정 드라이버는 미페어 툴에서 설치
    1) 장치 관리자 > libusbK Usb Devices > ACR122U PICC Interface
    2) 램프는 제어를 하지 못하는 것 같음
  다. 수정 드라이버를 장치 관리자에서 삭제하면 기본 드라이버로 돌아감

2. 암호화된 NFC 카드를 올리면 비프음과 함께 복사기 램프가 변경됨, 초기 기본 드라이버에서 적색 -> 녹색
  가. 수정 드라이버가 설치된 상태부터는 복사기 램프는 동작하지 않음

 

3. 미페어 툴 설치

  가. https://github.com/xavave/Mifare-Windows-Tool

  나. 설치파일 다운로드 : https://github.com/xavave/Mifare-Windows-Tool/releases

  다. libusbK 드라이버 설치 동의
    1) usb 라이브러리를 통해서 ACR122U-A9를 제어하기 위함

4. 미페어 툴 프로그램
  가. READ TAG 클릭
  나. 기본 셋팅으로 [Start decode & Read tag] 실시


  다. 암호화된 NFC카드일 경우 시간이 걸리므로 완전히 해킹될 때까지 기다림
  라. Save Dump as : 해킹된 덤프파일 저장하기

    0) 기본적으로 C:\Program Files (x86)\AVXTEC\MWT\dumps 디렉토리에 UID이름으로 덤프됨(예:mfc_E661CD01.dump)

    1) 바탕화면에 00_original.dump로 저장

      가) 이름은 임의로 해도 상관없음

    2) 00_original.dump를 복사하여 01_delete_key.dump로 저장

      가) 이름은 임의로 해도 상관없음

 

5. 덤프파일 수정

  가. 01_delete_key.dump에서 암호화된 영역 삭제

  나. 텍스트 에디터(윈도우 기본 아님) https://www.sublimetext.com/를 사용하여 편집

    1) dump 파일은 hex 데이터 이므로 수정할 수 있는 툴은 아무것이나 사용해도 됨

    2) sublime text를 설치하고 파일을 열면 기본적으로 hex로 열리므로 추천함

  다. 파일의 기본적인 구성

    1) 아래와 같은 형식이 기본적인 하나의 섹터 구성(암호화가 되어 있지 않음)

    2) 총 0~15 섹터까지 존재함

      가) 0번 섹터를 제외하고 1~15 섹터중에 값이 입력된 섹터가 존재하면 암호화되지 않은 영역과 동일한 값으로 입력

        (1) 값이 입력되어 있는 부분이 암호화된 부분으로 미페어툴에서 암호화영역을 해킹한 부분임 그래서 값이 보여짐

  라. 암호화된 영역 수정(예시)

    1) 수정전 14번 15번 섹터(15번이 암호화된 섹터이므로)

    2) 수정후 14번 15번 섹터(15번 섹터의 암호화 부분을 제거)

  마. 파일 저장

 

6. UID 변경가능한 매직카드에 01_delete_key.dump 쓰기

  가. 매직카드 NFC 복사기에 올리기

  나. 프로그램의 Enable Periodic Tag AutoScan을 활성화하여 새로운 카드 인식

    1) 주기적으로 카드를 스캔하므로 카드가 인식되고 나면 비활성화 할 것

    2) 또는 프로그램을 껐다 켤 것

  다. READ TAG

    1) 기본 셋팅으로 [Start decode & Read tag] 실시

  라. WRITE TAG

    1) 기본 셋팅인 상태에서

      가) Tag Type : chinese magic unlocked/gen1 (W)를 선택

    2) [Select Source Dump] 클릭하여 01_delete_key.dump를 선택

    3) [Start Cloning] 선택

 

7. 매직카드를 미밴드 NFC에 복제(iOS, Mi Fit 기준)

  가. iOS > Mi Fit > 프로필 > 내 기기 : Mi Smart Band 6 NFC > 앱 설정 >
    카드 > 출입카드 > 추가 > Simulate physical access control card >

    Unencrypted Card Emulation > Next > Detect

    1) 미밴드에 매직카드를 갖다댐

    2) 카드 인식후 > Create now 선택

      가) 시간이 소요됨

    3) 이름 설정후 > Done

 

8. 미밴드 NFC에 암호화영역 복제

  가. C:\Program Files (x86)\AVXTEC\MWT\dumps 디렉토리에 blank_tag.dump를 제외한 덤프 삭제

    1) 기존 덤프에 동일한 UID가 있으면 새로 태그를 읽지 않으므로 기존 덤프 삭제

  나. 미밴드에서 7번에서 복사한 NFC 카드로 셋팅

  다. 미밴드를 NFC 복사기에 올림

  라. READ TAG

    1) 기본 셋팅으로 [Start decode & Read tag] 실시

    2) 암호화 영역없이 01_delete_key.dump와 동일하게 복사되어 있는지 확인

  마. WRITE TAG

    1) 기본 셋팅인 상태에서

      가) Tag Type의 기본 상태인 Not 0 writable (w)로 둘 것

    2) [Select Source Dump] 클릭하여 00_original.dump를 선택

 

9. 완료

0. 준비

  가. ubuntu 18.04

  나. 리눅스에서 탭을 누르면 자동완성이 됨

    1) ssh 인증키를 만들어 두고 접속하면 scp나 ssh를 이용하는 프로그램의 경우 자동완성이 됨

  다. local(client) remote(server)로 설명함

 

1. local(client)

  가. 로컬에 인증키 생성 : $ ssh-keygen

    1) 특별한 사항이 있지 않는 한 기본값으로 설정

    2) 인증키(비밀키, 공개키)는 $HOME/.ssh/에 id_rsa(비밀), id_rsa.pub(공개)로 저장됨

  나. 리모트(서버)측에 인증키 복사 : $ ssh-copy-id -i ~/.ssh/id_rsa 리모트사용자명@리모트IP

    1) -i : 파일 지정할 시

    2) 리모트사용자명은 로컬과 리모트가 동일한 사용자명을 가지면 안적어도 됨

 

2. remote(server)

  가. 할 것 없음

  나. 상대방 인증키는 ~/.ssh/authorized_keys에 저장됨

0. 준비

  가. Ubuntu 18.04 및 udev 사용하고 있음

  나. eeprom을 통해 일련번호를 설정할 수 있는 시리얼장치가 아님

    1) 일반적으로 eeprom이 내장된 시리얼장치는 일련번호를 설정하여 바로 고유이름을 설정하면 됨

    2) 본 예시는 eeprom이 없는 CH340G 시리얼 칩으로 가정

  다. usb를 통해서 시리얼장치가 연결됨

  라. eeprom이 없는 동일한 제조사의 시리얼 장치를 여러 개 연결함

    1) 하나의 제조사 또는 동일한 제조사라도 장치명에 대해 유일값을 가지는 것이 있다면 그것을 활용하면 됨

 

1. 상태 확인

  가. dmesg를 통해서 시리얼장치의 이름을 확인할 것

  나. 시리얼장치의 장치 연결내역을 확인할 것

    1) $ udevadm info --attribute-walk --path=/sys/bus/usb-serial/devices/ttyUSB4

      가) 장치의 연결순서를 알려줌

      나) ex) pci 장치 > xHCI 장치 > USB 장치(USB허브) > USB 장치(USB허브) 포트 > USB 장치(USB시리얼장치) > USB  시리얼장치

    2) 장치를 식별할 수 있도록 시리얼장치면서, 장치가 연결된 usb허브의 순번을 이용함

      가) 장치를 아주 구체적으로 확인할 수 있는 값을 이용하는 것이 좋음

      나) ex) KERNELS=="1-7.4:1.0" : 시리얼 장치로 매칭되기 전 마지막 연결 상태값

      다) ex) DRIVER=="ch341-uart" : 시리얼 장치로 매칭된 마지막 값

 

2. udev rule 작성

  가. ex) 99-test-serial.rules : 파일명

    1) ACTION=="add", KERNELS=="1-7.4:1.0", DRIVERS=="ch341", SYMLINK+="driver.1-7.4.ch341"

  나. /etc/udev/rules.d 로 파일복사

 

3. udev 재실행 및 확인

  가. $ sudo systemctl restart udev

  나. 시리얼 장치를 여러곳에 꽂아보고 실제로 특정 위치에서 driver.1-7.4.ch341가 활성화되는지 확인

0. 준비

  가. 개인 티비 설정임

  나. theham UBER AMG UA501QLED

  다. PC에 adb 툴 설치

    1) https://developer.android.com/studio/releases/platform-tools

 

1. 설정

  가. 안드로이드 티비 기본 인터넷 설정

    1)  IP 주소 확인

  나. 개발자 옵션 활성화

    1) 설정 > 기기 환경설정 > 정보 > Android TV OS 빌드를 계속 클릭하여 개발자 옵션이 활성화되도록 함

    2) 설정 > 기기 환경설정 > 개발자 옵션 > USB 디버깅 사용

 

2. 설치

  가. 안드로이드 티비와 연결

    1) adb connect 192.168.1.122:5555

    2) 안드로이드 티비 화면에 디버깅 허용

  나. 연결상태 확인

    1) adb devices

  다. 프로그램 설치

    1) adb install allive-v3.8-release.apk

    2) success가 나타나면 완료

 

3. 사용

  가. 프로그램이 설치되었으므로 사용

0. 내 생각

  가. 아래의 얘기는 모든 문장 앞에 보통은 이라는 말이 붙어야함

  나. 디테일하게는 모두 틀림

 

1. SD vs eMMC

  가. 2개는 동일함

  나. 장착방식에 따른 명칭

    1) SD : 탈착 가능

    2) eMMC : 보드에 납땜

  다. 구조

    0) Controller은 IP로 NAND와 함께 제조 또는 IC로 별도 장착될 수 있음

      가) 일반적 eMMC = Controller(IP)와 NAND Flash가 원 칩 패키징

      나) 일반적 SD는 별도 IC + NAND Flash, 또는 eMMC와 동일하게 원 칩 패키징

    1) SD : NAND Flash + Controller(SD 인터페이스 겸함)

      가) Controller은 ECC, Wear Leveling 등등의 역할을 하는데, 어떤 글에서는 SD에서는 Wear Leveling는 의무가 아니라고함, 물론 SD도 버전별로 다름

      나) 그래서 Wear Leveling는 Controller 제조사에 따라 구현체가 있을수도 있고 없을 수도 있음

    2) eMMC : NAND Flash + Controller(eMMC 인터페이스 겸함)

    3) 컨트롤러의 기능은 거의 동일함

  라. 전송 데이터

    1) SD : 최대 4 비트 병렬 전송(반이중)

      가) 사실 이것도 SD의 버전 별로 다름

      나) 1비트, 4비트, SPI모드

      다) 직렬 전송도 가능

    2) eMMC : 최대 8 비트 병렬 전송(반이중)

      가) 사실 이것도 MMC의 버전 별로 다름

      나) 1비트, 4비트, SPI모드

      다) 직렬 전송도 가능

 

2. eMMC vs SSD

  가. eMMC : NAND Flash + Controller(eMMC)

  나. SSD : NAND Flash n개 + Controller(SSD 인터페이스 규격(NVME, SATA, PCIe 등)

    1) 고급 기능들을 가지는 컨트롤러가 장착되며, NAND Flash가 많이 들어가는 것으로 이해하면 됨

 

3. USB Flash vs SD

  가. 데이터 저장이라는 역할에서 별반차이가 없음

  나. 인터페이스가 USB냐 SD냐의 차이가 있음

  다. USB Controller IC와 SD Controller IC가 장착됨

 

4. eMMC vs UFS

  1) 2개는 데이터 전송 방식이나 외형 규격이 다름

  2) eMMC는 PCB 장착을 위함

  3) UFS는 PCB 장착 또는 SD와 같이 탈착형 카드가 있음

    가) UFS : NAND Flash + Controller(UFS)

    가) UFS : 전이중 병렬

1. Jetson developer kit

  가. 상업적으로 사용할 수 있느냐, 비상업적으로 사용해도 되냐의 여부를 가리지 않음

    1) 개발보드는 비생산을 위한 제품(필드에서 사용을 목적으로 하지 않았음)으로 개발되었기때문에, 시험용도나 제품개발 전 용도로 사용할 것을 얘기함

    2) 개발보드는 1인에게 시험 또는 제품개발 전 용도로 라이센스가 부여됨, 다른 이에게 전달할 경우 라이센스가 해제됨

  나. 젯슨 개발보드의 경우 고장이 났을 경우, 상업적으로 사용했으면 nvidia가 젯슨 개발보드의 보증을 제한한다는 의미

    1) 젯슨 개발보드가 고장났을 경우 수리를 해주지 않는다는 것

    2) 개발보드가 고장났을 경우, 상업적으로 사용하는 회사가 개발보드의 수리를 의뢰하지 않고, 다시 재구매해서 상업적으로 사용하면 됨

    3) 결론 : 상업적으로 사용해도 무관하며, 고장났을 경우 회사가 직접 다시 사서 교체하면 됨

 

2. Jetson module

  가. 프로세싱을 위한 모듈로 구성된 모듈임, 상업적 용도로 제작되어 있음

  나. 대신에 캐리어보드는 직접 자작 또는 구매해서 사용해야함

 

3. 기타

  가. Jetson module에는 산업용과 아닌 것이 있는데 산업용은 수명이 10년 아닌 것은 5년으로 보증

 

4. 비교

Operating Lifetime None specified 5 or 10 year operating life in a production environment
Warranty 1 year warranty for development use only 3 year warranty(Unless otherwise specified)
Availability No guarantee of availability.
Order quantities may be limited.
No notice before EOL.
Available for at least 5 years (up to 10).
Built to forecast.
Last Time Buy notice before EOL.
BOM Several components may be non-production quality. Components may change without notification. Production rated components. Any changes are notified via PCN following JEDEC JESD-046 standard.
Validation Basic functional validation in a constrained environment. Full functionality and reliability validation across environmental specification. Tests are listed in datasheet.

0. 준비사항

  가. Ubuntu 18.04

  나. 원문참고

    https://answers.ros.org/question/56264/is-there-a-way-to-adjust-the-build-order-of-a-package-in-catkin-pcl/

 

1. 에러사항

  가. catkin build를 할 경우 패키지 의존성으로 인해 에러가 발생함

  나. 단순 패키지 의존성 에러라면 CMakeLists.txt의 find_package에 필요한 패키지 추가

 

2. 해결

  가. 패키지 빌드시 의존성 패키지가 빌드가 되어 있지 않아서 에러가 발생한 경우라면

  나. package.xml에 <build_depend>의존성패키지</build_depend>를 하면

    의존성 패키지가 빌드된 뒤에 해당 패키지가 빌드됨

0. 준비사항

  가. Ubuntu 18.04

    1) x64

  나. linux pro 2018

    1) lv2018pro-linux.iso로 가정

  다. 작업경로

    1) ~/down

    2) ~/down/lv2018pro-linux.iso

    3) ~/down/labview_x64

    4) ~/down/mnt <-- read only

      가) $ cd ~/down

      가) $ sudo mount lv2018pro-linux.iso mnt

      나) down 경로에 있다는 것을 가정

 

1. rpm to deb

  가. 필요한 패키지 설치

    1) $ sudo apt install alien

  나. x86을 제외한 rpm 파일 복사

    1) $ cd ~/down/mnt

    2) $ cp *.rpm ~/down/labview_x64

    3) $ cd ~/down/labview_x64

    4) $ rm -f *i386*

  다. rpm 파일을 deb로 변환

    1) $ sudo alien *.rpm --scripts

 

2. install

  가. deb 설치

    1) $ sudo dpkg -i *.rpm

    2) 에러가 발생할 수 있으나 무시

 

3. 실행

  가. $ labview64

0. 준비

  가. Ubuntu 18.04

 

1. 저장소 추가

  가. $ sudo add-apt-repository ppa:danielrichter2007/grub-customizer

 

2. 설치

  가. $ sudo apt install grub-customizer

 

3. 실행(커맨드라인)

  가. $ grub-customizer

+ Recent posts