QEMU로 임베디드 Linux 시스템 에뮬레이션

QEMU로 임베디드 Linux 시스템 에뮬레이션

 

1. 소개

임베디드 소프트웨어 개발은 ​​개발 보드, 외부 모듈 장치 등과 같은 임베디드 하드웨어 장치에 의존하지만 디버깅 작업이 주변 장치와 관련이 없는 경우 하드웨어 구매 없이 QEMU를 사용하여 커널 디버깅만 시뮬레이션할 수 있습니다.

Linux 및 Windows 호스트와 에뮬레이트된 PowerPC, ARM, MIPS 및 SPARC 대상에서 사용할 수 있습니다. QEMU는 호스트와 대상 프로세서 사이에 최소 변환 계층을 제공하는 접근 방식을 취합니다. 호스트 프로세서는 에뮬레이터를 실행하는 프로세서이고 대상 프로세서는 에뮬레이트되는 프로세서입니다.

다음은 QEMU 개발 환경을 설정하는 과정에 대한 자세한 소개입니다.

 

2. 환경

2.1 사용 환경

* 우분투-18.04.1

또는:

* PC: Windows10

* 가상 머신: VirtualBox-5.18

* 가상 OS: Ubuntu-18.04.1

* 시뮬레이션 개발 보드: vexpres

2.2 환경 설정 시 사용하는 도구

* 큐뮤-4.2.0

* linux-4.14.172(리눅스 커널)

* 유-부트-2017.05

* 바쁜 상자-1.31.1

* 팔-리눅스-gnueabi-gcc

모든 관련 파일을 /home/joe/qemu에 넣습니다.

3. 크로스 컴파일 도구 설치

# sudo apt install gcc-arm-linux-gnueabi

 

설치가 성공했는지 확인

$ arm-linux-gnueabi-gcc -v

내장 사양을 사용합니다.

COLLECT_GCC=arm-linux-gnueabi-gcc

COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabi/7/lto-wrapper

대상: arm-linux-gnueabi

구성: ../src/configure -v –with-pkgversion='Ubuntu/Linaro 7.5.0-3ubuntu1~18.04'–with-bugurl=file:///usr

스레드 모델: posix

gcc 버전 7.5.0(Ubuntu/Linaro 7.5.0-3ubuntu1~18.04)

 

4. Linux 커널 구성 및 컴파일

4.1 리눅스 커널 다운로드

www.kernel.org에서 필요한 커널 버전을 다운로드합니다.

여기에서 비교적 최신의 장기 지원 커널 버전 linux-4.4.157을 다운로드합니다.

wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.4.157.tar.xz  /qemu 디렉토리로

4.2 리눅스 커널 압축 풀기

# 타르 xvJf 리눅스-4.4.157.tar.xz

4.3 리눅스 커널 컴파일

// 커널 소스 파일 디렉토리 입력

# cd 리눅스-4.4.157

CROSS_COMPILE=arm-linux-gnueabi-ARCH=arm vexpress_defconfig 만들기

CROSS_COMPILE=arm-linux-gnueabi-ARCH=arm menuconfig 만들기

menuconfig를 실행할 때 ncurses 패키지가 누락된 것으로 표시되면 다음 명령을 실행하여 설치하십시오)

$ sudo apt-get 설치 libncurses5-dev

메뉴 구성을 입력하고 다음 설정을 지정합니다.

크로스 툴체인으로 컴파일

컴파일 성공 후 디렉토리 아래에 커널 이미지 파일 생성

arch/arm/boot, zImage 및 dtb를 별도의 폴더에 복사하여 편리하게 사용할 수 있습니다.

 

5. QEMU 도구 설치

5.1 QEMU 설치

* wget https://download.qemu.org/qemu-4.2.0.tar.xz

* tar xvJf qemu-4.2.0.tar.xz

* CD qemu-4.2.0

5.2 QEMU를 구성하기 전에 종속 패키지 설치

# 적절한 설치 zlib1g-dev
# apt 설치 libglib2.0-0 libglib2.0-dev
# apt 설치 libsdl1.2-dev
# apt 설치 libpixman-1-dev libfdt-dev

컴파일 후 파일이 지저분해지는 것을 방지하기 위해 builder 디렉토리를 컴파일의 중간 대상 경로로 생성합니다.

QEMU를 구성, 컴파일 및 설치합니다.

5.3 암 아키텍처 아래의 모든 보드를 지원하도록 QEMU 구성

# ../configure –target-list=arm-softmmu –audio-drv-list=

다음 프롬프트가 나타날 때 pixman이 누락된 경우,

sudo apt-get install libpixman-1-dev를 사용하여 설치합니다.

5.4 QEMU 버전 보기

5.5 QEMU에서 지원하는 개발 보드 보기

5.6 QEMU 실행

# qemu-system-arm -M vexpress-a9 -m 512M -kernel ./zImage -dtb ./vexpress-v2p-ca9.dtb -nographic -append "console=ttyAMA0"

또는:

$pwd

/홈/조/퀘무

# qemu-system-arm -M vexpress-a9 -m 512M -kernel linux-.4.157/arch/arm/boot/zImage -dtb linux-4.4.157/arch/arm/boot/dts/vexpress-v2p-ca9. dtb -nographic -추가 "콘솔=ttyAMA0"

더 나은 테스트 및 qemu 시작을 위해 시작 스크립트 start.sh를 만들고 스크립트에 chmod +x start.sh를 실행할 수 있는 권한을 부여할 수 있습니다.

 

#! / bin / bash

 

qemu-시스템-암 \

-M vexpress-a9 \

-m 512M \

-커널 /home/joe/jemu/linux-4.4.157/arch/arm/boot/zImage \

-dtb /home/joe/jemu/linux-4.4.157/arch/arm/boot/dts/vexpress-v2p-ca9.dtb \

-노그래픽 \

- "콘솔=ttyAMA0" 추가

 

6. 루트 파일 시스템 만들기

busybox를 사용하여 간단한 루트 파일 시스템을 만드십시오.

6.1 busybox 도구 다운로드

