일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코멘토실무PT
- Arm 아키텍처: 메모리 모델과 배리어
- BSP
- arm
- ARM 아키텍쳐: 메모리 모델과 배리어
- 시스템 소프트웨어 개발을 위한 ARM 아키텍처의 구조와 원리
- ARM 아키텍처: 메모리모델과 배리어
- udemy
- Arm 아키텍처: 캐시
- 빌드 시스템
- 코멘토
- 인프런
- Kernel
- 실무PT후기
- yocto
- Today
- Total
목록분류 전체보기 (29)
반도체 소프트웨어

요번 주는 마지막 수업이며 I2C에 대한 내용을 진행했다. I2C는 SPI, GPIO와 함께 임베디드 프로토콜에서 많이 사용되는 대표적인 통신 방법이다. SPI와 I2C의 차이점을 집중적으로 배울 수 있었다. 슬레이브 주소, 레지스터 주소, 데이터 등 I2C를 사용하기 위한 구체적인 프로토콜을 공부해서 좋았고 RTC, 밝기 측정, 무게 센서, 광센서, 가속도, 자이로 등 센서에 대해서 종합적으로 이해할 수 있어서 좋았다. 6주 동안 어디에서도 들을 수 없는 시스템 반도체 sw 강의를 들어서 정말 많은 도움이 되었고, 운좋게 좋은 기업에 취업하게 되어서 기쁘다. 더 고급 내용으로 구성된 강의가 개설되기를 희망한다. [2024/02/14(수) 20:00] 작주 복습 spi는 속도가 상대적으로 10Mbps로 ..

5주 차는 SPI 개념 및 디바이스 드라이버 코드를 분석했다. 어렴풋이 알고 있던 SPI 프로토콜을 구체적으로 배울 수 있었고, 해당 개념을 QEMU 에뮬레이터와 디바이스 드라이버를 사용해 주어진 시나리오를 구현해보며 실무적인 레벨에서 학습해볼 수 있었다. 1주 차부터 꾸준히 만들어온 새로운 반도체 SoC가 꽤 많이 완성되어서 하나의 chip으로 보이며, 이렇게 전체 흐름을 경험해볼 수 있어서 정말 좋았다. 추가적으로, 요번에 제시된 과제 내용이 정말 현업적이어서 흥미로웠다. [2024/02/07(수) 20:00] 작주 복습 libgpiod를 사용하는 것이 정석적 때로는 sysfs도 사용하기도 함 인덕터: 적분 성질, 더하는 성질(전류 저장) 캐패시터: 전압 저장 트랜지스터 중 효율이 좋은 소자가 FET..

4주 차는 GPIO를 배웠다. 기존에 라즈베리파이를 사용하여 LED 등 센서와 엑츄에이터를 제어하는 기본적인 실습을 해본 경험이 있어 GPIO 수업은 쉬울 것이라 간과했다. 그러나 하드웨어 관점에서의 GPIO 내부 구조, 가상 에뮬레이터(QEMU) 에서 GPIO 기능 구현에 관한 내용들이 쉽지 않았다. 요번 수업을 통해 GPIO가 소프트웨어적으로 1과 0을 써서 제어하는 범용 핀 이라는 단순한 이해를 넘어서 실제로 어떻게 구현되어있고 제어는 어떻게 하며 MMIO와 DMA와 연계되면 어떤 결과가 나올 수 있는지를 배울 수 있어서 좋았다. 다음 수업이 기대된다. [2024/01/31(수) 20:00] 작주 복습 DMA memcpy 같은 라이브러리 내부 코드 분석하는 것도 도움이 될듯 PIO: 프로그래밍 I/..

3주 차는 DMA에 대해 공부했다. DMA는 말 그대로 CPU를 거치지않고 디바이스가 메모리에 직접 접근하는 방식이라는 개념적인 정의 이상으로 아는 것이 아무 것도 없었다. QEMU로 DMA 기법을 사용하는 하드웨어를 작성하고, DMA를 지원하는 디바이스 드라이버를 개발하는 과정이 정말 인상깊었다. 특히 UART에 DMA가 적용한 소스 코드를 분석하면서 DMA에 대해 정말 깊고 넓게 이해할 수 있었다. DMA가 머릿속에서 추상적인 개념이 아닌 효율적으로 메모리를 접근하는 디바이스를 개발하는 기법 중 하나라는 것을 소스코드와 실무적인 레벨에서 이해할 수 있었다. 현업에서 DMA를 사용하게 된다면 요번 주차에서 공부한 경험이 정말 큰 도움이 될 것이다. [2024/01/24(수) 20:00] 작주 복습 버스..

캐시 접근 속도, 대역폭, 단위 용량 등 성능 차이가 뚜렷한 두 계층 사이에서 지역성을 활용해 자주 활용되거나 인접한 자료를 잠시 저장(일반적인 개념) 캐시를 소프트웨어나 하드웨어로 구현 ex) 리눅스커널의 슬랩 캐시, 프로세서의 링크레지스터 캐시, 브랜치 캐시 고속으로 동작하는 static RAM 캐시 디자인 원칙 캐시에서 원하는 데이터를 어떻게 찾을지(캐시 hit) 캐시에서 원하는 데이터가 없으면 어떻게 처리할지(캐시 miss) 캐시의 성능은 어떻게 최적화할지 캐시를 배우는 이유 고급 시스템 소프트웨어 개발자가 되기 위한 기본 지식: 난제 이슈 해결의 실마리 캐시 설정 방식은 시스템 성능에 영향을 줌: TLB miss, 캐시 세부 동작 방식 설정 memory corruption 이슈를 디버깅하기 위한..

