임베디드 개발자는 하드웨어를 변경해야할 때가 많이 생긴다.커널이 어떤 하드웨어가 있는지 알아야 초기화 하고 사용한다.하드웨어 자원의 명세를 어떻게 알까?flash가 SD카드였다가 eMMC였다가커널에 하드코딩을 한다. => 하드웨어가 바뀌면 소스코드가 바뀌고 다시 빌드하
● 하드웨어로 가는 통로● 컴퓨터 시스템은 디바이스가 없으면 의미가 없음● 사실 디바이스 컨트롤은 어려움– 디바이스는 굉장히 복잡함● 인터럽트– HW는 SW에게 알려주고 싶어한다.● 네트워크 패킷 도착, timer expire– SW는 반드시 현재 하던 작업을 멈춰야
● GPIO(General Purpose Input Output)– 일반적인 용도의 입출력 포트– input/ouput● SoC의 하나의 입출력 핀– GPIO + alternate functions● 58 General-Purpose Input/Output (GPIO)
● 대부분 디바이스 드라이버는 두 가지 문맥으로 동작● Top half– 인터럽트 컨텍스트에서 동작– 인터럽트 핸들러● 제한된 환경● 일부 커널 함수 호출 불가– Sleep 함수(예: mutex) 호출 불가● Bottom half– 보통 스레드(커널 스레드) 컨텍스트에
● 브레드 보드에 LED 10개 장착됨●toy_system 커맨드라인에서 ‘n’ 입력 시 좌측 4개 LED가ON/OFF를 반복한다.– ‘n exit’ 누르면 실행을 종료한다명령에 테이블에 n 커맨드 추가n커맨드 입력 => toy_simple_io function 호출=
● 설정 가능– 100HZ이면 1초에 100회 타이머 인터럽트 발생● 10ms 마다 타이머 인터럽트 발생● 32bit arm 머신에서 사용– 250HZ이면● 4ms 마다 타이머 인터럽트 발생● 64bit 라즈베리파이 // buildroot는 100HZ● 100HZ vs
● 3가지 인터페이스 접근 가능●/dev 내부의 디바이스 노드를 통해 접근– open/read/write/close/ioctl– character device– block device● sysfs filesystem– 마치 파일처럼 접근(문자열로 쓰고/읽기)● Netw
작은시스템인 경우 persistent한 스토리지가 없는 경우가 많다.ex) IoT디바이스 , 센서처음에는 Boot Flash에 모두 저장이 되어있다.파워 => 부트 플래시NOR은 반도체 셀이 병렬로 배열, 소스라인이 DRAM처럼 주소 하나마다 Random accessN