https://busybox.net/downloads/에서 busybox를 다운로드하십시오.

# wget https://busybox.net/downloads/busybox-1.31.1.tar.bz2

# tar xjvf busybox-1.31.1.tar.bz2

# CD 바쁜 상자-1.31.1

# defconfig를 만든다

# CROSS_COMPILE=arm-linux-gnueabi-를 만듭니다.

# 설치 CROSS_COMPILE=arm-linux-gnueabi-

설치가 성공했음을 나타내는 다음 정보가 프롬프트됩니다.

설치가 완료된 후 생성된 대상 파일은 기본적으로 ./_install 디렉토리로 설정됩니다.

 

6.2 루트 파일 시스템 생성

6.2.1 busybox 컴파일 및 설치

# mkdir 루트fs

# sudo cp -r _install/* rootfs/

6.2.2 glibc 라이브러리 추가, 루트 파일 시스템에 로더 및 동적 라이브러리 추가

# sudo cp -r _install/* rootfs/

# sudo cp -p /usr/arm-linux-gnueabi/lib/* rootfs/lib/

6.2.3 4개의 tty 터미널 장치 생성(c는 문자 장치, 4는 주 장치 번호, 1~4는 각각 보조 장치 번호)

 

6.3 SD 카드 파일 시스템 이미지 만들기

6.3.1 빈 SD 카드 이미지 생성

# dd if=/dev/zero of=rootfs.ext3 bs=1M 카운트=32

6.3.2 SD 카드를 exts 파일 시스템으로 포맷

# mkfs.ext3 루트fs.ext3

6.3.3 SD 카드에 rootfs 굽기

# sudo 마운트 -t ext3 rootfs.ext3 /mnt -o 루프

# sudo cp -rf rootfs/* /mnt/

# sudo umount /mnt

 

7. 확인

7.1 큐뮤 시작

다음 명령을 실행하여 테스트하고 컴파일된 커널이 성공적으로 실행할 수 있는지 확인합니다.

# sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel ~/qemu/zImage –dtb ~/qemu/vexpress-v2p-ca9.dtb -nographic -append “console=ttyAMA0”

또는 스크립트 사용:

 

위의 테스트에서 커널은 패닉을 보고하여 루트 파일 시스템이 부족함을 나타냅니다.

위의 문제는 x86 환경에서 생성된 비지박스 툴 때문입니다.

우리는 busybox를 설치할 때 make install을 사용했으므로 다음을 사용해야 합니다.

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-install

 

컴파일 도구는 arm 플랫폼에서 사용하는 busybox 도구를 생성합니다.

# 파일 rootfs/bin/busybox

rootfs/bin/busybox: ELF 32비트 LSB 실행, ARM, EABI5 버전 1(SYSV), 동적으로 링크됨, 인터프리터 /lib/ld-, GNU/Linux 3.2.0용, BuildID[sha1]=cbcd33b8d6c946cb19408a5e8e714de554, strippedf87

 

7.2 다시 확인

이제 Qemu는 Linux 커널을 시작하고 파일 시스템을 성공적으로 마운트했으며 직렬 터미널을 통해 간단한 기능으로 시스템과 상호 작용할 수 있습니다. 인쇄 과정에서 /etc/init.d/rcS를 실행할 수 없는 문제는 /etc/init.d/rcS 파일만 추가하면 됩니다. 파일의 내용은 프롬프트 문일 수 있습니다.

 

7.3 QEMU 종료

qemu를 종료하는 두 가지 방법

* 다른 터미널 입력에서: 모든 qemu-system-arm 종료

* Qemu 입력: Ctrl+ A; NS

QEMU: 종료됨

 

8. u-boot를 통해 Linux 커널 시작

임베디드 시스템에는 일반적으로 u-boot, kernel, rootfs 및 appfs가 포함됩니다. ARM 개발 보드에서 이러한 부품의 위치 관계는 아래 그림과 같습니다.

 

부트로더 부트 매개변수 핵심 루트프 앱프

 

Rootfs는 보드 또는 PC에서 실행할 수 있습니다.

 

8.1 U 부트 준비

8.1.1 u-boot 다운로드

http://ftp.denx.de/pub/u-boot/, 우리는 u-boot-2021.01.tar.bz2를 사용합니다.

# tar -jxvf u-boot-2018.09.tar.bz2

8.1.2 컴파일 u-boot

# vim 메이크파일

CROSS_COMPILE = arm-linux-gnueabi-

# vim config.mk

아치 = 팔

# vexpress_ca9x4_defconfig를 생성, 오류

필요 : sudo apt install 들소

sudo apt install 플렉스

then: # -j4 오류를 만듭니다.

필요: export CROSS_COMPILE=arm-linux-gnueabi-

내보내기 ARCH=암

다시: # vexpress_ca9x4_defconfig를 만듭니다.

# make -j4

 

 8.1.3 테스트, u-boot 시작

$ sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel u-boot-2021.01/u-boot –nographic

 

8.2 커널 구성 컴파일

u-boot를 사용하여 커널 이미지를 부팅합니다.

커널을 uImage 형식으로 컴파일해야 합니다.

메모리에서 uImage의 로드 주소를 지정해야 합니다.

커널을 컴파일할 때 지정: make LOADADDR=? u이미지 -j4

 

# cd /home/joe/qemu/linux-4.4.157

# LOADADDR=0x60003000 uImage -j4로 만듭니다.

 

u-boot 컴파일이 완료되면 도구 폴더 아래에 mkimage 파일이 생성되며 이 파일을 크로스 컴파일러 디렉터리 아래의 bin 폴더에 복사합니다.

$ cd qemu/linux-4.4.157

오류:

$ sudo apt install u-boot-tools

uImage 가져오기

9. QEMU 네트워크 기능 설정

u-boot 시 Qemu 가상 머신이 시작되면 uImage를 메모리에 로드해야 하며 uImage는 TFTP 서버를 통해 메모리의 지정된 주소로 다운로드할 수 있습니다.

9.1 호스트 커널이 tun/tap 모듈을 지원하는지 확인

