레이블이 Mac인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Mac인 게시물을 표시합니다. 모든 게시물 표시

2016년 11월 28일 월요일

라즈베리 파이에 여러개의 시리얼 포트가 필요할 때 (Use multiple serial port in Raspberry Pi)

라즈베리 파이로 무언가를 만들려고 하다 보면 여러개의 시리얼 포트가 필요한 경우가 있다.  라즈베리 파이에는 기본적으로 두개의 시리얼 포트가 있지만 그 중 하나는 미니포트라 사용에 꽤 신경 써 줘야 하는 부분이 많고,  라즈베리 파이 3의 경우 시리얼포트를 블루투스가 사용하고 있어 블루투스를 동시에 사용하려고 하면 매우 골치 아퍼 진다.  (상세한 내용은 이전 포스트 (라즈베리 파이 3 시리얼/블루투스 문제 (Raspberry Pi 3 UART/Bluetooth problem))를 참고)

그럼 시리얼 포트를 추가할 수 있는 가장 쉬운 방법은 USB-to-Serial converter를 사용하는 것이다. 



시중에 다양한 종류의 제품이 나와 있고 가격도 그리 비싸지 않다.

다만 이 제품들을 사용해서 여러개의  시리얼 포트를 추가하려면 포트당 한개의 USB  포트가 필요하기 때문에 별도의 허브를 붙여줘야 하는 문제가 발생한다. 

그래서 FTDI에서는  USB-to-multiport  Serial  comverter  칩을 제공하고 있다.  FT2232H나 FT4232H  칩을 이용하면 한개의 USB포트로 2개 또는 4개의 시리얼 포트를 확장할 수 있게 된다. 






FT2232H breakout board

그리고  이 경우 가장 큰 장점은 raspbian에 디바이스 드라이버가 이미 포함되어 있어 따로 드라이버를 설치할 필요 없이 라즈베리 파이에 연결만 해 주면 장치를 인식해 곧바로 사용할 수 있다는 것이다. 


위의 화면 캡춰와 같이 breakout board를 연결하기 전에는 없었지만 breakout board를 USB에 연결하고 나면 /dev/ttyUSB0, /dev/ttyUSB1 이 자동으로 추가된다.  (FT2232H의 경우,  FT4232H의 경우는 저 두개 외에 추가로 /dev/ttyUSB2, /dev/ttyUSB3  도 만들어진다.)


FT2232H의 경우 단순히 asynchronous serial (우리가 일반적으로 사용하는 시리얼 통신방식) 뿐 아니고 synchronous serial, FIFO,  SPI,  I2C, Host emulation 등 매우 다양한 방식으로 동작할 수 있기 때문에 여러 핀이 나와 있지만 async serial로 사용하는 경우는 위의 4개 핀만 사용하면 된다. 

테스트를 위해 아래와 같이 uart0의 Tx핀을 uart1의 Rx에 연결해준다.


이제 라즈베리 파이에서 두개의 터미널 창을 열어준다.


minicom 또는 다른 시리얼 터미널 프로그램을 사용해 위쪽의 창은 /dev/ttyUSB0,  아래쪽 창은 /dev/ttyUSB1 포트를 열어준다.


미니컴을 사용하는 경우 디폴트로 하드웨어 플로우 컨트롤을 사용하는걸로 되어 있으므로 그걸 꺼 줘야 한다.  먼저 Ctrl-A 를 누른 다음 'O'를 누르면 위와 같은 메뉴 화면이 나온다.  거기에서 'Serial  port  setup'을  선택  해  준다.


위의 화면이 나오면 'F'  키를 한번 눌러 Hardware Flow Control 부분이 'Yes'로 되어 있는걸 'No'로 바꿔 준다.


위와 같이  되었으면 엔터키를 눌러주고 나서 'Exit'을 선택해주면 된다.  이 과정은 위쪽,  아래쪽 두 터미널 모두 해 줘야 한다.


