임베디드 리눅스 암 장치가있는 Visual Studio 2017
이것은 Marc Goodner가 주최 한 비 주최 게스트 게시물입니다 : Microsoft의 수석 프로그램 관리자이자 Toradex의 Jeremias Cordoba : Innovation Engineer입니다.
오늘날 많은 임베디드 디바이스가 리눅스를 기본 운영체제로 사용하고 있습니다. 이는 개발 컴퓨터에서 Windows를 실행하는 개발자에게 어려움을 낳습니다. 이 기사에서는 빌드 환경 용 컨테이너를 사용하여 Windows 호스트 PC에서 임베디드 ARM 장치에 대한 최신 Visual Studio for C ++ 개발을 사용하는 새로운 방법에 대해 설명합니다. 우리가 배치 할 장치 는 Arm Cortex A-7을 특징으로하는 NXP i.MX 6ULL SoC를 사용하는 Toradex Colibri System on Module의 제품군입니다 . 데모 프로젝트로 Bluetooth 센서를 Toradex Colibri 모듈과 연결합니다.
이 경우에 대한 Visual Studio 지원은 초기 상태이므로 앞으로 몇 개월 안에 Microsoft 및 Toradex의 개선 사항을 확인할 수 있습니다.
선결 요건
- Wi-Fi / BT 및 Aster Carrier Board가 있는 Colibri i.MX 6ULL
- TI SensorTag (저에너지 블루투스)
- Linux 작업 부하가 설치된 Visual Studio 2017 (모든 버전)
- Windows 용 도커
Toradex Colibri System-on-Module 설치
- Toradex easy installer를 사용하여 운영 체제를 설치할 때까지 단계별 설치 가이드를 따르십시오 . Toradex Embedded Linux 데모 이미지 중 하나를 선택하십시오.
- 장치에서 다음 명령을 실행하십시오.
VS 프로젝트 만들기
빈 리눅스 프로젝트를 만들어 시작하십시오. 파일> 새로 만들기> 프로젝트로 이동 한 다음 Visual C ++> 크로스 플랫폼> Linux 를 선택하고 빈 템플릿을 선택하십시오. 여기서 우리는 imx6-Bluetooth라는 프로젝트의 이름을 지정합니다.
빌드 컨테이너 만들기
이 데모에서는 빌드 환경을 설정하기 위해 컨테이너를 사용하려고합니다. 먼저 컨테이너 이미지를 레지스트리에서 로컬로 가져옵니다.
먼저 프로젝트를 만들었으므로 소스가 살고있는 디렉토리가 있습니다. 우리는 그것을 컨테이너에 매핑 할 것입니다. 여기 내 저장된 : C : \ 소스 \의 repos \ imx6 블루투스 \ imx6 블루투스 . 이 디렉토리는 최상위 솔루션 디렉토리가 아니라 프로젝트 디렉토리입니다. 다음 명령에서이 값을 프로젝트를 저장 한 위치와 일치하도록 조정하십시오.
이제 빌드 도구가 포함되어 있고 명령을 실행하는 데 필요한 Visual Studio 용 SSH 포트가있는 시스템에서 colibri_sdk라는 실행 컨테이너가 있어야합니다.
컨테이너와 장치에 Visual Studio 연결
Visual Studio에서 도구> 옵션> 연결 관리자로 이동하십시오.
추가를 클릭하고 입력하십시오.
- 호스트 이름 : localhost
- 항구 : 2222
- 사용자 : root
- 비밀번호 : toradex_sdk
Visual Studio는 자동으로 컴파일러를 쿼리하여 포함 위치와 컴파일러 플래그를 가져와 특정 컴퓨터 IntelliSense를 제공합니다. 그러나 우리가 사용하고있는 크로스 컴파일러는이 정보로 빌드되지 않습니다. 우리는 수동으로 포함 위치를 제공 할 수 있습니다. 연결이 완료되면 연결 관리자에서 노드를 확장하고 원격 헤더 IntelliSense 관리자를 선택합니다.
탐색을 선택하십시오 . 그러면 Windows 탐색기가 나타납니다. 파일 복사 settings.xml.unused을 하고 이름을 Settings.XML이 . 텍스트 편집기에서 파일을 열고 useCompiler 의 값 을 false로 변경하십시오 . 이제 CDATA 블록의 시작 부분에 includeDirs 에 다음 위치를 추가하십시오 .
파일을 저장하십시오. 지시 사항의 뒷부분에서이 경로가 필요할 것이므로이 탐색기 창을 열어 두십시오. 긴 Windows 사용자 이름이있는 일부 사용자의 경우 CDATA 블록에 위의 위치 만 포함되도록해야 할 수도 있습니다. 이 변경은 이후 단계에서 긴 파일 경로 오류를 방지합니다.
Visual Studio 에서 원격 헤더 IntelliSense 관리자에서 업데이트 를 누릅니다 . 연결을 설정했을 때보 다 더 많은 시간이 걸릴 것입니다. 이제 헤더 세트가 모두 반환됩니다. 완료되면 연결 관리자를 클릭 하고 장치에 연결을 추가하십시오. 사용자의 루트 IP 주소를 사용하고 암호는 비워 둡니다. Visual Studio에서 대상에서 헤더를 가져 오기 위해 컴파일러를 찾을 수 없다는 오류가 발생합니다. 이 장치에서 컴파일하지 않고 배포 만하면됩니다.
닫기 를 선택 하여 오류를 닫고 확인을 다시 클릭하여 옵션 대화 상자를 종료하십시오.
소스를 추가하고 컨테이너에서 교차 컴파일
우리는이 SensorTag 레포의 샘플을 사용하고 있습니다 : durovsky / SensorTag2650 . 우리는 전체 프로젝트가 아닌 SensorTag와 통신 할 때만 소스를 사용합니다. src \ senortag.cpp를 복사 하고 \ filepaths.h 를 VS 프로젝트 디렉토리에 로컬로 포함하십시오. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 추가> 기존 항목을 클릭하십시오 . 방금 추가 한 파일을 선택하십시오. 이제 프로젝트는 이렇게 보일 것입니다.
filepaths.h 보세요 . 장치에 파일이있는 경로가 존재하는지 확인하십시오.
이제 Visual Studio에게 ARM 타겟 보드를 컴파일하는 방법을 알려줄 필요가 있습니다. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성을 클릭하십시오. 프로젝트 디렉터리를 컨테이너에 매핑 했으므로 복사 원본 노드를 선택하고 기본값을 아니요로 변경합니다. 우리가 사용하고있는 빌드 컨테이너는 크로스 컴파일러에 대해 gcc의 앨리어싱을 적용 했으므로이 프로젝트에서 컴파일러의 기본값을 무시할 필요가 없습니다. C ++ 노드를 확장하고 명령 행을 선택하십시오. 다음을 추가하십시오.
링커 노드를 확장하고 일반 변경에서 출력을 아니요로 복사합니다. 명령 줄을 선택하고 위와 같은 줄을 추가합니다.
이제까지 시도한 것을 검증하기 위해 프로젝트를 빌드하고 빌드하십시오. 위의 사항을주의해서 확인하십시오.
지금까지 빌드 컨테이너를 설치하고 Visual Studio에 장치를 연결하고 ARM 개발 보드에서 실행할 수있는 컨테이너에서 실행 파일을 크로스 컴파일했습니다. 이제 출력물을 보드에 가져와야합니다.
크로스 컴파일 된 출력물을 Colibri i.MX 6ULL 장치로 복사
우리는 크로스 컴파일 된 출력을 원격 장치로 복사하는 또 다른 프로젝트를 추가 할 것입니다. 솔루션 탐색기에서 솔루션을 마우스 오른쪽 단추로 클릭 한 다음 추가> 새 프로젝트 를 클릭하십시오 . 대화 상자에서 Makefile을 선택하십시오.
우리는 소스 (imx6-Bluetooth)를 빌드하고 디버깅하는 데 사용되는 프로젝트가 있고, 원격 ARM 대상에 출력을 복사하는 또 다른 (CopyFiles) 솔루션을 구성하고 있습니다. 여기서 우리는 x64 구성을 빌드에 사용하고 ARM을 사용하여 디버그를 수행합니다. 프로젝트 종속성 아래의 솔루션 속성에서 프로젝트 CopyFiles가 CrossCompileProject에 종속되도록 설정합니다. 솔루션을 마우스 오른쪽 단추로 클릭하고 속성을 선택하십시오. 이제 Project Dependencies를 선택하고 CopyFiles를 imx6-Bluetooth에 의존하도록 설정하십시오.
이제 구성 속성 아래에서 CopyFiles를 변경하여 ARM을 사용하지만 다른 모든 것은 x64로 남겨 둡니다.
우리는 여기서 Platform을 ARM으로 바꾸고 모든 것을 Build를 선택 취소합니다. 이를 통해 디바이스 디버깅을 위해 imx6-Bluetooth 플랫폼을 ARM으로 변경할 수는 있지만 빌드를 시작할 수는 없습니다. 이것이 컨테이너에있는 크로스 컴파일러를 사용하는 x64 프로젝트의 목적입니다.
솔루션 속성 페이지를 닫습니다.
이제 imx6-Bluetooth 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택하십시오. x64 플랫폼이 활성 상태인지 확인하십시오. 빌드 이벤트> 빌드 이벤트 게시로 이동 하여 다음 명령 행을 추가하십시오.
이것이 우리가 나중에 디버깅 할 때 gdb가 사용할 기본 바이너리에 출력 바이너리를 넣는 것입니다. ARM 플랫폼 구성의 프로젝트 속성에서 기본값을 변경하면이 작업을 건너 뛸 수 있습니다.
이제 일반 페이지의 CopyFiles 속성에서 원격 빌드 시스템을 장치로 변경합니다.
이제 Build Events> Pre-Build Event로 이동하십시오 . 플랫폼에 ARM이 활성화되어 있는지 확인하십시오. 복사 할 추가 파일에 다음 명령을 추가하십시오.
이제 Remote Post-Build Event에서 바이너리의 실행 비트를 설정해야합니다.
모든 것이 올바르게 빌드되고 복사되도록하십시오. 솔루션을 마우스 오른쪽 단추로 클릭하고 솔루션 빌드를 클릭 하십시오 .
찾을 수없는 경로로 인해 x64 프로젝트의 출력을 복사 할 수 없다는 오류가 발생하면 Explorer에서 프로젝트 위치를 열고 bin 폴더 아래에 하위 디렉토리 ARM \ Debug를 만듭니다.
일단 모든 것이 빌드되면 디버깅이 작동하도록하십시오.
Colibri i.MX 6ULL 장치에서 배포 및 디버그
먼저 SensorTag를 켜고 Colibri IMX6ULL 장치에 연결하고 다음 명령을 실행하십시오
SensorTag의 주소를 적어 두십시오.
이제 Visual Studio에서 플랫폼을 ARM으로 변경하십시오.
이제 일반 탭의 imx6-Bluetooth에 대한 프로젝트 속성에서 원격 컴퓨터를 로컬 호스트에서 장치로 변경합니다.
디버깅을 구성하려면 디버깅 속성 페이지로 이동하십시오. 프로그램 인수에서 SensorTag 주소를 제공합니다. 장치에 gdb가 설치되어 있지 않으므로 디버깅 모드를 gdbserver로 변경하십시오.
이 연결에는 헤더가 없기 때문에 IntelliSense를 사용할 수 없습니다. 다시 얻으려면 VC ++ Directories 프로젝트 속성으로 이동하십시오. 컨테이너 연결을 위해 머리글이 저장된 위치로 이동하십시오. 하위 디렉토리 usr \ local \ oecore-x86_64 \ sysroots \ armv7at2hf-neon-angstrom-linux-gnueabi \ usr \ include로 이동하십시오 . 이제 전체 경로를 복사하고 그 값을 Include Directories 필드에 넣으십시오.
new_measurement에 대한 플래그가 지워진 행 319 주위에 중단 점을 설정하십시오. 이제 F5를 통해 디버거를 시작하십시오.
다음과 같은 것을보아야합니다.
결론
이것은 다소 작은 프로젝트 였지만 Windows에서의 임베디드 개발에 대한 향후 전망을 강조합니다. Visual Studio에서 Linux 임베디드 장치에 응용 프로그램을 배포하고 디버그하는 기능은 시간이 지남에 따라 향상 될 것입니다. 임베디드 디바이스의 미래는 리눅스에 뿌리 내리고있는 것처럼 보이지만 현재는 윈도우 환경을 포기할 필요가 없다.
Visual Studio의 Linux C ++ 문서를 더 읽을 수 있습니다 .
https://www.cnx-software.com/2018/06/28/visual-studio-2017-embedded-arm-linux-device/
'OS' 카테고리의 다른 글
정식 공동 후원자 Linux 하위 회의용 Windows 하위 시스템 (0) | 2019.12.11 |
---|---|
Linux 5.0 릴리스 - 주요 변경 사항, 암, MIPS 및 RISC-V 아키텍처 (0) | 2019.03.04 |
Chromebook의 Linux 앱으로 Windows 앱을 더 쉽게 운영 할 수 있습니다. (0) | 2018.06.15 |
[번역] LG, 웹 OS 오픈 소스 에디션 출시 (라스베리 파이 3 최적화) (0) | 2018.03.19 |
[번역] fail0verflow는 Nintendo Switch를 본격적인 Linux PC로 바꾸어줍니다. (1) | 2018.02.19 |