// 브리지된 네트워크가 의존하는 두 가지 도구를 설치합니다.

# sudo apt install uml 유틸리티 브리지 유틸리티

tun 장치 파일 생성: /dev/net/tun(일반적으로 자동 생성됨)

/etc/network/interfaces 수정(네트워크 구성, 적용하려면 다시 시작)

# sudo vim /etc/network/interfaces

auto loiface lo inet loopbackauto enp0s3 // 가상 네트워크 이름 cardauto br0iface br0 inet dhcpbridge_ports enp0s3

 

절대 재부팅하지 마십시오

# 재부팅

그런 다음 Qemu의 네트워크 환경을 확인하십시오.

가상 네트워크 포트 br0은 Qemu 가상 머신과 Linux 호스트 간의 통신을 위한 네트워크 포트입니다.

 

10. TFTP 서버 설치

Qemu 시뮬레이션 개발 보드용 uImage를 시작할 때 uImage를 메모리에 다운로드하기 위한 TFTP 서버 생성

 

10.1 tftp 도구 설치

 

$ apt-get 설치 tftp-hpa tftpd-hpa xinetd

 

10.2 구성 파일 수정 및 TFTP 서버 디렉토리 설정

# sudo vim /etc/default/tftpd-hpa

......

TFTP_DIRECTORY=”/홈/조/tftpboot”

......

10.3 Linux 호스트에 tftp 디렉토리 생성

# mkdir /home/joe/tftpboot

# chmod 777 /홈/조/tftpboot

 

10.4 tftp 서비스 다시 시작

# sudo /etc/init.d/tftpd-hpa 재시작

 

10.5 u-boot에서 커널 시작 매개변수 설정

uImage 및 cexpress-v2p-ca9.dtb를 tftpboot에 복사

Qemu를 시작하여 확인

 

$ sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel u-boot-2021.01/u-boot -nographic -net nic,vlan=0 -net 탭, vlan=0,ifname=tap0 -sd rootfs. 내선3

 

이제 rootfs 디렉토리는 미러 파일로 만들 수 있는 간단한 루트 파일 시스템이며 미러 파일을 개발 보드에 굽거나 Linux 커널을 Qemu에서 u-boot로 시작하고 마운트할 수 있습니다. 미러 파일. NFS 네트워크 파일 시스템을 통해 부팅하도록 설정할 수도 있습니다.

 

11. NFS 파일 시스템 마운트

11.1 NFS 서비스 설치 및 구성

11.1.1 설치

$ sudo apt install nfs-커널-서버

 

11.1.2 구성

$ sudo mkdir /home/joe/qemu/rootfs

$ sudo chown 아무도:nogroup /home/joe/qemu/rootfs

$ sudo chmod 777 /home/joe/qemu/rootfs

$ sudo nano /etc/exports

추가: /home/joe/qemu/rootfs *(rw,sync,no_root_squash)

 

nfs 서버를 다시 시작하십시오.

$ sudo /etc/init.d/nfs-kernel-server 재시작

또는: $systemctl nfs-kernel-server 재시작

 

NFS 공유 디렉토리 생성 여부 확인

$ sudo showmount -e

NFS 네트워크 파일 시스템을 사용할 때 Linux 호스트는 시스템 방화벽을 닫아야 합니다. 그렇지 않으면 시스템이 실행될 때 이상이 발생합니다.

 

결론

이 블로그의 도움으로 QEMU에 대해 더 많이 알게 되기를 바랍니다. 위에서 설명한 모든 기술은 우리 프로그램에 대한 다양한 제출에 사용되었습니다. QEMU로 에뮬레이트하는 고정된 단일 방법은 없습니다. 다양한 기술을 탐색하고 자신에게 적합한 방법을 확인하십시오. 지식에 익숙해지면 예상치 못한 방식으로 도움이 될 수 있다는 사실에 놀랄 것입니다.

리치파이 소개

리치파이 소개

LicheePi는 최근 몇 년 동안 인기를 얻고 있는 저가 Allwinner V3S 플랫폼에서 실행되는 섬세한 단일 보드 컴퓨터입니다. 초보자가 Linux를 배우거나 제품 개발에 사용할 수 있습니다. 풍부한 주변 장치(LCD, ETH, UART, SPI, I2C, PWM, SDIO…)와 강력한 성능을 제공합니다.

 

       

        리치 제로 리치 나노

 

 

 

       

                                 리치 파이 제로 리치 파이 나노 

 

 

특징

L이치파이 제로

리치 파이 나노

SoC를 올위너 V3S 올위너 F1C100S
CPU ARM 코어 텍스 A7 ARM9
작동 주파수. 1.2GHz 408MHz
64MB DDR2 32MB DDR2
스토리지 SPI 플래시/마이크로 SD SPI 플래시/마이크로 SD

디스플레이

 

* 범용 40P RGB LCD FPC:

* 지원 해상도: 272×480, 480×800,1024×600

* 온보드 RTP 칩, 터치 스크린 지원

* 범용 40P RGB LCD FPC:

* 지원 해상도: 272×480, 480×800,1024×600

* 온보드 RTP 칩, 터치 스크린 지원

인터페이스

 

* SDIO x2
* SPI x1
* I2C x2
* UARTx3
* 100M 이더 x1(EPHY 포함)
* OTG USB x1
* 미피 CSI x1
* PWM x2
* LRADC x1
* 스피커x2 + 마이크x1
* SDIO x1
* SPI x2
* 트윅스 x3
* UART x3
* OTG USB x1
* TV 출력* PWM x2
* LRADC x1
* 스피커x2 + 마이크x1

전기 정보

 

마이크로 USB 5V, 2.54mm 핀 3.3V~5V 전원 공급 장치; 1.27mm 스탬프 홀 전원 공급 장치.

1GHz Linux IDLE은 90~100mA를 실행합니다. CPU 연소 실행 ~180mA

보관 온도 -40~125

작동 온도 -20 ~ 70

마이크로 USB 5V, 2.54mm 핀 3.3V~5V 전원 공급 장치; 1.27mm 스탬프 홀 전원 공급 장치.

