임베디드 Linux 프로젝트 개발을 위한 여러 단계

WBOY
풀어 주다: 2024-02-05 12:51:22
앞으로
1047명이 탐색했습니다.

마이크로컨트롤러 제조업체에서 제공하는 개발 보드 및 관련 소프트웨어 프로젝트 예제는 엔지니어가 새로운 설계를 시작할 때 큰 도움이 되는 경우가 많습니다. 그러나 설계 프로젝트의 초기 단계가 완료된 후 제조업체에서 제공하는 소프트웨어는 추가 설계 시 몇 가지 문제를 일으킬 수 있습니다.

실시간 운영 체제를 애플리케이션 코드용 플랫폼으로 사용하도록 설계하는 데에도 많은 과제가 있습니다. 예를 들어 다양한 병렬 작업에 기능을 효과적으로 할당하는 방법, 안정적인 프로세스 간 통신을 설계하는 방법, 하드웨어에서 전체 소프트웨어 패키지를 테스트하는 방법과 같은 문제가 있습니다.

점점 더 많은 OEM 제조업체는 위의 문제를 피하는 가장 좋은 방법은 입증되고 확장 가능하며 다양한 하드웨어 플랫폼에서 실행할 수 있는 오픈 소스 기반 Linux 운영 체제를 사용하여 새로운 설계를 시작하는 것임을 깨달았습니다. 다양한 컴퓨터 하드웨어 플랫폼에 Linux 운영 체제를 이식하는 횟수도 타의 추종을 불허합니다.

Linux 파생물은 네트워크 라우터, 휴대폰, 건물 자동화 제어 장치, 텔레비전, 비디오 게임 콘솔을 비롯한 다양한 임베디드 시스템에 널리 사용되었습니다.

Linux가 널리 사용되고 성공하더라도 사용하기 쉽다는 의미는 아닙니다. Linux에는 백만 줄이 넘는 코드가 포함되어 있으며 초보자가 익숙해지는 데 다소 시간이 걸릴 수 있는 독특한 "Linux 방식"으로 작동합니다.

그래서 이 글의 목적은 Linux 임베디드 운영 체제 버전인 μClinux를 사용하여 새로운 디자인 프로젝트를 시작하는 데 도움을 주는 것입니다. 이 가이드는 5단계로 나누어집니다. 가이드를 설명하기 위해 최대 주파수 180MHz의 ARM Cortex-M4 코어를 사용하고 Emcraft의 STM32F429 Discovery Linux 보드 지원 패키지(BSP)를 사용하는 STMicroelectronics의 STM32F429 마이크로 컨트롤러에 구현된 μClinux 프로젝트를 소개합니다.

1단계: Linux 도구 및 프로젝트 레이아웃

모든 임베디드 소프트웨어 설계는 올바른 도구를 선택하는 것에서 시작됩니다.

툴 체인은 함께 연결(링크)된 소프트웨어 개발 도구 세트입니다. 여기에는 GNU 컴파일러 컬렉션(GCC), binutils(링커, 어셈블러 및 객체 개발을 위한 기타 도구 세트)와 같은 도구가 포함됩니다. 파일 및 아카이브) 및 glibc(시스템 호출 및 기본 기능을 제공하는 C 라이브러리) 경우에 따라 컴파일러 및 디버거와 같은 다른 도구도 포함될 수 있습니다.

임베디드 개발에 사용되는 툴 체인은 크로스 툴 체인으로, 일반적으로 크로스 컴파일러로 알려져 있습니다.

GNUBinutils는 임베디드 Linux 도구 체인의 첫 번째 구성 요소입니다. GNUBinutils에는 두 가지 중요한 도구가 포함되어 있습니다:

● "as", 어셈블러는 어셈블리 코드(GCC에서 생성)를 바이너리 코드로 변환합니다

● "ld", 커넥터는 개별 대상 코드 세그먼트를 라이브러리에 연결하거나 실행 파일을 형성합니다.

컴파일러는 도구 체인의 두 번째 중요한 구성 요소입니다. Embedded Linux에서는 GCC라고 하며 다양한 종류의 마이크로컨트롤러와 프로세서 아키텍처를 지원합니다.

다음은 C 함수 라이브러리입니다. 이는 사용자 공간 애플리케이션을 개발하는 데 사용할 수 있는 Linux의 기존 POSIX API(애플리케이션 프로그래밍 인터페이스)를 구현합니다. 시스템 호출을 통해 커널과 인터페이스하고 높은 수준의 서비스를 제공합니다.

엔지니어는 다양한 C 함수 라이브러리를 선택할 수 있습니다.

●glibc는 오픈소스 GNU 프로젝트에서 제공하는 사용 가능한 C 함수 라이브러리입니다. 이 라이브러리는 모든 기능을 갖추고 이식 가능하며 Linux 표준을 준수합니다.

