내장형 Linux 개발자의 옵션을 확장하는 AWS Graviton 프로세서
17566 단어 aws
Docker Desktop와QEMU는 x86 기기에서 Arm 체계 구조를 위한 Linux 응용 프로그램을 구축하고 실행하는 데 사용할 수 있으나 개발자의 체험은 Arm 컴퓨터에서 개발한 것과 다르다.AWS Graviton 프로세서를 사용하면 내장된 Linux 개발자가 더 짧은 시간 안에 더 많은 작업을 유연성으로 수행할 수 있습니다.
삽입식 리눅스 시스템은 두 가지 주요 요소로 구성되어 있는데 그것이 바로 리눅스 핵과 루트 파일 시스템이다.전통적인 개발 과정은 x86기계에서 소프트웨어를 교차 컴파일한 다음에 저장 장치(예를 들어 SD카드나 eMMC 모듈)를 프로그래밍하는 것을 포함한다.프로그래밍 과정이 끝나면 삽입식 시스템은 리눅스를 인도하고 실행할 것이다.복분자 원주율은 이 과정의 유행 예이지만, 많은 시스템이 비슷한 방식으로 운행된다.
삽입식 시스템에는 일반적으로 하드웨어와 밀접하게 결합된 소프트웨어가 있다.이것은 개발자가 직접 목표 하드웨어에서 소프트웨어를 운행한다는 것을 의미한다.이는 AWS Graviton 프로세서의 변화에 따라 달라집니다.AWS Graviton 프로세서를 사용하여 끼워넣는 리눅스 개발의 장점을 두 가지 예로 살펴보자.
AWS Graviton 프로세서로 구동되는 EC2 인스턴스에서 Arm 파일 시스템 사용
NXP S32V automotive development platform 시각과 센서에 대한 융합 응용.NXP 소프트웨어는 Arm Cortex-A53 기반 장치에 대해 board support package(BSP) 형식으로 제공됩니다.Linux 장치 트리와 부트 로더 같은 리눅스 커널 이미지, 파일 시스템 및 기타 부품을 다운로드합니다.
Graviton-based EC2 instances를 사용하면 파일 시스템을 추출하고chroot 명령을 사용하여 파일 시스템의 내용을 검사하고 수정할 수 있습니다.S32V와 AWS Graviton 프로세서가 공통적인 Arm 시스템 구조를 공유하기 때문에 파일 시스템의 응용 프로그램은 어느 시스템에서든 실행할 수 있다.S32V 파일 시스템에 설치된 gcc 버전을 확인하는 방법과 EC2 실례를 사용하여 C 언어의 예시를 컴파일하고 실행하는 방법을 보여 줍니다.
먼저 새 EC2 인스턴스를 생성합니다.이 인스턴스는 A1, T4g, M6g, C6g 또는 R6g 등 Graviton 프로세서에서 지원하는 모든 인스턴스 유형이 될 수 있습니다.AWS 계정을 만들고 AWS 콘솔을 사용하여 새 EC2 인스턴스를 구성하고 시작하는 방법AWS tutorials이 많습니다.사용하는 모든 강좌에서 상술한 실례 유형 중 하나를 교체해야 합니다.
이 예에서, 나는 t4g를 만들었다.중간 실행 Ubuntu 18.04, 공공 IP 주소가 있으며 ssh를 통해 데스크톱에 접근할 수 있습니다.
위의 링크를 사용하여 S32V BSP를 다운로드했고 루트 파일 시스템을 포함하는 패키지에서 tar 파일을 추출했습니다.다른 Linux 커널 파일과 SD 카드 이미지는 모두 무시했습니다.
파일 시스템 tar를 복사합니다.생성된 EC2 인스턴스에 gz 파일을 복사하여 압축을 풉니다.명령에 키 파일 및 EC2 IP 주소를 사용합니다.
$ scp -i key.pem fsl-image-auto-s32v234evb.tar.gz ubuntu@<ec2-ip-address>:~/
$ ssh -i key.pem ubuntu@<ec2-ip-address>
EC2 인스턴스에 연결된 후 루트 파일 시스템을 설정합니다.$ mkdir fs ; cd fs
$ tar xvf ../fsl-image-auto-s32v234evb.tar.gz ; cd ..
$ sudo chroot fs /bin/bash
현재 S32V 파일 시스템에서 bash 프롬프트가 변경되었습니다.설치된 gcc 버전을 검사합니다.
bash-4.4# gcc --version
gcc (Linaro GCC 6.3-2017.06~dev) 6.3.1 20170509
다음은 간단한 테스트입니다.c 프로그램, chroot에서 컴파일하고 실행할 수 있습니다.새 파일 테스트를 편집합니다.c 및 컨텐트를 추가합니다.이것은 EC2 기기에서 완성하고 루트 fs 디렉터리로 복사하거나,chroot에서vi를 실행하고 파일을 만들 수 있습니다.#include <stdio.h>
#include <stdlib.h>
int main()
{
srand(1);
double a1[1000] __attribute__((__aligned__(16)));
double a2[1000] __attribute__((__aligned__(16)));
double a3[1000] __attribute__((__aligned__(16)));
double sum = 0;
for (int i = 0; i < 1000; i++) {
a1[i] = (rand() % 2000) - 1000;
a2[i] = (rand() % 2000) - 1000;
}
for (int i = 0; i < 1000; i++) {
a3[i] = a1[i] * a2[i];
}
for (int i = 0; i < 1000; i++) {
sum += a3[i];
}
printf("Sum: %f\n", sum);
return 0;
}
chroot 및 copy 테스트를 종료합니다.c fs/디렉토리에 들어가서 chroot을 다시 입력합니다.$ cp test.c fs/home/root
$ sudo chroot fs /bin/bash
bash-4.4# cd /home/root
심지어vi도chroot 내부에서 테스트를 편집할 수 있다.cbash-4.4# gcc -O3 -g test.c -o test
bash-4.4# ./test
Sum: 258936.000000
objdump 어셈블리 프로그램을 사용합니다.부분 출력은 그림과 같다.bash-4.4# objdump -S test | more
double sum = 0;
for (int i = 0; i < 1000; i++) {
a1[i] = (rand() % 2000) - 1000;
4004fc: 5289ba74 mov w20, #0x4dd3 // #19923
{
400500: a9025bf5 stp x21, x22, [sp, #32]
a1[i] = (rand() % 2000) - 1000;
400504: 72a20c54 movk w20, #0x1062, lsl #16
{
400508: a90363f7 stp x23, x24, [sp, #48]
40050c: 910103b5 add x21, x29, #0x40
400510: 8b0303b6 add x22, x29, x3
srand(1);
400514: d2800018 mov x24, #0x0 // #0
a1[i] = (rand() % 2000) - 1000;
400518: 5280fa13 mov w19, #0x7d0 // #2000
for (int i = 0; i < 1000; i++) {
40051c: d283e817 mov x23, #0x1f40 // #8000
srand(1);
400520: 97ffffe8 bl 4004c0 <srand@plt>
a1[i] = (rand() % 2000) - 1000;
400524: 97ffffdb bl 400490 <rand@plt>
400528: 9b347c01 smull x1, w0, w20
40052c: 9367fc21 asr x1, x1, #39
400530: 4b807c21 sub w1, w1, w0, asr #31
400534: 1b138020 msub w0, w1, w19, w0
400538: 510fa000 sub w0, w0, #0x3e8
40053c: 1e620000 scvtf d0, w0
400540: fc386aa0 str d0, [x21, x24]
그것은 마치 원래의 Arm Linux 컴퓨터처럼 보인다.S32V 파일 시스템에서 정확한 도구를 사용하여 교차 컴파일되지 않았습니다.일부 응용 프로그램은 특정한 하드웨어를 필요로 하기 때문에 유니버설 기기에서 정확하게 실행할 수 없지만, 많은 응용 프로그램은 예상대로 실행된다.BSP에서 제공하는 동일한 도구와 라이브러리를 사용하여 응용 프로그램을 구축하고 테스트하는 방법을 쉽게 알 수 있습니다.프로그래밍을 하고 회로판을 시작하기 전에 모든 내용을 검사한 결과 일부 내용이 포함되지 않거나 기능이 정상적이지 않은 것을 발견할 수 있다.
Docker from scratch는Graviton 기반의 EC2 실례를 이용하여 끼워넣는 리눅스 개발을 하는 또 다른 방법이다.
chroot을 종료하고 처음부터 Docker를 시도해 보겠습니다.
내장 파일 시스템과 Docker 결합 사용
Docker는 내장된 Linux에 대해 파일 시스템을 사용하는 또 다른 방법을 제공합니다.
동일한 t4g에 Docker를 설치합니다.Hello World를 실행할 수 있도록 하는 중등 실례입니다.
$ sudo apt update
$ sudo apt upgrade -y
$ curl -fsSL get.docker.com -o get-docker.sh && sh get-docker.sh
$ sudo usermod -aG docker ubuntu ; newgrp docker
$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(arm64v8)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
S32V 파일 시스템을 사용하여 처음부터 docker 이미지를 만들려면 가장 좋아하는 편집기를 사용하여 docker 파일을 만듭니다.FROM scratch
ADD fsl-image-auto-s32v234evb.tar.gz /
ADD test.c /home/root
CMD /bin/bash
현재 디렉터리에 있는 docker 파일과 루트 파일 시스템을 사용하여 docker 이미지를 구축합니다.$ docker build -t s32v -f Dockerfile .
docker 이미지를 실행하고 소프트웨어를 컴파일합니다.$ docker run -it s32v
bash-4.4# cd /home/root
bash-4.4# gcc -O3 -g test.c -o test
bash-4.4# ./test
Sum: 258936.000000
bash-4.4# exit
컨테이너를 종료하면 수정된 이미지가 Docker에 자동으로 저장되지 않습니다.수정된 용기를 저장하려면 용기 id를 가져오고commit 명령을 사용하여 새 그림을 쓰십시오.$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fb2481cfe668 s32v "/bin/sh -c /bin/bash" 23 seconds ago Exited (0) 2 seconds ago elastic_liskov
$ docker commit fb2481cfe668 s32v
이미지는 Docker Hub 또는 AWS ECR에 저장할 수 있습니다.그림의 tar 파일을 저장하고 기계 사이를 수동으로 복사할 수 있습니다.$ docker save s32v | gzip > s32v-fs.tgz
docker save의 tar 파일은 모든 이미지 층의 tar 파일입니다. 수정을 거친 후에 우리가 사용하기 시작한 파일 시스템에 다시 넣을 수 있습니다.Docker는 또한 기계 사이에서 그림을 쉽게 전송할 수 있으며,chroot에 비해 사용하기 쉽다.
Docker와 chroot는Graviton 프로세서가 지원하는 EC2 실례와 결합하여 끼워넣는 리눅스 개발자의 강력한 도구로 Arm의 개발 체험을 더욱 쉽게 한다.많은 EC2 구성은 작업의 CPU 수와 메모리 크기를 올바르게 조정합니다.개발판에서나 교차 컴파일을 통해 대형 프로젝트를 컴파일하는 것보다 더 빠르고 쉽게 완성할 수 있다.
NXP S32V 루트 파일 시스템에서 사용하는 기술은 대부분의 내장형 Linux 개발 보드에 적용될 수 있습니다.
요약
AWS Graviton 프로세서는 내장형 Linux 시스템의 개발자 경험을 개선합니다.chroot와 Docker 같은 명령은 개발자의 체험을 개선하기 위해 개발판에서 모든 작업을 완성하지 않아도 된다.구축 기계가 x86이고 목표 시스템이 Arm일 때 교차 컴파일, 복사, 운행과 디버깅 순환은 더욱 시간을 소모할 수 있다.A1, T4g, M6g, C6g, R6g 인스턴스의 다양성 때문에 최적의 성능을 얻기 위해 적합한 하드웨어를 선택하는 것이 매우 쉽다.
AWS Graviton 프로세서가 Linux on Arm에서 개발한 워크플로우에 어떻게 적응하는지 생각해야 합니다.신형T4g EC2 instances을 시험해 활용free trial할 수 있는 절호의 기회다. 2020년 말까지.
Reference
이 문제에 관하여(내장형 Linux 개발자의 옵션을 확장하는 AWS Graviton 프로세서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aws-builders/aws-graviton-processors-expand-options-for-embedded-linux-developers-nc3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)