408MHz Linux IDLE 실행 90~54mA; 화면 작동 전류 ~250mA로

보관 온도 -40~125

작동 온도 -20 ~ 70

 

Linux 스트레스 테스트를 실행할 때의 온도는 체온보다 약간 높을 뿐입니다.

 

Lichee Pi는 Linux, RT-Tread, Xboot 또는 OS 없음과 같은 많은 OS를 지원합니다.

대부분의 MCU와 마찬가지로 Lichee Pi는 GPIO, UART, PWM, ADC, I2C, SPI 등과 같은 여러 저속 인터페이스에 연결할 수 있습니다. 또한 RGB LCD, EPHY, MIPI CSI, OTG USB 등과 같은 다른 고속 주변 장치를 실행할 수 있습니다. Lichee Pi에는 헤드폰이나 마이크에 직접 연결할 수 있는 통합 코덱이 있습니다.

 

디스플레이 커넥터:

범용 40P LCD에는 LED 백라이트와 13선식 전기 저항 터치가 있어 디스플레이 및 상호 작용에 매우 적합합니다. AXNUMX은 또한 XNUMX선식 저항 터치 기능을 지원하며 XNUMX점 터치 감지를 수행할 수 있습니다.

 

이 인터페이스는 다음 인터페이스와 호환됩니다. 오리엔트 디스플레이 제품보기.

 

RGB에서 VGA로:

 

RGB에서 HDMI로:

 

RGB에서 GPIO로:

 

RGB-DVP CSI:

 

리치 파이 링크:

http://dl.sipeed.com/
위키:maixpy.sipeed.com
블로그:blog.sipeed.com
텔레그램 그룹: https://t.me/sipeed

오리엔트 디스플레이 임베디드 프로젝트 소개

오리엔트 디스플레이 임베디드 프로젝트 소개

오리엔트 디스플레이는 세계 최고의 디스플레이 중 하나입니다. LCD 디스플레이 제조업체 1996년에 25년 이상의 R&D 및 생산 경험이 있는 경영진에 의해 설립되었습니다. 오리엔트디스플레이는 디스플레이 외에도 ARM 아키텍처를 비롯한 임베디드 기술에 집중하며 임베디드 제품에 대한 풍부한 경험을 축적했다.

이제 Orient Display 기술 서비스에는 하드웨어, 소프트웨어 및 컨설팅이 포함됩니다.

 

당사의 하드웨어 팀 디자인 아이디어와 요구 사항에 따라 최단 시간에 프로토타입을 만드십시오. 우리는 짧은 개발 주기에서 높은 신뢰성에 대한 요구 사항을 충족하기 위해 비용 효율적이거나 복잡한 고성능 보드 설계를 전문으로 합니다.

– 개략도 설계

– PCB 레이아웃

– 산업 제품 맞춤화

 

당사의 소프트웨어 팀 Linux 기반 전문 ARM® 디자인PowerPC 및 x86 프로세서 등. 임베디드 시스템의 Linux, Android 및 WinCE를 위한 완벽한 솔루션 제공업체로서 당사는 귀사 제품의 종단 간 시스템 관련 문제를 해결할 수 있습니다.

– 시스템 마이그레이션, 최적화 및 조정

– 드라이브 개발

– 커널 조정

– LINUX KERNEL을 ARM, PPC 또는 x86 보드로 이식

– APP 개발(어플리케이션, Linux QT, Linux C/++)

 

당사의 FAE  또한 귀하의 제품 또는 반제품에 대한 전체 범위의 기술을 제공합니다.

– 우리는 우리 제품의 소프트웨어 및 하드웨어 리소스에 대한 컨설팅을 제공합니다.

– 우리는 우리 제품의 소프트웨어 및 하드웨어 설명서를 사용하는 동안 발생하는 문제를 해결합니다.

– OEM 및 ODM 판매 후 기술 지원

– 데이터 유지 및 업데이트

– 오리엔트 디스플레이 제품은 당사의 지원을 받습니다. 최저 가격 보장.

 

개발 순서

 

1. 시스템 요구 사항 분석

* 디자인 작업, 목표, 사양

– 이것은 고객이 제공한 것입니다.

* 기능 및 비기능 요구 사항

– 시스템 성능, 비용, 전력 소비, 부피, 무게 및 기타 요소 포함

 

2. 건축설계

좋은 아키텍처는 디자인 성공의 열쇠입니다. 이 단계에서는 종종 다음 작업을 수행해야 합니다.

  • 메인 칩 선택:

— ARM Cortex A, R 또는 M, PowerPc 또는 ColdFire

  • RTOS를 결정합니다.

— 리눅스, uClinux, Vxworks, freeRTOS, WinCE

  • 디스플레이 선택:

- TFT 패널, 햇빛 가독성 TFT, LCD 유리 패널, 그래픽 LCD,  OLED 디스플레이, 터치 패널, 임베디드 LCD 디스플레이 or 맞춤형 디스플레이 by 오리엔트 디스플레이

  • 프로그래밍 언어:

— c/c++, 파이썬, 자바

  • 개발 도구:

u-boot, busybox, QT, Ubuntu, stm32CubeIde, Visual Studio, Android 스튜디오, keil uVision, RT-Tread 스튜디오

 

3. 하드웨어 및 소프트웨어 공동 설계

제품 개발 주기를 단축하려면:

하드웨어:  보통 오리엔트 디스플레이 등의 평가판에서 프로젝트를 시작합니다 AIY-A002M, AIY-A003MAIY-A005M. 나중에 프로젝트에 맞는 맞춤형 보드가 필요하지 않은 부품은 폐기합니다.

소프트웨어 개발 순서:

  • 우리는 일반적으로 부트로더로 u-boot를 선택합니다. 1) cpu를 알려진 상태로 초기화 2) 메모리 초기화 3) 인터럽트 초기화 4) 클럭 초기화 5) 커널을 실행 중인 주소로 로드합니다.
  • 커널 구성:

1) 커널 시스템 구성: *메모리 관리, *파일 시스템, *장치 드라이버, *네트워크 스택, *I/O 시스템

2) 쓰기 I/O 장치 드라이버 *char 장치 드라이버, *블록 장치 드라이버, *net 장치 드라이버

  • 애플리케이션 선택:

*사용자 라이브러리 선택 *사용자 애플리케이션 빌드 *초기화 프로세스 구성 *루트 FS 빌드

 

4. 에스시스템 통합

시스템의 소프트웨어, 하드웨어 및 실행 장치를 함께 통합하고 장치 설계 프로세스에서 오류를 디버그, 찾아 개선합니다.

 

5. 시스템 테스트

설계된 시스템을 테스트하여 사양에 제공된 기능 요구 사항을 충족하는지 확인합니다. 임베디드 시스템 개발 모델의 가장 큰 특징은 소프트웨어와 하드웨어의 종합적인 개발입니다.

 

결론적으로

Orient Display는 개념에서 생산에 이르기까지 임베디드 디스플레이 모듈을 제작할 수 있는 경험과 능력을 갖춘 재능 있는 전문가들로 구성된 놀라운 팀을 보유하고 있습니다.

질문이 있는 경우 다음 주소로 엔지니어에게 문의하십시오. tech@orientdisplay.com.

ARM 프로세서를 선택하는 방법

ARM 프로세서를 선택하는 방법

개요

가장 넓은 범위의 마이크로프로세서 거의 모든 애플리케이션 시장을 위한 코어. 탐구하다 ARM. 거의 모든 애플리케이션 시장, 프로세서에 대한 성능, 전력 및 비용 요구 사항은 매우 중요합니다. 시스템 성능은 하드웨어에 크게 의존합니다. 이 기사는 ARM 프로세서에 대한 연구를 안내하고 의사 결정에 큰 도움이 될 것입니다.

 

ARM에 대한 간략한 소개

그림 1. ARM 프로세서 로드맵

 

2003년 이전에는 ARM7(ARMv4 Architecture), ARM9(ARMv5 Architecture), ARM11(ARMv6 Architecture)을 포함하는 고전적인 ARM 프로세서가 있었습니다. ARM7에는 MMU(메모리 관리 장치)가 없으며 Linux 및 WinCE와 같은 다중 사용자 다중 프로세스 시스템을 실행할 수 없습니다. MMU가 필요하지 않은 ucOS 및 ucLinux와 같은 시스템만 실행할 수 있습니다. ARM9 및 ARM11은 Linux를 실행할 수 있는 MMU가 있는 임베디드 CPU입니다.

2003년 이후 ARMv7 아키텍처에 관해서는 Cortex의 이름을 따서 명명되었으며 세 가지 시리즈로 나뉩니다. Cortex-A, Cortex-R 및 Cortex-M.

  • 피질 -A — 성능 집약적 시스템을 위한 애플리케이션 프로세서 코어
  • 피질-R – 실시간 애플리케이션을 위한 고성능 코어
  • 피질-M – 광범위한 임베디드 애플리케이션을 위한 마이크로컨트롤러 코어

간단히 말해서, 피질 -A 시리즈는 높은 컴퓨팅 요구 사항, 풍부한 운영 체제를 실행하고 대화형 미디어 및 그래픽 경험을 제공하는 응용 프로그램에 적합합니다. 피질-R 신뢰성, 고가용성, 내결함성, 유지보수성 및 실시간 응답이 필요한 경우에 적합합니다. 피질-M 이 시리즈는 비용 및 전력에 민감한 MCU 및 최종 애플리케이션을 대상으로 합니다.

 

Cortex-A VS Cortex-R VS Cortex-M

피질 -A

Cortex-A 프로세서 범주는 Linux 및 Android 장치 전용입니다. 스마트워치와 태블릿에서 시작하여 네트워킹 장비에 이르기까지 모든 장치는 Cortex-A 프로세서에서 지원할 수 있습니다.

  • Cortex-A 프로세서(A5, A7, A8, A9, A12, A15 및 A17)는 ARMv7-A 아키텍처를 기반으로 합니다.
  • A 프로세서의 공통 기능 세트에는 미디어 처리 엔진(NEON), 보안 목적을 위한 도구(Trustzone) 및 지원되는 다양한 명령 세트(ARM, Thumb, DSP 등)가 포함됩니다.
  • Cortex-A 프로세서의 주요 기능은 최고의 성능과 뛰어난 전력 효율성을 밀접하게 결합하여 사용자에게 최상의 서비스를 제공한다는 것입니다.

Cortex-A 프로세서의 주요 특징:

코어 텍스 A5: Cortex A5는 Cortex A 시리즈 중 가장 작고 전력이 적은 제품이지만 여전히 멀티코어 성능을 발휘할 수 있으며 A9 및 A15 프로세서와 호환됩니다.

코어 텍스 A7: A7의 소비전력은 A5와 거의 비슷하지만 A7이 제공하는 성능은 A20보다 5% 더 높을 뿐만 아니라 Cortex-A15 및 Cortex-A17과 완벽한 아키텍처 호환성을 제공합니다. Cortex-A7은 비용에 민감한 스마트폰 및 태블릿 구현에 이상적인 선택입니다.

콘트렉스-A15: Cortex-A15는 이 시리즈의 최고 성능 제품으로 A9보다 두 배의 성능을 제공합니다. A15는 고급 장치, 저전력 서버 및 무선 인프라에서 응용 프로그램을 찾습니다. 이것은 데이터 관리 및 가상 환경 솔루션을 위한 최초의 프로세서 지원입니다.

콘트렉스-A17: Cortex-A17은 A60보다 9% 더 높은 성능을 보여줍니다. 주요 목표는 프리미엄급 장치의 요구를 충족시키는 것입니다.

콘트렉스-A50: 최신 시리즈인 Contrex-A50은 ARMv8 아키텍처를 기반으로 하며 Arch64-bit 에너지 효율적인 시스템을 지원합니다. 64비트로 전환하는 분명한 이유는 Cortex-A4 및 Cortex-A15에서 이미 달성된 7GB 이상의 물리적 메모리 지원입니다.

 