●임베디드 GLIBC(EGLIBC)는 임베디드 시스템에 최적화된 파생 버전입니다. 코드가 간소화되고 교차 컴파일과 교차 테스트를 지원하며 소스 코드와 바이너리 코드가 GLIBC와 호환됩니다.

●uClibc는 플래시 공간이 제한되어 있거나 메모리 사용량을 최소화해야 할 때 사용할 수 있는 또 다른 C 라이브러리입니다.

디버거는 일반적으로 도구 체인의 일부이기도 합니다. 대상 시스템에서 실행 중인 애플리케이션을 디버깅하려면 크로스 디버거가 필요하기 때문입니다. 임베디드 Linux 분야에서 GDB는 일반적으로 사용되는 디버거입니다.

위의 도구는 매우 필수 불가결한 도구이지만, 독립적으로 작동할 경우 Linux 소스 코드를 컴파일하고 최종 이미지에 통합하는 데 너무 오랜 시간이 걸립니다. 다행히 Buildroot는 완전한 임베디드 시스템 구축 프로세스를 자동화하고 다음 작업 중 일부 또는 전부를 생성하여 크로스 컴파일을 단순화합니다.

●크로스 컴파일 도구 체인

●루트 파일 시스템

●커널 이미지

●부팅 이미지

임베디드 시스템 설계자의 경우 일반적으로 가장 필요한 도구를 통합하는 BusyBox와 같은 유틸리티 집계 도구를 사용하는 것이 편리합니다. BusyBox의 정보 페이지에 따르면 "이것은 많은 일반적인 UNIX 도구의 작은 버전을 작은 실행 파일로 결합합니다. GNU fileutils 및 shellutils와 같은 도구에서 일반적으로 볼 수 있는 대부분의 도구에 대한 대안을 제공합니다. BusyBox BusyBox의 도구는 일반적으로 그보다 적습니다. 모든 기능을 갖춘 GNU 제품보다 선택적이지만 포함된 옵션은 GNU 제품이 제공하는 것과 거의 동일한 기능과 동작을 제공합니다. BusyBox는 매우 완벽한 환경을 제공합니다.

마지막 중요한 도구는 프로젝트 대상 MCU 또는 프로세서가 장착된 마더보드용으로 특별히 제작된 BSP입니다.

BSP에는 사전 구성된 도구와 운영 체제를 마더보드에 로드하기 위한 부트로더가 포함되어 있습니다. 또한 커널 및 장치 드라이버에 대한 소스 코드도 제공합니다(그림 1 참조).

임베디드 Linux 프로젝트 개발을 위한 여러 단계

2단계: 부팅 순서, 클록 시스템, 메모리 및 직렬 인터페이스

일반적인 임베디드 Linux 시작 순서는 다음과 같습니다.

1) 부트로더 펌웨어(예제 프로젝트에서는 U-Boot)는 대상 MCU 내장 플래시 메모리(외부 메모리 필요 없음)에서 실행되며 전원 켜기/리셋 후 설정을 포함하여 필요한 모든 초기화 작업을 수행합니다. 직렬 포트를 사용하여 외부에서 사용 메모리(RAM) 액세스를 위한 메모리 컨트롤러입니다.

2) U-Boot는 Linux 이미지를 외부 플래시에서 외부 RAM으로 전송하고 RAM의 커널 진입점에 제어권을 넘겨줍니다. 부팅 시 압축 해제 시간을 희생하여 플래시 공간을 절약하기 위해 Linux 이미지를 압축할 수 있습니다.

3) Linux는 RAM 기반 파일 시스템(initramfs)을 루트 파일 시스템으로 부팅하고 설치합니다. 프로젝트가 빌드되면 Initramfs는 필요한 파일과 디렉터리로 채워진 다음 간단히 커널에 연결됩니다.

4) Linux 커널에서 /sbin/init를 실행합니다. /sbin/init 프로그램은 /etc/inittab에 있는 구성 파일의 설명에 따라 시스템을 초기화합니다.

5) 초기화 프로세스가 /sbin/init에서 실행 수준 실행 및 명령을 완료하면 로그인 프로세스가 시작됩니다.

6) 쉘 초기화 파일 /etc/profile을 실행하면 시작 프로세스가 완료되었음을 표시합니다.

플래시 메모리에서 코드를 실행하는 방법인 내부 실행(ExecuteInPlace - XIP)을 활성화하면 시작 시간을 크게 단축하고 전반적인 성능을 향상시킬 수 있습니다. 일반적으로 Linux 코드는 플래시 메모리에서 외부 메모리로 로드된 다음 외부 메모리에서 실행됩니다. 플래시 메모리에서 실행하면 이 복사 단계가 더 이상 필요하지 않고 읽기 전용 메모리가 더 이상 프로그램 공간을 차지하지 않으므로 더 적은 메모리가 필요합니다.

위 내용은 임베디드 Linux 프로젝트 개발을 위한 여러 단계의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:lxlinux.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