임베디드 개발자 면접질문 정리
·
똥글
✅ 1. 펌웨어 관련 실전 질문삼성전자 무선사업부"MCU의 Flash와 RAM을 어떻게 나눠 썼는지 설명해보세요."LG전자 VS사업부"UART와 SPI의 차이점은? 둘 다 사용해봤다면 각각의 장단점도 말해보세요."현대오트론"인터럽트 핸들러 안에서는 어떤 동작을 피해야 하나요?"삼성SDI"펌웨어에서 부트로더는 어떤 역할을 하나요?"삼성SDS"펌웨어 업데이트(FOTA)는 어떻게 진행하나요?"기업 질문✅ 2. RTOS 관련 실전 질문한컴MDS"Semaphore와 Mutex의 차이점은? 실제로 언제 사용했는지 예시를 들어주세요."LG CNS"RTOS에서 Priority Inversion이 발생한 적이 있나요? 어떻게 해결했나요?"삼성전자 DS"Task 간 통신을 구현해본 경험이 있나요? 어떤 방식으로 했나요?"..
디바이스 드라이버
·
Linux
종류문자 디바이스 드라이버: 대부분의 디바이스 드라이버, 구현 간편블록 디바이스 드라이버네트워크 디바이스 드라이버버스 디바이스 드라이버디바이스 노드mknod [옵션] 타입c : 문자형b : 블록형주번호 : 드라이버마다 고유의 번호, 커널이 할당해주기도부번호 : 드라이버마다 고유의 번호, 드라이버가 할당을 관리문자 디바이스 드라이버드라이버는 리눅스에서 1바이트 단위로 데이터를 읽고 쓰는 장치를 제어하는 드라이버read(), write()와 같이 바이트 단위로 입출력을 처리하는 드라이버file_operations를 구현하는 드라이버open, read, write, lseek, close 같은 일반적으로 사용하는 파일 함수별도의 시스템콜 없이 새로운 기능 추가 가능 -> 가상 파일 시스템file_oper..
커널 모듈 (insmod, lsmod, rmmod) 커널 API
·
Linux
로드 가능한 커널 모듈 (Loadable Kernel Module)커널 이미지에 포함X -> 부팅시간, 메모리 절약커널에 덧 붙여서 커널의 기능 확장커널 주소 공간에서 실행linux/drivers/ 로 이동comento dir생성linux/drivers/comento에서 Kconfig, Makefile 생성 설정menu "Comento Example Driver" # 메뉴 이름 설정config COMENTO_EXAMPLE tristate "Comento Example Driver Module" # 3가지 옵션, y m n 사용가능 help This is an Example endmenu # 메뉴 그룹 종료드라이버 모듈 설정 옵션을 정의 설정obj-$(CONFIG_COMENTO_EXAMPLE..
ls 명령어 분석 with strace
·
Linux
일단 strace 실행strace lsexecve("/usr/bin/ls", ["ls"], 0xffffd2497820 /* 62 vars */) = 0brk(NULL) = 0xc63a27921000mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xe8c8d6ac7000faccessat(AT_FDCWD, "/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3fstat(3, {st_mode=S_IF..
Kernel 및 System call 디버그 with GDB
·
Linux
이전 포스트에서 커널에 새로 시스템콜을 추가함시스템콜을 GDB를 사용해 추적하기QEMU 디버그 모드로 실행QEMU 실행 시, -s -S 옵션-s : gdb가 붙을 수 있도록 1234포트 개방-S : QEMU가 시작하자마자 멈추는 상태로ARCH=arm64 make menuconfig 실행 후,Kernel hacking -> Kernel debugging 선택Kernel hacking -> Compile-time checks and compiler options -> Rely on the toolchain's implicit default DWARF version 선택커널 재 컴파일new_syscall함수에 break point커널에 gdb를 붙이고, qemu포트 1234로 접속한 뒤new_syscall 함..
커널 시스템콜 추가
·
Linux
커널 Makefile 구조obj-yobj-y에 들어간 파일만 커널에 컴파일되어 포함됨(바이너리)obj-y += foo.oobj-$ (CONFIG_*)조건부로 파일 포함할 때CONFIG_*이 .config파일에 정의된 대로 결정됨obj-$(CONFIG_MYDRIVER) += bar.oprintk커널내에서 로그 출력로그 레벨level0KERN_EMERGE시스템 불안정level1KERN_ALERT당장 조치 요구level2KERN_CRIT심각한 상황level3KERN_ERR오류 발생level4KERN_WARNING경고level5KERN_NOTICE일반적인 상황level6KERN_INFO참고할만한 상황level7KERN_DEBUG디버깅SYSTEMCALL_DEFINE 매크로시스템콜 정의하기 위한 매크로형식: SYS..