대부분의 개발자는 개발용 그래픽 인터페이스에 익숙하기 때문에 IoT 및 임베디드 Linux 개발의 세계로 뛰어들면 더 낮은 수준의 프로그래밍과 명령줄 실행을 필요로 하는 새로운 경험을 하게 됩니다. IoT, GPS, 자동차 기술, 제조 또는 기타 저수준 전자 프로그래밍과 같은 시스템을 구축하려면 작업할 임베디드 개발 환경이 필요합니다.
임베디드 Linux는 시작하는 데 필요한 많은 문서가 포함된 오픈 소스이며 운영 체제를 사용하는 데 초기 비용이 거의 들지 않기 때문에 대부분의 시스템에서 일반적으로 사용됩니다. 이러한 이유로 이 경로에 관심이 있는 개발자는 일반적으로 Linux 프로그래밍 작업을 하고 제품을 연결, 프로그래밍 및 배포하는 데 적합한 도구를 다운로드합니다. 초보자이든 새로운 도구를 찾고 있는 전문가이든 상관없이 시작할 수 있는 최고의 임베디드 Linux 프로그래밍 도구 목록을 정리했습니다.
개발자는 매일 작업하는 것이므로 일반적인 GUI 편집기에 익숙해야 합니다. 예를 들어 Visual Studio는 C# 및 VB.NET을 위한 일반적인 편집기입니다. Java 개발자는 일반적으로 Eclipse 또는 NetBeans를 사용합니다. Python 개발자는 PyCharm을 사용합니다. 모든 개발자는 선호하는 편집기를 가지고 있으며, 최고의 도구는 개발자가 다양한 구문을 보다 쉽게 식별할 수 있도록 색상으로 구분된 코드를 쉽게 작성할 수 있게 해줍니다. 임베디드 프로그래밍은 주로 C 또는 C++로 이루어지므로 올바른 솔루션은 이 두 가지 언어를 지원해야 합니다.
Geany: Geany는 구문 강조 표시와 HTML 및 XML 태그 지원에 훨씬 더 중점을 둔 GUI입니다. 또한 Java, PHP, Python, Perl 및 Pascal과 호환됩니다. 유닉스 스타일 명령에 익숙하지 않은 대부분의 개발자가 가장 쉽게 사용할 수 있는 도구이기 때문에 가장 먼저 소개합니다.
Lime: 서브라임 텍스트 편집기에 익숙한 개발자는 후속 버전인 라임을 좋아할 것입니다. 인터페이스는 Sublime과 유사하며 현재 인기 있는 Go 언어로 개발되었습니다.
나노: Nano는 초보 및 고급 프로그래머에게 유용합니다. 명령줄 기반이지만 C 구문을 쉽게 이해할 수 있도록 텍스트를 강조 표시하고 색상 코드를 지정합니다.
블루피쉬: Bluefish에는 위에 나열된 도구보다 몇 가지 추가 기능이 있습니다. 웹 개발뿐만 아니라 Linux 개발용이지만 원격 파일과 함께 작동하며 맞춤법 검사 및 실행 취소 옵션도 있습니다. 대규모 프로젝트의 경우, Bluefish는 더 나은 정리 기능을 제공하며 여러 프로젝트와 잘 작동합니다.
Vim: 말 그대로 모든 플랫폼에 존재하는 다재다능하고 고도로 구성 가능한 텍스트 편집기입니다. 비교적 높은 진입 장벽에도 불구하고 거의 모든 것을 사용자 지정할 수 있고 그래픽 모드를 사용할 수 없는 소형 임베디드 시스템에서도 거의 모든 곳에서 사용할 수 있다는 점에서 많은 임베디드 개발자가 선호합니다.
컴파일러
프로그램을 작성했다면 이제 컴파일할 차례입니다. 컴파일러는 사람이 작성한 코드를 노트북이나 서버와 같은 로컬 시스템에서 사용할 수 있도록 바이너리로 변환합니다. 임베디드 Linux에서는 호스트가 아닌 대상 시스템의 CPU용 바이너리를 생성하는 컴파일러가 필요합니다. 임베디드 개발용 컴파일러를 크로스 컴파일러 툴체인이라고도 합니다.
직접 조립할 수도 있지만, 특히 초보 개발자에게는 지루한 작업입니다. 대신 C 코드를 컴파일, 링크 및 어셈블할 수 있는 여러 도구가 존재합니다. 우분투와 같은 데비안 기반 Linux를 프로그래밍에 사용하는 경우 운영 체제에 이미 사용 가능한 도구가 있습니다. 다음 명령을 실행하여 설치하세요:
sudo apt 설치 gcc-arm-linux-gnueabi g++-arm-linux-gnueabi
크로스 컴파일러 툴체인을 구축하고자 하는 경우, 컴파일러 기능을 제공하는 몇 가지 도구를 사용하면 처음부터 빌드할 필요가 없습니다:
Crosstool-NG: 이 기본 크로스 컴파일러 툴체인은 코드를 어셈블하고 필요한 링크 라이브러리를 생성합니다.
빌드루트: 빌드루트는 훨씬 더 강력한 메뉴 시스템과 인터페이스를 갖추고 있어 초보자에게 좋습니다. 컴파일, 라이브러리 생성, 디렉토리 계층 구조를 구축하여 대규모 프로젝트를 쉽게 탐색할 수 있습니다.
Yocto: Yocto는 컴파일에서 한 단계 더 나아가 대상 임베디드 시스템을 위한 패키지를 빌드합니다. 또한 바이너리와 라이브러리를 빌드하지만 패키지를 사용하면 외부 시스템에 쉽게 배포하고 설치할 수 있으며, Yocto는 매우 복잡하지만 가장 강력하고 다재다능한 솔루션입니다.
사람의 코드는 기계어로 어셈블되어야 합니다. 컴파일러는 사람의 코드를 객체 코드로 변환한 다음 바이너리로 변환합니다. 어셈블러는 머신 코드와 훨씬 더 유사한 로우레벨 코드에서 바이너리를 직접 생성하여 훨씬 더 빠른 변환을 수행합니다. 어셈블러는 컴파일러보다 훨씬 빠르지만 로우레벨 언어로 제한됩니다. 저수준 어셈블리 언어로 작업하는 고급 개발자의 경우 어셈블러를 사용하여 코딩된 명령어를 CPU 실행과 매핑할 수 있습니다.
Linux에는 GNU 어셈블러(gas 또는 as라고도 함)라는 자체 어셈블러가 있습니다. 이 어셈블러는 Linux 운영 체제 전용 바이너리 도구 모음인 GNU Binutils에 포함되어 있습니다. 설치에 포함된 도구 목록은 여기에서 확인할 수 있습니다.
Binutils를 설치하려면 다음 명령을 실행합니다:
sudo apt 설치 빌드 에센셜
하지만 arm64로 컴파일해야 하는 경우 설치하세요:
sudo apt 설치 crossbuild-essential-arm64
디버거
모든 개발자는 코드를 테스트하고 디버깅해야 한다는 것을 알고 있습니다. 디버거를 사용하면 각 실행 줄에서 어떤 일이 발생하는지 확인할 수 있습니다. 코드가 구문상으로는 정확할 수 있지만 논리 오류로 인해 프로그램이 충돌할 수 있습니다. 디버거를 사용하면 이러한 오류를 제거할 수 있습니다.
GNU 프로젝트에는 다운로드할 수 있는 디버거가 있습니다. 이 디버거는 C 기반 프로그래밍에 특화되어 있으므로 임베디드 시스템 코드를 디버깅하는 데 적합합니다. 명령줄에서 설치하려면 다음 명령을 사용하세요:
sudo apt-get 설치 libc6-dbg gdb valgrind
링커
프로그램을 빌드할 때 프로그램 운영에 필요한 파일과 라이브러리가 여러 개 있는 것이 일반적입니다. 이러한 파일은 컴파일 과정에서 링커를 사용하여 링크됩니다. 컴파일러가 링크를 자동으로 수행하는 경우가 많지만 어셈블러를 사용하여 저수준 코드를 기계어로 변환하는 경우 프로젝트 파일을 서로 연결하기 위해 링커가 필요할 수 있습니다.
위에 나열된 컴파일러 중 하나를 사용하는 경우 링커가 필요하지 않을 수 있지만, GNU 프로젝트에는 고급 프로젝트 빌드에 사용할 수 있는 링커가 있습니다. 이 링커는 어셈블러 섹션에서 언급한 Binutils와 함께 사용할 수 있습니다. Binutils를 설치하면 링커가 포함됩니다. 다음 명령을 사용하여 도구를 설치하세요:
sudo apt-get 설치 빌드-에센셜
에뮬레이터
Android 운영 체제용 프로그래밍을 해 본 적이 있다면 에뮬레이터로 작업해 본 적이 있을 것입니다. 에뮬레이터는 대상 환경을 복제하는 프로그램입니다. 모든 인터페이스 항목, 명령, 출력 이미지 및 기능은 임베디드 디바이스에서 사용자에게 표시되는 것과 유사하게 로컬 컴퓨터에 표시됩니다.
가장 인기 있는 무료 도구는 QEMU입니다. QEMU를 사용하면 여러 Linux 배포판에서 창작물을 시각화할 수 있습니다. 데비안 또는 우분투 배포판의 경우 다음 명령을 실행하여 설치합니다:
sudo apt-get 설치 qemu
전체 소프트웨어 개발 환경
위의 소프트웨어 목록을 통해 개발 환경을 사용자 지정할 수 있지만, 별도의 리소스를 설치하지 않고도 모든 편집과 컴파일을 처리하는 완전한 IDE 패키지도 여러 개 있습니다. 아래의 IDE 개발 환경은 완전한 GUI와 크로스 플랫폼을 지원하며, 일부는 프로젝트에 임베드할 수 있는 웹 애플리케이션을 지원합니다.
PyCharm: PyCharm은 Python 개발자를 위해 만들어졌지만 크로스 플랫폼을 지원하며 Linux 개발자에게도 잘 작동합니다. PyCharm의 개발사인 JetBrains는 임베디드 Linux 프로그래밍에 특별히 사용되는 CLion이라는 기능을 추가했습니다.
Qt 크리에이터: Qt Creator는 임베디드 시스템 프로그래밍을 위해 특별히 설계되었습니다. 자동차, IoT, TV, 모바일 앱 등 여러 대상 디바이스를 위한 에뮬레이터가 있습니다.
MPLAB X: PIC 마이크로컨트롤러 및 신호 컨트롤러의 임베디드 개발을 위해 설계된 IDE입니다.
Visual Studio: 대부분의 개발자는 Visual Studio를 .NET 프로그래밍으로 알고 있지만, VisualGDB 플러그인은 Visual Studio 인터페이스를 임베디드 시스템을 위한 크로스 플랫폼 Linux 개발 플랫폼으로 전환합니다.
아두이노: 임베디드 시스템 프로그래밍을 시험해보고 싶은 개발자에게는 Arduino가 좋은 출발점이 될 수 있습니다. 여기에는 초보자가 학습할 수 있는 완벽한 환경을 위한 하드웨어와 소프트웨어가 포함되어 있습니다.
ARM Keil: 본격적인 개발 플랫폼의 경우 거의 모든 ARM 기반 디바이스를 위한 프로그래밍에 사용할 수 있습니다. 시중의 인기 있는 디바이스로 작업해야 하는 전문가에게 적합한 IDE입니다. 이 IDE에는 초보자가 배울 수 있는 코드 템플릿과 예제 프로젝트가 있습니다.
결론
임베디드 Linux 개발을 시작하려는 경우, 위의 도구는 환경을 실행하는 데 필요한 전체 목록입니다. 임베디드 Linux 프로그래밍은 표준 데스크톱 프로그래밍과는 다른 환경이지만 IoT 및 자동차 시스템의 작동 방식에 입문할 수 있는 좋은 방법입니다.