피질-R

Cortex-R 프로세서는 하드 디스크 컨트롤러, 네트워킹 장비 미디어 플레이어 및 기타 유사한 장치와 같은 고성능 실시간 애플리케이션을 대상으로 하며, 또한 에어백, 제동 시스템 및 엔진 관리와 같은 자동차 산업을 크게 지원합니다.

피질-R4:  Cortex-R4는 자동차 애플리케이션에 매우 적합합니다. 최대 600MHz까지 클럭할 수 있으며 이중 문제, 프리페치 및 저지연 인터럽트 시스템이 있는 8단계 파이프라인이 있어 안전이 중요한 시스템에 이상적입니다.

피질-R5: Cortex-R5는 R4에서 제공하는 기능을 확장하고 향상된 효율성, 안정성을 추가하고 오류 관리를 강화합니다. 듀얼 코어 구현을 통해 실시간 응답으로 매우 강력하고 유연한 시스템을 구축할 수 있습니다.

피질-R7: Cortex-R7은 성능을 크게 확장합니다. 11단계 파이프라인이 특징이며 비순차적 실행과 높은 수준의 분기 예측을 모두 가능하게 합니다. 잠금 단계, 대칭 및 비대칭 다중 처리를 위해 도구를 구현할 수 있습니다. 일반 인터럽트 컨트롤러는 언급해야 하는 또 다른 중요한 기능입니다.

 

피질-M

MCU 시장을 대상으로 특별히 설계된 Cortex-M. Cortex-M 시리즈는 ARMv7-M 아키텍처(Cortex-M3 및 Cortex-M4에 사용됨)를 기반으로 하고 더 작은 Cortex-M0+는 ARMv6-M 아키텍처를 기반으로 합니다. Cortex-M은 32이 8051비트용인 것과 같이 8비트용이 되었다고 해도 과언이 아닙니다. 많은 공급업체에서 제공하는 업계 표준 코어입니다. 예를 들어 Cortex-M 시리즈는 FPGA에서 소프트 코어로 구현될 수 있지만 메모리, 클록 및 주변 장치가 통합된 MCU로 구현되는 것이 훨씬 더 일반적입니다. 일부는 에너지 효율성에 최적화되어 있고 일부는 고성능에 최적화되어 있으며 일부는 스마트 미터링과 같은 특정 시장 부문에 맞춰져 있습니다.

특히 비용에 민감하거나 8비트에서 32비트로 마이그레이션하는 애플리케이션의 경우 Cortex-M 시리즈 중 가장 작은 제품이 최선의 선택일 수 있습니다.

피질-M0: Cortex-M0+는 Thumb-2 명령어 세트를 사용하며 2단계 파이프라인이 있습니다. 중요한 기능은 단일 사이클 GPIO용 버스와 마이크로 트레이스 버퍼입니다.

피질-M3&M4:  Cortex-M3와 Cortex-M4는 매우 유사한 코어입니다. 각각은 3단계 파이프라인, 다중 32비트 버스, 최대 200MHz의 클록 속도 및 매우 효율적인 디버그 옵션을 제공합니다. 중요한 차이점은 DSP에 대한 Cortex-M4 코어의 기능입니다. Cortex-M3와 Cortex-M4는 동일한 아키텍처와 명령어 세트(Thumb-2)를 공유합니다. 응용 프로그램에 부동 소수점 수학이 필요한 경우 Cortex-M4에서보다 Cortex-M3에서 훨씬 더 빠르게 이 작업을 수행할 수 있습니다. 즉, Cortex-M4의 DSP 또는 FPU 기능을 사용하지 않는 애플리케이션의 경우 Cortex-M3에서 동일한 수준의 성능 및 전력 소비를 볼 수 있습니다. 즉, DSP 기능이 필요하면 Cortex-M4로 가십시오. 그렇지 않으면 Cortex-M3가 작업을 수행합니다.

 

결론

그림 2. 피질 개요

 

ARM 프로세서는 목적에 따라 다양한 기능을 제공합니다. 약간의 생각과 조사를 통해 응용 프로그램 요구 사항에 맞는 올바른 프로세서를 찾을 수 있습니다. 고급 태블릿용이든 초저가 무선 센서 노드용이든 상관없습니다.

Cortex 코어를 올바르게 선택하고 아이디어를 현실로 만드는 것은 도전입니다. 그러나 숙련된 전문가 팀은 모든 문제를 처리하고 복잡한 개념을 구현할 수 있습니다.

오리엔트디스플레이는 다년간 ARM 프로세서 관련 기술에 집중해 왔으며 ARM 아키텍처 제품의 개발 및 구현에 대한 풍부한 경험을 축적했습니다. 시장의 일반적인 요구 사항을 충족하는 개발 플랫폼 및 코어 보드를 지속적으로 출시하는 동시에 고객의 개별 프로젝트 요구 사항도 해결합니다. 맞춤형 서비스를 제공합니다.

우리의 하드웨어 팀은 귀하의 디자인 아이디어와 요구 사항에 따라 가장 짧은 시간에 프로토타입을 생산할 수 있습니다. 당사 소프트웨어 팀은 절단 드라이버 레이어의 모든 기능을 사용자 정의하는 데 도움을 드릴 수 있습니다.

문의하기 초기 아이디어에서 최종 제품까지 계획을 세울 수 있도록 도와드리겠습니다.

Raspberry Pi와 함께 그래픽 LCD 디스플레이를 사용하는 방법은 무엇입니까?

그래픽 LCD를 Raspberry PI에 연결하는 방법은 무엇입니까?

기사는 보여줍니다 128×64를 연결하는 방법 그래픽 LCD 디스플레이라즈베리 파이.

사용된 LCD는 ST128의 LCD 컨트롤러가 있는 64×7565입니다. Raspberry Pi 3.3V 레일에서 직접 전원을 공급받을 수 있습니다.. 데이터를 위해 5개의 GPIO 핀이 필요합니다.