이제 위쪽 터미널에서 글자를 입력해 보면 아래쪽 터미널에  입력한 글자가 나타나게 된다.  하지만 반대로 아래쪽 터미널에서는 아무리 글자를 입력해도 위쪽 터미널에는 나타나지 않는다.  테스트를 위해 Tx(uart0) -> Rx(uart1) 은 연결했지만 Tx(uart1) -> Rx(uart0)는 연결해 주지 않았기 때문에 그런 것이다. 

현재  aliexpress에서 FT2232H breakout board는 약 $15  정도에 구할 수 있다.  다만 FT4232H breakout board는 aliexpress에서는 찾기가 쉽지 않고 Numato Lab, Mouser 등에서 약 3~4만원 정도(배송비 별도)에 구할 수 있다.

이 디바이스들은 맥,  윈도우용 디바이스 드라이버도 제공되고 있으므로 맥이나 윈도우 환경에서도 여러개의 시리얼 포트가 필요한 경우 유용하게 사용할 수 있다.


Mac Coolterm에서 사용하는 경우  1


Mac  Coolterm에서 사용하는 경우 2

2016년 11월 21일 월요일

macOS Sierra에서 CH340/CH341 사용하기


맥에 Sierra  (Mac OS 10.12)를 설치한 후 CH340/CH341  칩을 사용한 디바이스(알리에서 판매하는 대부분의 저가 아두이노 보드,  ESP8266  기반 보드들이 여기에 들어감)를 연결하면 바로 커널 패닉이 발생해 버린다.




일단 커널 패닉이 발생하면 패닉을 발생시키는 원인이 되는 kext/드라이버를 제거해 줘야 한다.  어떤 kext가 문제를 발생시켰는가는 /Library/Logs/DiagnosticReports  안의 .panic  확장자를 가진 로그 파일에서 확인할 수 있다.
CH340인 경우 보통 wch.usb.usb 가 원인이 된다.
이 kext를 제거하려면 어느 디렉토리에 들어있는가 확인해 줄 필요가 있다.  이 경우 /Sysyem/Library/Extensions 디렉토리 내에 usb.kext라는 이름이지만 불행하게도 이름과 위치가 다를 수도 있다.  이게 찾는 드라이버가 맞는지 확인하고 싶으면 다음의 명령을 사용하면 된다.

$  cat usb.kext/Contents/Info.plists | grep wch.usb.usb

위의 명령을 실행해 무언가 내용이 출력된다면 찾는 파일이 맞다는 것이다.  이제 저 파일을 삭제하고 나면 디바이스를 연결해도 커널 패닉이 발생하지 않는다.  (물론 드라이버가 없으니 장치가 인식되지 않는다)

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

Mac Sierra에서 사용할 수 있는 CH340/CH341 드라이버가 만들어졌다.  아래 링크에서 다운받아 설치해 주면 된다.

Winchiphead  signed  drivers  for  CH340-CH341,  OS  X  10.9  to  macOS  10.12

The credit goes to the blog 'Playing with bits and bytes' 

2013년 5월 30일 목요일

HoRNDIS - 맥용 RNDIS 드라이버

대부분의 ARM 개발 보드 또는 안드로이드 폰의 Native USB tethering 기능을 사용하려면 필수적으로 필요한것이 RNDIS 프로토콜 드라이버이다. 
RNDIS 프로토콜은 MS에서 개발한 자체 프로토콜이라 Mac OS X에서 사용하기가 거의 힘들었다.
하지만 HoRNDIS가 나와 이제 맥에서도 RNDIS 프로토콜을 사용할 수 있게 되었다.
kext 형태이기 때문에 TAP/TUN kext를 사용하는 프로그램들(OpenVPN, CISCO VPN, tunnelblick등)과도 충돌하지 않고 사용할 수 있다.

