일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 삼성코딩테스트
- sort
- 코테
- dfs
- MCU 딥러닝
- DP
- TensorFlow Lite
- tinyml
- 다이나믹프로그래밍
- 임베디드 딥러닝
- dfs문제
- 코딩테스트
- 영상처리
- bfs문제
- DP문제
- 딥러닝
- 포스코 교육
- 초소형머신러닝
- 알고리즘
- 포스코 ai 교육
- 삼성코테
- 포스코 AI교육
- BFS
- 코테 문제
- 삼성역테
- tflite
- 컴퓨팅사고
- 그리디
- 자료구조
- 삼성역량테스트
- Today
- Total
코딩뚠뚠
[임베디드] 임베디드시스템 SW 개발과정 본문
우선 임베디드 소프트웨어의 구조를 간단히 살펴보고자 한다.
하드웨어를 기반으로 OS 포팅, 디바이스 드라이버 제작, 통신 등의 미들웨어, GUI 제작 등의 과정이 필요하다.
- OS 포팅
커널을 올리는 과정이다.
포팅되어있지 않는 단말기에 커널을 올려서 동작이 가능하게 한다.
즉 어떤 기능을 쓸 준비가 되어있지 않은 단말기에, 기능을 쓸 수 있게끔 해주는 과정
말은 간단하지만 실제 리눅스 커널을 이용한 개발과정에서 가장 어려워하는 부분 중 하나가 리눅스 커널의 포팅이다.
커널 포팅에 대한 지식 ↓ 접은글 ↓
1. 임베디드 리눅스 구성 및 배경지식
APP --- File System --- Kernel --- Boot loader
이들은 어떻게 연계되어 작동할까?
- Cross Compiler : Host PC는 CPU, Target Board는 Arm 이라고 가정한다면 두 보드에서 모두 호환되는 프로그램을 만들 수 있을까? 이때 사용하는것이 크로스 컴파일러이다.
- Boot Loader : Kernel을 부팅하는 용도 및 하드웨어 초기화, 디바이스 셋팅의 역할을 한다. 대표적으로는 u-boot이 있다.
2. Host PC와 Target Board
Host PC는 빌드를 진행, Target Board에서 동작
이 둘을 어떻게 연결할지에 대한 문제가 발생하게 된다.
UART 시리얼통신 / TFTP 파일시스템 이용한 통신 / NFS 네트워크 파일시스템 이용한 통신
3. 타겟 보드 정보 확인
부팅시 확인해야 될 내용을 확인한다.
printenv를 치면 shell환경에서 여러 정보들을 확인할 수 있다.
bootdelay / ipaddr / bootargs / initrd / zimage 등
bootcmd의 ramdisk와 initrd는 같은 주소여야 한다. bootm은 zimage의 주소와 같아야 한다.
4. 환경 구성 및 커널 컴파일
TFTP 서버 구축
- TFTP 서버를 데몬으로 등록한다
Network 설정
- Board와 PC를 연결한다.
TFTP이용해서 필요파일 다운로드
- 디렉토리를 설정해주었기 때문에 해당위치에 파일을 넣고 부팅이 가능해진다.
크로스컴파일러 다운 및 환경변수 등록
- Target Board에 맞는 버전의 크로스컴파일러를 다운, 환경변수 PATH 등록하기
커널 컴파일
- 아래 블로그를 참조한다.
- .config 파일이 생성되고 커널이 컴파일된다. 크로스컴파일러에 맞게 makefile을 수정해줘야된다.
https://richong.tistory.com/178
- 디바이스 드라이버 제작
여러 장치를 구동시키기 위해서 OS는 장치 드라이버를 필요로 한다.
임베디드 리눅스는 캐릭터,블럭,네트워크 디바이스 드라이버로 구분한다.
- 캐릭터 디바이스 드라이버 : 터치, 사운드, 화면 등의 디바이스 드라이버 제작
- 블럭 디바이스 드라이버 : 파일 시스템과 밀접한 관계 - 플래시 제어하는 디바이스 드라이버 (MTD)
- 네트워크 디바이스 드라이버 : TCP/IP 제어를 받는 이더넷 디바이스 드라이버를 구현
- 미들웨어 제작
미들웨어란 응용소프트웨어가 OS로부터 제공받는 서비스 이외에 추가적으로 이용할 수 있는 서비스를 제공하는 소프트웨어이다.
즉 양 쪽을 연결하여 데이터를 주고받을 수 있도록 중간에서 매개 역할을 하는 소프트웨어이다.
TCP/IP 기반 프로토콜을 사용한 통신을 예로 들 수 있다.
- GUI 등 어플리케이션 제작
임베디드 시스템 프로그래밍을 하는 것은 결국 Edge 단에서 사용자에게 보여지게 된다.
이를 위한 Graphical User Interface 가 필요할 것이다.
단지 심미적인 이유 라고 할 수도 있지만 그리 간단하지 않다.
제한된 크기의 디스플레이에 원하는 내용을 모두 구현해 내기 위한 프로그래밍이 필요하다.
'공부 > 임베디드' 카테고리의 다른 글
[임베디드] TCP/IP 프로토콜 정리 (0) | 2021.09.07 |
---|---|
[임베디드] RS-232 시리얼통신에 대해 (1) | 2021.09.06 |
[임베디드] CAN 통신이란? (0) | 2021.09.06 |
[임베디드] 임베디드시스템과 AI (0) | 2021.08.30 |
[임베디드] 임베디드 시스템과 임베디드 개발자 (0) | 2021.08.16 |