회로도는 CS(Chip Select), RST(Reset) 및 A0(Register Select)이 3개의 GPIO 핀에 연결될 수 있다는 것입니다. 이 예에서 8,24 및 25가 기본값입니다. ST7565 Python 클래스를 인스턴스화할 때 다른 값을 매개변수로 지정할 수 있습니다. GLCD의 SCLK(직렬 시계)는 Pi의 직렬 시계인 GPIO 11로 이동합니다. GLCD의 SID(직렬 입력 데이터)는 MOSI인 Pi의 GPIO 10으로 이동합니다. SID 및 SCLK에는 GPIO 10 및 11을 사용해야 합니다. Vdd는 PI의 3.3V 핀에 연결되고 접지도 연결됩니다.

LCD에는 RGB 백라이트가 있습니다.. LED 핀은 GPIO의 16,20 및 21로 갈 수 있습니다. Pi에서 색상을 제어하려면 ST7565 클래스를 인스턴스화할 때 RGB 핀을 지정합니다. LED 고장을 방지하기 위해 전류를 제한하려면 저항을 직렬로 배치해야 합니다. 다른 저항 값을 사용하여 LED 밝기를 변경할 수 있습니다. 전류를 약 20mA로 조정하는 것이 가장 좋습니다. 물론 값이 다르면 색상이 혼합됩니다. 순수한 흰색을 혼합하는 것은 매우 어렵습니다. 저항 값을 신중하게 계산하십시오. 40mA에서 LED 밝기는 시간이 지남에 따라 급격히 감소하고 60mA에 가까운 전류로 LED가 고장나서 영구적으로 손상될 수 있습니다.

그래픽 LCD를 프로그래밍하는 방법은 무엇입니까?

디스플레이는 가로 128픽셀, 세로 64픽셀입니다. LCD는 8개의 가로 페이지로 나눌 수 있습니다.. 3부터 0까지, 7부터 4까지 번호가 매겨져 있습니다. 각 페이지는 128개의 열과 8개의 픽셀 행을 포함합니다. 픽셀 주소를 지정하려면 페이지 및 열 번호를 지정하고 한 번에 8개의 수직 픽셀을 채우도록 바이트를 보냅니다.

디스플레이에는 SPI가 있습니다. (직렬 주변기기 인터페이스) 파이에 연결하려면. SPI에는 MOSI, MISO 및 클록 3라인이 필요합니다. Pi는 마스터이고 GLCD는 슬레이브입니다. 이 예에서는 GLCD에 쓰기만 하고 준비가 되지 않았으므로 MOSI 및 클록 라인에 대한 연결이 필요합니다. MOSI는 Pi에서 GLCD로의 출력이며 클록은 타이밍을 동기화합니다.

  1. Raspberry Pi에서 SPI 활성화 먼저
  2. raspi-config 메뉴에서 고급 옵션을 선택한 다음 SPI를 선택합니다. 그런 다음 "SPI 인터페이스를 활성화하고 싶습니다"에 대해 예를 선택합니다. 확인, 재부팅을 누르십시오. "기본적으로 로드되는 SPI 커널 모듈"에 대해 예를 선택합니다. SPI를 활성화한 후 Pi를 재부팅하십시오. 그런 다음 Ismod를 사용하여 SPI를 테스트합니다.Pi 버전에 따라 SPI_bcm2708 또는 spi_bcm2835를 반환해야 합니다. python SPI 라이브러리에는 apt-get install로 설치할 수 있는 python2.7 dev가 필요합니다.
  3. XNUMXD덴탈의 파이썬 SPI 라이브러리 불렀다. 파이-스파이데프. git:GLCD를 사용하여 설치할 수 있습니다. Pi용 Python 라이브러리는 GitHub 사이트에서 다운로드할 수 있습니다..
  4. 기본 ST7565 라이브러리(st7565.py)는 그리기, 텍스트 및 비트맵을 처리하고 글꼴 모듈(xglcd_font.py)을 사용하여 X-GLCD 글꼴을 로드합니다. 다음은 점, 선, 직사각형, 원, 타원, 정다각형을 만드는 기본 그리기 명령입니다. 자세한 내용은 아래 참조 또는 엔지니어에게 문의.

STM32CubeIDE를 사용하여 STM071G32RB 보드 기반 프로젝트 시작하기

STM32CubeIDE를 사용하여 STM071G32RB 보드 기반 프로젝트 시작하기

체크 아웃 우리 제어 보드!

32비트 ARM 기반 마이크로컨트롤러를 시작하는 것은 항상 약간 어렵습니다. 사용 가능한 마이크로컨트롤러, 플랫폼, 개발 보드, 도구 및 소프트웨어가 너무 많습니다. 이 노트는 LED 프로젝트를 시작하는 방법을 단계별로 설명합니다.

시작하기: 개발 보드 STM32G071RB 정보

특징:

  • 코어: Arm® 32비트 Cortex®-M0+ CPU, 최대 64MHz 주파수
  • 최대 128KB의 플래시 메모리, 36KB의 SRAM
  • 유연한 매핑이 가능한 7채널 DMA 컨트롤러
  • 12비트, 0.4µs ​​ADC(최대 16개의 확장 채널)
  • 12개의 XNUMX비트 DAC, 저전력 샘플 앤 홀드
  • 2개의 IXNUMXC, XNUMX개의 USART, XNUMX개의 저전력 UART, XNUMX개의 SPI

 

시작하기: STM32CubeIDE 설치

당신은 다운로드 할 수 있습니다 STM32큐브IDE 그들의 st.com에서. 무료입니다. 다음 STM32CubeIDE 설치 STM32CubeIDE 설치 가이드.

 

첫 번째 프로젝트: LED 깜박임

코드 작성을 시작하기 전에 프로젝트를 생성해야 합니다. 이는 대부분의 다른 IDE와 유사합니다. 프로젝트는 모든 설정, 코드 및 정의를 동일한 애플리케이션에서 모두 관리되는 단일 컬렉션으로 함께 묶는 데 사용됩니다.

 

 