http://joshuawise.com/horndis-screenshot.png
HoRNDIS (http://joshuawise.com/horndis) 를 설치해주고 RNDIS 프로토콜을 사용하는 장치를 USB포트에 연결하면 위와 같이 새로운 네트웍 디바이스가 보이게 되므로 필요한 설정을 해 주면 된다.
 

2011년 7월 31일 일요일

오토메이터로 여러개의 이미지를 한번에 리사이즈 하기(Resize multiple images automatically using Automator)

Mac OS에 기본으로 들어 있지만 사람들이 잘 몰라서 안쓰는 보석같은 어플중에 하나가 바로 automator이다.


물론 쉘 스크립트만큼 강력하지는 않아도 프로그래밍을 모르는 사람들도 GUI로 손쉽게 자기가 원하는 동작들을 하도록 프로그램으로 만들어 줄 수 있는 막강한 툴이다.
특히 여러 이미지를 동일한 크기로 변환한다던가, 여러 파일의 확장자를 변경하는등의 동일한 작업을 반복적으로 해야 하는 경우 매우 유용하게 사용할 수 있다.

여기서는 폴더 안에 들어있는 여러 이미지를 전부 동일한 크기로 리사이즈 하는걸 예로 들어보겠다.


먼저 오토메이터를 실행하면 위와 같은 화면이 나온다. 여기서는 바로 실행할 수 있는 프로그램을 원하니까 Applicaiton을 선택해준다.


화면에 위와 같이 사용할 수 있는 액션들이 나타난다.


맨 왼쪽 페인에서 photos를 선택하면 바로 옆쪽 페인에 사진들에 대해 수행할 수 있는 액션 목록들만 필터링 되어 보이게 된다.


그리고 어떤 액 션을 선택하면 아래쪽에 그 액션에 대한 간단한 설명이 나타난다.


원하는 액션을 찾았으면 오른쪽 페인으로 드래그 해 주면 된다. 여기선 폴더 안에 들어있는 모든 이미지 파일들의 크기를 일괄 변경할 것이기 때문에 Get folder contents를 선택했다.


그 다음 이미지 크기 변경을 위해 Scale images 액션을 드래그하면 위와 같은 경고가 나온다. Scale images액션은 현재 이미지 파일의 크기를 바꿔 버리기 때문에 원본 파일이 없어지게 되니까 원본파일을 보존하고 싶으면 파일을 복사해야 한다. 그렇게 하길 원하느냐고 묻는 것이다.
만일 원본파일은 더 이상 필요 없으면 그냥 Don't add를 선택하면 되고 원본도 보존되길 원하면 Add를 선택해준다. 이 예제에서는 Add를 선택했다.


위에서 Add를 선택했기 때문에 Copy finder items라는 액션이 자동으로 추가되었다. 이미지 크기는 픽셀, 또는 퍼센트로 지정해 줄 수 있다. 픽셀로 지정하는 경우 가로 기준으로 크기를 지정하고 세로 크기는 그에 비례해 자동으로 맞춰진다.


원하는 액션을 다 추가했으면 File -> Save...로 저장해주면 된다.


원하는 이름을 지정해주면 그 이름의 어플리케이션이 만들어 진다.


img_resize.app라는 이름의 어플리케이션이 생겼다. 위의 화면에서 test src라는 폴더에 원본 이미지 파일들이 들어있다. tmp라는 폴더는 리사이즈 된 이미지 파일들이 들어갈 폴더로 현재 비어있다.
test src 폴더를 드래그해서 img_resize.app 아이콘 위로 드래그 해 주면 바로 어플리케이션이 실행되어 리사이즈 된 이미지들이 tmp 폴더에 저장되게 된다. 


원본 폴더에 들어있는 이미지 정보이다.



실행된 후 tmp 폴더에 생성된 이미지 정보이다. 여기서는 scale images 액션에 이미지 크기를 1024로 해 놓은 결과이다.

2010년 1월 12일 화요일

맥의 Mail에서 gmail 설정하기

먼저 Mac OS X에서 Mail을 실행한다. (여기서는 Mac OS X 10.6 Snow Leopard에서 Mail 4.2를 기준으로 한다.)


메뉴바에서 Mail을 선택한다.


풀다운 메뉴에서 Preferences...를 선택한다.


Preferences 창에서 Accounts 탭을 선택한다.


화면 아래쪽의 '+' 버튼을 눌러준다.


Add Account 창이 열리면 이름, gmail 주소, gmail 암호를 넣어주고 Create버튼을 누른다.


Create버튼을 누르면 프로그램이 자동으로 gmail과 연결하여 필요한 정보를 수집하고 암호가 맞는지 확인해서 위와 같이 정보가 자동으로 입력된다.



만일 gmail 계정의 imap이 활성화 되어 있지 않은 상태면 위와 같은 화면이 나오게 된다.
이 경우 먼저 gmail로 가서 imap을 활성화 시켜 줘야 한다.


gmail 우측 상단의 Settings를 눌러준다.


Settings 화면에서 Forwarding and POP/IMAP 을 선택해 준다.


화면 아래쪽 IMAP Access에 보면 IMAP is disabled 를 확인할 수 있을 것이다. 먼저 Enable IMAP을 선택해주고 아래쪽의 Save Changes를 눌러 변경된 설정을 저장해주면 된다.
이제 다시 mail에서 계정을 추가해주면 이번에는 문제없이 될 것이다.

2009년 12월 4일 금요일

맥에서 tftp 사용하기 (Using tftp on the Mac)

일반적으로 많이 쓰이지는 않아도 라우터등의 장비 펌웨어 업그레이드라던지 임베디드 보드 개발할 때 유용한 도구중에 하나가 tftp(trivial ftp)이다.
Mac OS X에도 역시 기본으로 포함되어 있지만 다른 daemon들과는 다르게 자동으로 실행하게 되어있지 않다. 그리고 실행하려면 직접 하면 안되고 꼭 launchd와 /System/Library/LaunchDaemon/tftp.plist를 사용해서 실행해야 한다.



실행하는 방법은 다음과 같다.

$ sudo launchctl
Password:
launchd% load -F /System/Library/LaunchDaemons/tftp.plist
launchd%

이제 아무 문제가 없으면 launchd가 tftp 포트를 listen하고 있다가 connection이 들어오면 tftp를 실행해주게 된다.

그리고 linux/unix의 경우 일반적으로 tftp 디렉토리는 /tftpboot 를 사용하지만 맥에서는 tftp.plist 파일에서 지정하게 되어 있고 디폴트로는 /private/tftpboot 디렉토리이다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Disabled</key>
<true/>
<key>Label</key>
<string>com.apple.tftpd</string>
<key>ProgramArguments</key>
<array>
<string>/usr/libexec/tftpd</string>
<string>-i</string>
<string>-s</string>
<string>/private/tftpboot</string>
</array>
<key>Sockets</key>
<dict>
<key>Listeners</key>
<dict>
<key>SockServiceName</key>
<string>tftp</string>
<key>SockType</key>
<string>dgram</string>
</dict>
</dict>
<key>inetdCompatibility</key>
<dict>
<key>Wait</key>
<true/>
</dict>
</dict>
</plist>

 
텍스트 에디터로 tftp.plist파일을 열어보면 내용은 위와 같다. 그 중 bold체로 된 부분을 변경해 주면 tftp 디렉토리를 원하는대로 바꿔줄 수 있다.

사용이 끝나 실행을 중단시키고 싶으면 실행할 때와 마찬가지로 launchctl에서 명령을 내려주면 된다.

launchd% unload /System/Library/LaunchDaemons/tftp.plist

만일 tftp를 부팅할 때 부터 계속 실행하도록 해 주고 싶으면 launchctl에서 다음의 명령을 사용한다.

launchd% load -w  /System/Library/LaunchDaemons/tftp.plist

또한 반대로 부팅할 때 부터 계속 실행되는걸 멈추고 싶으면 아래 명령을 사용하면 된다.

launchd% unload -w /System/Library/LaunchDaemons/tftp.plist



2009년 2월 14일 토요일

Mac OS X에서 NTFS 파티션 사용하기 (Make NTFS partition writable in Mac OS X)

Mac OS X에서는 FAT, FAT32 파티션은 읽기/쓰기가 모두 가능하지만 NTFS 파티션은 마운트를 해도 읽기 전용(read-only)으로밖에 사용할 수 없다.

예전에는 FAT32를 사용해도 큰 불편이 없었지만 최근들어 HD해상도 동영상 파일등은 파일크기가 4G를 넘어가는 경우가 많아 외장하드나 Bootcamp파티션에 FAT32를 사용하면 상당히 곤란한 경우가 발생하기 쉽다.

현재 가능한 솔루션으로는 Paragon 에서 나온 NTFS for Mac OS X와 Mac FUSE가 있다.

Paragon의 솔루션은 무료가 아니므로 여기서는 오픈소스인 Mac FUSE를 사용하는 방법을 설명하겠다.


macfuse.jpg

MacFUSE의 홈페이지에 가면 다음의 화면을 볼 수 있다. 화면 오른쪽에서 최신의 MacFUSE를 다운받는다.


macfuse1-1.jpg

다운받은 DMG파일을 더블클릭으로 오픈하면 아래와 같은 MacFUSE이미지가 마운트된다. 여기서 MacFUSE.pkg를 더블클릭해서 MacFUSE를 설치해준다.


MacFUSE3-1.jpg

MacFUSE 자체는 NTFS를 지원하는게 아니고 Mac OS X에서 다른 파일시스템을 사용할 수 있게 해 주는 일종의 프레임웍이기 때문에 NTFS 파일시스템을 사용하기 위해 MacFUSE를 설치한 다음에 NTFS-3G를 설치해 줘야 한다.


NTFS3g1.jpg

http://macntfs-3g.blogspot.com/ 로 가서 최신 버젼의 NTFS-3G를 다운받는다. 두가지 버젼이 있는데 위에것(ublio)은 내부 메모리 캐슁을 사용해서 고속으로 동작하지만 대신 시스템이 크래쉬되는 경우 최근의 작업내용을 잃어버리거나 파일시스템이 손상을 받을 가능성이 커진다.

아래쪽의 버젼(stable)은 성능은 약간 떨어져도 시스템 크래쉬같은 경우에도 파일시스템의 손상을 최소화하도록 되어 있다.

NTFS3g2.jpg

다운받은 DMG 파일을 더블클릭해서 열어주면 NTFS-3G 이미지가 마운트된다. 여기서도 NTFS-3G.pkg를 더블클릭해서 설치해준다. 설치가 끝나면 재시동을 하게 된다.

ntfs3g4.jpg

재시동을 한 다음 윈도우 파티션 디스크의 정보를 보면 Format이 NTFS-3g (MacFUSE)로, Sharing & Permission이 You have custom access로 바뀐걸 확인할 수 있다. 이제 NTFS 파티션도 일단 맥 디스크와 동일하게 읽고 쓰기가 모두 가능하다.

2009년 2월 3일 화요일

Mac OS X 부팅 옵션키 (Booting Option Keys in Mac OS X)



맥에 전원을 넣고 부팅할 때 다음의 키들을 사용해 옵션을 선택할 수 있다.

Option+CMD+shift+Del : Primary boot 방법을 건너뛰고 다른 부팅 방법을 찾음

C
: CD에서 부팅

N
: 네트웍 부팅

T
: Firewire Target Disk mode 부팅 (이 경우 맥이 다른 컴퓨터에 Firewire 외장하드로 인식됨)

Shift
: Safe Boot mode

CMD+V
: Verbose mode

CMD+S
: Single user mode

Option
: 부트 매니져를 실행. Bootcamp를 사용해서 윈도우를 설치한 경우 부트매니져에서 어느 OS로 부팅할 것인가 선택할 수 있음

2008년 6월 9일 월요일

Mac OS X에서 시리얼 터미널 프로그램 (Serial Terminal Emulator in Mac OS X)

사용자 삽입 이미지


Embedded환경에 익숙한 사람이라면 가장 중요한 툴중에 하나가 시리얼 포트이다. Mac OS X에는 telnet, ssh 프로토콜을 지원하는 좋은 네트웍 터미널 프로그램이 많은데 비해 시리얼 터미널 프로그램을 찾아보기가 쉽지 않다. 시리얼 포트를 자유롭게 사용할 수 없다면 아무리 맥에서 크로스 컴파일러로 hex파일을 만들어도 다운할 수도 없고 embedded board의 콘솔 출력을 보기 힘들게 된다. 그래서 맥에서 시리얼 포트를 사용하는 방법을 여기에 정리해 보려고 한다.

* 잘 알다시피 OS X가 발표된 이후에 나온 하드웨어들에는 시리얼 포트가 장착되어 있지 않다. 시리얼 포트를 사용하려면 USB to RS-232 컨버터를 구입해야 한다. 구입시 따라오는 디바이스 드라이버를 설치한 다음에 컨버터를 연결해주면 /dev 디렉토리에 /dev/tty.usbserial, /dev/cu.usbserial 같은디바이스 파일이 생성된다.

1. 터미널 프로그램으로 'screen' 을 사용
Mac OS X에 기본으로 포함되어 있는 screen을 시리얼 터미널 프로그램으로 사용할 수 있다. 원래는 가상 터미널을 만들어주는 프로그램이지만 시리얼 디바이스에 연결된 가상 터미널도 만들 수 있다. 먼저 mac os x 의 terminal이나 iTerm같은 프로그램을 실행해서 커맨드 프롬프트에서

$ screen <디바이스 이름> <전송속도>

의 형태로 사용하면 된다. 자세한 옵션이나 사용방법은 man page을 참조하면 된다. ($ man screen)
시리얼 터미널에서 빠져나오려면 'ctrl-a, ctrl-\'를 순서대로 눌러주면 된다.

2. kermit을 사용

ftp://kermit.columbia.edu/kermit/public_html/ckermit.html

위의 링크에서 소스를 받아 컴파일을 하려고 하면 맥은 UUCP lockfile (/var/spool/lock)을 지원하지 않기 때문에 빌드에서 에러가 발생한다. 이 경우 KFLAGS=-DNOUUCP 옵션을 붙여서 컴파일 해 주면 된다.

$ make macosx10.4 KFLAGS=-DNOUUCP

이렇게 빌드해 준 바이너리를 현재 OS X 10.5.3에서도 문제없이 사용하고 있다. 단 UUCP lockfile을 사용하지 않기 때문에 시리얼 포트를 한번에 한 인스턴스의 kermit만 open하도록 강제하지 못하지만 맥을 동시에 여러명이 사용하지 않는 이상 큰 문제는 없다.
빌드 및 설치가 끝난 다음에 시리얼 포트에 연결하려면 kermit을 실행시킨 다음 아래의 명령을 사용하면 된다.

c-kermit> set modem type none     ; 널모뎀인 경우 모뎀 타입을 'none'으로 해 준다.
c-kermit> set carrier-watch off   ; 널모뎀이기 때문에 별도의 캐리어가 없으므로 off
c-kermit> port /dev/tty.USBSERIAL ; 자신이 사용하는 usb to rs-232 converter 디바이스
c-kermit> flow none               ; flow control, default는 rts/cts이다.
c-kermit> speed 57600             ; 통신 속도(bps)
c-kermit> connect                 ; 연결

일단 연결된 상태에서 명령어 프롬프트(c-kermit>) 으로 빠져 나오려면 'CTRL-\ 다음에 c'를 누르면 된다. 연결을 끊으려면 close 명령어를 사용한다.
사용하기에는 c-kermit이 조금 더 복잡하지만 그 이상으로 막강한 기능을 가지고 있기 때문에 훨씬 더 유용하다.

* Mac OS X용 GUI 시리얼 터미널 프로그램에 대해 추가된 글
맥 OS X용 시리얼 터미널 CoolTerm (CoolTerm - Serial Terminal Software for Mac OS X)