멀티코어 시스템에서 배리어 여태까지는 싱글코어 기준 배리어 설명이었음 메모리주소에 저장된 값이 다른 core에서도 동기화될수있는지는 중요함 멀티코어시스템에서 데이터 동기화 문제 각 cpu코어에서 처리한 메모리를 동일하게 사용할 수 있는지 여러 cpu 코어에서 명령어가 실행되어서 순서가 꼬이지 않는지예시) DMB ISH: 한 코어에서 업데이트한 메모리를 다른 코어에서도 동기화된채로 사용하도록 해주는 명령어 shareability Domain 과 배리어 shareability Domain: 멀티코어 환경에서 배리어 명령어의 적용 범위를 정의하는 것 배리어 명령어에 Qualifier 옵션을 줘서 배리어가 적용되는 범위를 결정 Qualifier 옵션 종류 SY: Full System 적용 OSH: Outer S..

메모리 리오더링의 사이트 이펙트(노멀 메모리에서 ARM 코어 최적화)에 의한 소프트웨어 버그를 예방하기 위한 기법 ARM 아키텍처는 명령어 실행 순서를 보장하는 배리어 제공 DMB(data memory barrier): 메모리 엑세스 순서 보장 메모리 머지(연속 메모리 접근), 리오더링들에 의해 명령어 순서가 바뀌는 것을 방지하기 위해 사용 예를 들면 CPSR셋팅 등으로 실행 흐름이 변경될수있는 명령어라면 실행 순서가 바뀌면 안되며 이럴때는 배리어 사용해줘야함 STR, LDR에만 적용 가능. 즉 메모리 엑세스 명령어에만 적용됨 DMB (qual: 배리어 명령어 실행 범위 제한) DSB(data synchronizatinon barrier): 메모리 리오더링과 명령어 리오더링을 함께 방지하는 기능(DMB ..

ARM아키텍처에서는 노멀 메모리 타입을 캐싱이 되는 영역으로 정의 명령어를 실행하거나 이 과정에서 처리되는 데이터나 코드 영역(코드 섹션 등) 일반적인 프로그램이 동작하는 메모리 영역 노멀 메모리 타입 영역의 동작 방식 머지 엑세스 연속된 메모리 공간에 접근하는 2개 이상의 명령어를 한번에 처리 성능 향상을 위한 프로세서 기법 소프트웨어 버그의 원인이기도 함 스페큘레이션 엑세스 소프트웨어에서 자주 접근하는 데이터를 예측해 미리 로딩하는 동작 패턴 인식과 같은 알고리즘을 활용 리오더링 엑세스 ARM프로세서는 명령어 간 의존성이 없는 경우 명령어 순서를 바꿔 처리하기도함 프로세서의 성능 향상 소프트웨어 버그의 원인이기도 함 메모리 리오더링 성능을 더 키우기 위한 프로세서의 설계 방식 ARM프로세서 내부에서 ..

MMIO 기본 동작 각 I/O 디바이스의 포트가 물리 주소에 연결 각 I/O 디바이스의 레지스터를 물리 주소를 통해 접근 DRAM R/W을 통해서 I/O PORT 제어 가능(load, store 등 간단한 인터페이스로 엑세스) cat /proc/iomem 으로 MMIO 물리 주소 확인 가능 main peripherals의 주소를 r/w하면 soc내의 ip, 페리페럴을 제어할 수 있는것 각 offset 0x1마다 32, 64bit 데이터를 기록할 수 있는것 디바이스 메모리 MMIO로 접근하는 주소 메모리 모델 중 하나 페리페럴 제어하기 위해 사용하는 메모리 영역 특징 캐시에서 처리 안됨 스페큘레이션 엑세스 안함(예측처리) 디바이스 메모리 속성(임베디드 시스템 설계에 따라, 필요에 따라 디바이스 메모리에 다..

메모리 구성, 메모리 어떻게 처리되는지에 대한 설계 ARM사에서 사용하는 용어 메모리타입 분류 normal memory 일반적인 시스템 소프트웨어 개발시에 사용하는 메모리 방식 메모리 접근 순서 등 추가 작업을 ARM 코어가 진행 device memory(mmio) Soc ip, block을 설정하기 위해 사용하는 메모리 방식 추가 작업진행안하고 IP에만 접근해서 작업 진행 메모리맵 메모리 영역을 속성별로 분류한 메모리 지도 리눅스 커널에서 디바이스 트리로 메모리 맵 속성 지정 프로젝트초반에 메모리 맵을 설정(각 코드별 HEAP, CODE, 데이터 사이즈를 측정) kernel data,code 및 app data,code 영역 cacheable이라는 것이 nomale memory로 처리되는 것 메모리 리..