버섯돌이의 라즈베리파이2 기초 Windows 10 IOT 설치하기 |
안녕하세요 버섯돌이 유재성입니다.
오늘은 오랜만에 라즈베리 파이2에 신규 OS인 Windows 10 IOT 버전을 설치해 봤습으며,
항상 그렇듯 관련 내용을 간단하게 공유해 봅니다.
ㅎㅎ.. 사실 쥐뿔도 모르기에 설치처럼 쉬운 내용만 공유하고자 몇 분만 체험해 봤습니다.*^_^*V
1. 들어가며..
연초에 RPI2는 윈도우즈 10을 공식 지원한다는 이슈(?)에 RPI2의 구매에 좀 더 불을 붙이신 분들도 계셨으리라 봅니다.
제 경우 RPI2 입장에서 이제 막 지원될 윈도우즈 10에 대한 관심은 거의 없었으며,
그나마 시야각 문제는 있지만 홀로렌즈(Hololens)로 인해 윈도우즈 10에 대한 관심이 조금 생긴 정도였더랬죠^^;;;
Windows 10? Windows 10 IOT??
윈도우즈 10은 뭐고 윈도우즈 10 IoT는 또 뭐란 말인가....?
윈도우즈 10에 대한 세부 내용은 윈도우즈 홈페이지나 기사들을 찾아 보시면 될 듯싶고...
개인적으로 윈도우즈 10의 컨셉중 윈도우즈 10 코어 위에서는 하나의 앱은 디바이스에 구애받지 않고 돌아 간다는
초창기의 JVM과 같은 One Windows 는 조금 마음에 들더군요.
즉, 윈도우즈 10 코어 기반으로 프로그램을 만들면 데스크톱 용이든 사물인터넷이나 윈도우즈 폰이나
홀로렌즈 등의 디바이스에 구애받지 않고 하나의 프로그램이 각 환경에서 구동된다는 컨셉입니다.
이런 윈도우즈 10의 코어만 있는 게 Windows 10 IoT라고 보시면 되겠습니다.
즉, 꼴랑 윈도우즈 10 OS만 올라가신다고 보시면....
그리고 아직은 갈 길이 멀고도 험난할 거라 생각해 봅니다.^^
다만, 아무래도 거대 업체가 지원하기에 조금은 기대를 걸며 관심을 갖고 있을 뿐입니다.^^;;;
2. What’s New
http://go.microsoft.com/fwlink/?LinkId=534601을 방문하면 간단한 설명과 배포 정보를 확인하실 수 있습니다.
Windows 10 IoT Core Public Release
- Wi-Fi support
- Bluetooth support
- Updated base OS build
- Bug Fixes
정식으로 Win10 IoT 코어가 공개되었으며 Wi-Fi & Bluetooth를 지원한다고 되어있네요.
그리고 다수의 벌레들을 잡았다는군요.
3. Known Issues
많은 벌레들이 잡혔다고 하지만 항상 뭔가 설치할 때에는 공식 버그를 확인해야겠지요^^
아직 아래와 같은 알려진 이슈들이 있으니 사용 시 참고하시기 바랍니다.
영어가 안되는 버섯도 대충 훑어봤을 때 귀찮더라도 한 번씩은 읽어 보셔야 정신 건강에 좋을 듯싶더군요.^^
- The keyboard input to the default boot application may be lost when launching an application via the debugger WORKAROUND: Reboot after debugging if you wish to use the default boot application via the keyboard. (1304429)
- Some USB keyboards and mice may not work on the Raspberry PI2. WORKAROUND: Use a different keyboard or mouse. A list of validated peripheral devices can be found in the documentation at http://go.microsoft.com/fwlink/?LinkId=619428
- The video output on the MinnowBoard Max may crash after unplugging the HDMI video cable and plugging it back in while the MBM is running. (2096834). WORKAROUND: Leave the HDMI cable plugged in while the MBM is running.
- Setting the orientation to “Portrait” may not be honored in a Universal App (3039042) WORKAROUND: None
- Some animated user elements may be slow to render and slow to respond to user input on the Raspberry Pi. (2735596). WORKAROUND: Do not use the animated user elements which perform poorly.
- GPIO pin 4 may behave unexpectedly when switching between drive modes (2938068) WORKAROUND: If you need to switch drive modes, use a pin other than GPIO 4
- Once the GPIO wake feature is enabled in the UEFI settings of Device Manager it may not be possible to toggle GPIO outputs or read GPIO values using the GPIO WinRT APIs for pins 0-2 on MBM (1894235). WORKAROUND: Do not enable the GPIO wake feature
- The Default startup app may conflict with itself when it is also deployed from Visual Studio (1244550). WORKAROUND: Change the default startup app to an application other than that you wish to deploy.
- Time synchronizes from the network and may be slow to synchronize the clock after a power cycle. (3283455, 2942694) WORKAROUND: Force a time update with a “w32tm /resync” command.
- When a headed application that uses the IoT Debug Broker is being debugged, an Assert may be triggered when the Debug>Stop menu item is selected. (2385747). WORKAROUND: None.
- Clicking an external link in a web browser can cause a foreground app to crash. The crash is due to the browser control attempting to have the OS open a new window or tab which is not supported by IoT Core. (3468443) WORKAROUND: Add the http or https protocol handler to your application so that the calls do not get routed to the OS.
- GetNetworkUsageAsync may throw a System.UnauthorizedAccessException (1972129). WORKAROUND: None.
- BackgroundService Tasks may be listed as both a headed and a headless tasks. (2455442). WORKAROUND: None.
- The SPI driver may return a malformed buffer which includes two extra bytes at the beginning of the buffer for WriteRead sequence on the MinnowBoard Max (3076149) WORKAROUND: Compensate for the extra bytes in the code making the call by allocating a buffer that is x-2 bytes in size.
- The IoT Core Default Application may display two different IP addresses for the same adapter where one is a stale address. (3303771). WORKAROUND: None.
- UART1 flow control/serial handshake on MBM may default to ON and cannot be turned off (2995473). WORKAROUND: Use UART2 instead for devices without flow control.
- Location (Geolocator.RequestAccessAsync()) may not work as expected. (3359968) WORKAROUND: None.
- BackgroundMediaPlayer.MessageReceivedFromForeground may crash. (3486027) WORKAROUND: The following line of code may crash: “BackgroundMediaPlayer.MessageReceivedFromForeground += OnMessageReceivedFromForeground;”. To prevent the crash, add this code so that it is executed first “var player = BackgroundMediaPlayer.Current;”
- A NULL value may be returned by SerialDevice::FromIdAsync() when devices are connected to the top USB port on MinnowBoardMax (2175837) WORKAROUND: Use the bottom USB port.
- Data breakpoints have been disabled on the Raspberry Pi2 (3370713). WORKAROUND: None at this time
- The Azure Active Directory Authentication Library may not work on Windows 10 IoT Core (3379181). WORKAROUND: Do not use the Azure Active Directory Authentication Library.
- The MinnowBoard Max and Raspberry Pi2 may be extremely slow to boot up on the first boot when using some 8GB class 10 SD cards. Slow boot times may be over 15 minutes. Subsequent boots will be much quicker on the affected cards (3416260). WORKAROUND: Do not use the affected cards.
- The SSH Service may crash when an SSH client does not gracefully close a session. (3581710, 3602012). WORKAROUND: The SSH Service will restart in this case.
- When the device name is longer than 16 characters it may bluescreen while booting with a “CRITICAL_PROCESS_DIED” message (3622767). WORKAROUND: Use less than 16 characters in the device name.
- USB speakers may not play audio on the Raspberry Pi2 (3627304). WORKAROUND: Disable the analog audio to enable USB audio.
- MediaEncodingProfile.CreateWma(Windows.Media.MediaProperties.AudioEncodingQuality.Auto) may fail on the Raspberry Pi2 with the error message “No suitable transform was found to encode or decode the content. (Exception from HRESULT: 0xC00D5212)”. (3634750) WORKAROUND: None.
4. 설치
아는 것도 없으면 불 필요한 잡설이 길어졌네요^^;;
설치 방법이 평소의 라즈베리에 이미지를 설치하는 방법과 조금 달라서 헤메었지만 가이드가 잘 되어 있더군요.^^
http://ms-iot.github.io/content/en-US/Downloads.htm 사이트를 방문합니다.
2개의 탭중 "Download for Windows 10" 탭에 보시면 Raspberry Pi 2에 설치 가능한 이미지를 다운로드할 수 있는 링크가 있습니다.
"Download"를 클릭하시면 "IOT Core RPi.ISO" 파일을 받아집니다.
위 "IOT Core RPi.ISO" 파일을 더블 클릭합니다.
더블 클릭하면 해당 iso 파일이 자동으로 CD-ROM으로 마운트 되며 위처럼 CD-ROM 안의 내용이 보이는데
"Windows_10_IoT_Core_RPi2.msi" 설치 프로그램이 하나 보입니다.
CD-ROM이 마운트 되면 자동으로 CD-ROM 안의 내용이 보이지만 만약 위와 같은 화면이 보이지 않는다면...
내 컴퓨터에 보시면 위처럼 "J_ARPI_A32FREO_EN-US_DV5" DVD-ROM이 마운트 된 드라이브가 보일 것입니다.
해당 DVD-ROM을 Open 하시면 됩니다.
DVD-ROM의 "Windows_10_IoT_Core_RPi2.msi" 설치 프로그램을 더블 클릭하셔서 설치를 진행하시면 됩니다.
프로그램 설치 과정은 아주 단순합니다.^^
약관에 동의하시고 Install 하시면 됩니다.
설치가 진행되고....
잠시 후 설치가 완료됩니다.
Windows Iot Core Watcher가 실행되는데 뭔가 작업할 수 있는 메뉴가 없군요.^^
윈도우즈 10 IoT의 개발 방법은 Qt Enterprise Embedded를 설치해서 작업했을 때를 보는 것 같더군요.
위 창은 윈도우즈 10 IoT Core가 설치된 장비들을 조회하는 용도라서 저대로 놔두셔도 되고 지금은 종료하셔도 상관없습니다.
윈도우즈 10 IoT 장비가 부팅되면 위 창의 목록에 나열되기 때문에 모니터가 없는 장비의 경우 해당 장비가 부팅되었는지 확인 및 개발 시에 꽤 유용하리라 봅니다.
일예로, 라즈베리 파이를 모니터 없이 개발할 때에는 부팅된 IP 주소를 몰라서 확인하기 위해 엄청난 삽질을 해야 했었더랬죠^^
가장 중요한 라즈베리 파이에 사용할 SD 메모리 카드에 Windows 10 IoT 코어를 설치할 차례입니다.
기존 라파에서는 Win32 Disk Imager같은 유틸을 이용해서 라즈비안 등의 OS를 SD 메모리에 설치했었습니다만
윈도우즈 10 IoT의 경우 WindowsIoTImageHelper 프로그램을 이용합니다.
RPI2에 사용할 SD 메모리를 PC에 연결합니다.
그리고, 가장 중요한 flash.ffu 파일의 위치를 확인하시기 바랍니다.
flash.ffu 파일은 "C:\Program Files (x86)\Microsoft IoT\FFU\RaspberryPi2" 폴더에 있습니다.
윈도우즈 프로그램 찾기에서 "WindowsIoTImageHelper" 프로그램을 찾아서 실행합니다.
윈8의 경우 "windowsiot"를 입력하다 보면 아래처럼 나옵니다.
WindowsIoTImageHelper 프로그램을 실행합니다.
위처럼 PC에 연결된 SD 메모리 카드 목록이 보이는데 사용할 메모리 카드를 선택하시면 됩니다.
제 경우 8GB 짜리 메모리를 사용했습니다.
"Select the image (.ffu)" 항목의 "Browse" 버튼을 클릭해서 윈도우즈 10 IoT Core 이미지 파일(flash.ffu)을 선택합니다.
위에서 설명드렸듯이 flash.ffu 파일은 "C:\Program Files (x86)\Microsoft IoT\FFU\RaspberryPi2" 폴더에 있으며,
최종 선택된 화면입니다.
Flash 버튼을 클릭 후 Continue 버튼을 누르면 선택된 메모리 카드에 이미지를 굽기 시작합니다.
콘솔 창이 하나 뜨면서 열심히 이미지를 굽고 있습니다.
잠시 후 이미지 라이팅이 끝나면 OK를 눌러서 종료합니다.
SD 메모리를 꺼내서 라즈베리 파이에 장착 후 전원을 켭니다.
어디선가 본 듯한~~~ 아주~ 친숙한 창이 하나 나타납니다.
윈도우즈 10 IoT Core의 험난한 길에 오신 걸 환영합니다~ 라는 친절한 메시지가 보입니다.
그리고 한~~ 참~~ 동안 뺑뺑이가 돌아간 후에 다음 화면이 나옵니다.
언어를 선택하는 화면인데 당근~ "한국어"를 선택해야겠지요^^
그리고 우측 하단의 Next를 선택하면 됩니다.(참고로 마우스 지원됩니다.)
화면의 글씨가 잘 안 보일듯싶어서 잘라 봤습니다.
위처럼 화면의 우측 부분에는 간단한 정보나 나옵니다.
여기서 보이는 Device name과 IP address가 윈도우즈에 설치했던 "Windows Iot Core Watcher" 프로그램에 출력됩니다.
버그인지... 제 RPI2가 느린 건지 모르겠으나...
한국어를 선택하면 위처럼 나와야 하지만 언어를 이동해 보시면 한국어를 선택해도 일본어가 나오기도 하고 그러더군요^^;;
저는 위처럼 한국어로 제대로 나올 때까지 위아래로 이동하면서 다른 언어를 선택했었습니다.
언어를 선택하셨으면 우측 하단 모서리의 Next를 누르시면 끝입니다.^^
잠시 후 메인 화면이 나옵니다.
좌측 상단에 보시면 "장치 정보"가 선택되어 있으며 현재 디바이스 및 연결된 장치에 대한 세부 정보가 보입니다.
잘 안 보이실듯싶어서 역시 화면을 잘라 봤습니다.
설치는 참 쉽죠?
뭔가 라즈비안 설치와는 비교해서 사전 작업이 복잡해 보일지 모르겠으나 개발환경 때문에 그렇다고 보시면 될 것 같습니다.
참고로, 윈도우즈에서 실행했던 WindowsIoT Core Watcher를 보시면 아래처럼 연결된 장치 목록을 확인할 수 있습니다.
제 경우 현재 라즈베리 파이 1개에만 WindowsIoT Core를 설치해서 인터넷에 연결했기에 하나만 보입니다.
5. 간단한 테스트
자습서가 제공되어서 편하더군요.^^
좌측 상단 메뉴에서 "자습서"를 선택합니다.
다양한 메뉴가 존재하는데 시작하기에 들어가시면 개발 및 디버깅을 위한 연결 방법이 설명되어 있습니다.
현재로서는 랜 케이블을 사용하시는 분들은 크게 신경 쓰지 않으셔도 됩니다.
간단한 테스트를 위해 "Hello Blinky - 장치에서 LED 켜기/끄기"를 선택합니다.
위와 같은 화면이 나오는데 "시작"을 클릭하면 라즈베리 파이의 LED가 깜빡입니다.
속도를 조절하시면 깜빡이는 속도가 바뀌는 걸 볼 수 있습니다.
6. 마치며..
ㅎㅎ.. 간단하게 테스트해 보고 글 쓰려고 했었는데...
RPI2라서 살짝 기대했으나 역시나 메인 타겟은 인텔 보드인듯싶고 RPI는 많은 사용자 확보를 위해
지원하는 느낌이 들 정도로 아직은 반응 속도가 느려서 조금 답답하더군요^^
아직은 다른 할 것도 많고 윈도우즈 개발자가 아니라서 나중에 시간 되면 살펴볼지 모르겠으나 개발 방법은 살펴보지 않았습니다.
조금이라도 도움이 되셨길 바라며 질문은 제가 아니라 아래 공식 커뮤니티에 문의 하시기 바랍니다.
http://ms-iot.github.io/content/en-US/Community.htm#contact
[참고자료]
'라즈베리파이(RPI)' 카테고리의 다른 글
[버섯] Windows 10 IoT를 위한 Visual Studio 2015 Community 설치하기 (0) | 2015.09.03 |
---|---|
[버섯][RPI2] Windows 10 IoT 장비에 SSH로 접속하기 (1) | 2015.08.27 |
[버섯][RPI2] 라즈베리파이 2에 OpenELEC(XBMC) 설치및 테스트 (0) | 2015.08.10 |
[버섯][구입] 저렴한 라즈베리파이 2와의 만남~(Raspberry pi 2) (0) | 2015.02.18 |
[버섯] 버섯돌이의 라즈베리 기초 - 톰캣(Tomcat) WAS 설치하기 (2) | 2014.11.21 |