1단계: 새 프로젝트 시작, 왼쪽 상단 아이콘(또는 메뉴 파일 > 새로 만들기 > STM32 프로젝트 아래)에서 시작합니다.

 

2단계: 프로젝트 이름: G0_LED, 마침 버튼을 클릭합니다.

회로도에서 LED4는 STM32G071에 의해 제어되고 포트는 PA5입니다.

3단계: System Core > SYS에서 Serial Wire를 선택하고 PA5를 GPIO_OUTPUT으로 설정합니다.

아래와 같이 PA5의 사용 레이블을 LED_GREEN으로 설정합니다.

 

4단계: 그런 다음 코드를 생성합니다.

 

이 기능을 기반으로 개발된 CubeIDE는 Src 디렉터리에서 작업할 C 파일을 생성하고 HAL(하드웨어 추상화 계층)을 포함 디렉터리에 넣습니다. CubeIDE는 똑같은 방식으로 작동하는 것 같습니다. 프로젝트 보기 아래 오른쪽에 있는 폴더를 확장하고 생성된 내용을 확인하십시오.

 

 

5단계: 이제 우리 고유의 C 코드를 약간 추가해 봅시다! 무한 루프 영역 다음에 아래와 같이 섹션 3에서 LED를 토글하는 코드를 추가할 것입니다.

 

 

프로젝트 컴파일 및 보드에 다운로드

STM32CubeIDE를 사용하면 실제로 작업을 컴파일하고 STM32 칩으로 가져오기가 매우 쉽습니다. 첫 번째 단계는 컴파일된 .elf(우리 코드의 바이너리 버전)를 생성하는 것입니다. .elf를 생성하려면 빌드를 해야 합니다. 이것은 도구 모음에서 빌드 버튼을 누르는 것만 큼 쉽습니다.

이제 화면 하단의 콘솔에 빌드 정보가 표시됩니다.

이제 우리가 원하는 것은 이 컴파일된 바이너리를 STM32 마이크로컨트롤러로 보내는 것입니다.

개발 키트를 연결해 보겠습니다.

빨간색 전원 LED(파란색 스위치 왼쪽)와 더 큰 통신 LED(USB 케이블 사용)가 켜집니다. STM32CubeIDE 내부에서 실행 버튼을 선택합니다.

이렇게 하면 실행 대화 상자가 열립니다(처음 실행했기 때문에). 지금 선택하는 설정은 나중에 다시 사용하거나 편집할 수 있는 실행 구성으로 저장됩니다.

적용을 누르고 확인을 누르면 다운로드가 진행됩니다. 이제 콘솔이 몇 가지 흥미로운 텍스트로 채워집니다.

LED는 500ms마다 켜지고 꺼집니다. 모든 설정이 완료되었습니다.

STM32 대 아두이노

STM32 대 아두이노

체크 아웃 우리 제어 보드!

 

아두 이노

Arduino는 더 창의적이고 특정 하드웨어의 작동을 약화시키고 기능과 구문이 매우 간단하며 매우 "바보"입니다.

Arduino의 주요 제어 기능의 대부분은 AVR 마이크로 컨트롤러입니다. Arduino의 장점은 높은 코드 캡슐화와 적은 문장으로 소프트웨어 개발의 어려움을 줄여준다는 것입니다.

Arduino는 약간의 하드웨어와 C++만 이해하면 개발할 수 있으므로 비교적 시작하기 쉽습니다.

아두이노의 대부분의 기능은 라이브러리가 잘 구축되어 있어 사용이 매우 간편하지만 조금 더 복잡한 기능은 제어성이 떨어진다. 

 

STM32

STM32는 엔지니어링 실습에 더 많은 관심을 기울입니다. 실제로 공장에는 온도 컨트롤러, 일반 모터 컨트롤러, 저가형 PLC 및 일부 민간 장난감, 게임 컨트롤러, 유선 키보드 및 마우스, 기타 주변 장치 등과 같은 간단한 도구가 많이 있습니다. 매우 실용적입니다.

STM32는 주로 전문 개발자를 위한 제품으로 특정 전문 지식이 필요한 제품으로 사용되지만, 동시에 기능을 구현하기 위한 코드를 작성하는 것은 상대적으로 복잡합니다. 예를 들어 직렬 포트는 간단한 문자열을 출력합니다. Arduino의 경우 새로운 프로젝트에서 시작할 수 있으며 10줄의 코드로 구현할 수 있습니다. 그러나 Keil과 같은 STM32 개발 도구를 사용하는 경우 수백 줄 이상의 코드가 필요할 수 있습니다.

오픈 소스의 관점에서 STM32로 만든 것은 오픈 소스를 원하면 오픈 소스가 될 수 있고, 오픈 소스를 원하지 않으면 아무 것도 퍼블리싱할 수 없습니다.

 

결론

 

다음은 선택에 대한 몇 가지 제안입니다.

프로그래밍 언어에 대한 깊은 이해가 없는 대학 수준 이하의 평범한 학생이라면 아두이노부터 시작해보는 것을 추천합니다. C 스킬이 약하고 STM32가 떠오른다면 곧 포기할 생각이 들 것이다.

취업만을 위한 공부라면 단호히 STM32 마이크로컨트롤러.

재미로 배우고 전자 전공도 아니고 자신이 없다면 아두이노를 추천합니다.

프로그래밍 능력이 좋으면 STM32를 추천합니다. 완료한 후 Arduino 오픈 소스 커뮤니티에서 만든 것을 살펴보고 STM32로 쉽게 완료할 수 있습니다.

물론 능력이 있으면 둘 다 연락할 수 있습니다. 일반적으로 Arduino의 기본 기능은 일주일 이내에 마스터할 수 있습니다. 향후 필요하다면 아두이노 코드를 STM32와 같은 MCU 플랫폼에 자유롭게 이식할 수 있습니다.

사실, 둘은 실제로 약간 다른 방향을 겨냥하고 있습니다. Arduino는 일반 전자 애호가 및 DIY의 선택이며 STM32는 실제 제품의 개발 및 제조에 자주 사용됩니다.