Uboot에서 tftp 다운로드가 멈추는 문제

U-Boot에서 tftp 명령으로 커널 이미지나 rootfs를 받아오다가 진행률이 멈추거나, Loading: * 이후로 아무 반응 없이 프롬프트로 돌아와 버리는 경우가 있다. 케이블도 꽂혀 있고 서버도 떠 있는데 왜 멈추는지는 로그 한…

Continue ReadingUboot에서 tftp 다운로드가 멈추는 문제

Device Tree 이해

같은 SoC를 쓰는 보드라도 UART/GPIO 배선, 메모리 크기, 인터럽트 번호는 보드마다 다르다. 과거 ARM Linux는 이런 정보를 보드별 C 코드(board file)로 하드코딩했는데, 지원 보드가 수백 종으로 늘면서 커널 트리 유지보수가…

Continue ReadingDevice Tree 이해

asm/types.h: No such file or directory 문제 (Yocto pseudo-native)

Yocto 빌드 중 pseudo-native의 do_compile 단계에서 이런 에러를 만날 때가 있다. gcc -c -isystem .../recipe-sysroot-native/usr/include -isystem .../recipe-sysroot-native/usr/include -m32 ... pseudo_util.c In file included from /usr/include/linux/stat.h:5, from /usr/include/bits/statx.h:31, from /usr/include/sys/stat.h:465, from…

Continue Readingasm/types.h: No such file or directory 문제 (Yocto pseudo-native)

seccomp-bpf로 리눅스 커널 시스템 콜 화이트리스트 필터링하기

컨테이너 런타임이나 브라우저 샌드박스가 "이 프로세스는 open, socket 같은 시스템 콜을 못 쓰게 막는다"고 할 때, 그 뒤에는 대부분 seccomp-bpf가 있다. Docker나 systemd의 SystemCallFilter=도 결국 libseccomp을 감싼 것일 뿐, 커널이…

Continue Readingseccomp-bpf로 리눅스 커널 시스템 콜 화이트리스트 필터링하기

Python resource 모듈로 프로세스 리소스 제한(RLIMIT) 다루기

파일 디스크립터를 안 닫는 코드 한 줄, 무한 재귀로 메모리를 다 먹는 버그 하나가 서버 프로세스 전체를 멎게 만드는 경우가 있다. 셸의 ulimit 대신, 파이썬 프로세스 내부에서 동적으로 조회하거나 특정…

Continue ReadingPython resource 모듈로 프로세스 리소스 제한(RLIMIT) 다루기

ARM64 NEON 인트린식으로 SIMD 벡터 연산 가속하기

ARM64 서버나 모바일 SoC에서 배열 연산이 많은 코드를 최적화할 때 "컴파일러가 알아서 벡터화해주겠지"라고 믿고 넘어가기 쉽다. 하지만 최적화 레벨이나 포인터 별칭(aliasing) 여부에 따라 auto-vectorization이 조용히 실패하고 스칼라 코드가 그대로 나오는…

Continue ReadingARM64 NEON 인트린식으로 SIMD 벡터 연산 가속하기

Ubuntu journald로 시스템 로그 관리하기

서버에 서비스가 늘어날수록 로그도 /var/log/syslog, 각 서비스별 파일, 커널 dmesg로 흩어지고, 장애가 나면 여러 파일을 시간순으로 짜맞춰야 하는 상황이 생긴다. Ubuntu는 기본적으로 systemd-journald가 커널·서비스·유저 로그를 구조화된 바이너리 포맷 하나로 모아두고…

Continue ReadingUbuntu journald로 시스템 로그 관리하기

flock으로 Bash 스크립트 동시 실행 방지하기

cron 배치가 예상보다 오래 걸려 다음 스케줄과 겹치면, 두 인스턴스가 같은 파일에 동시에 써서 데이터가 꼬이는 사고가 난다. PID 파일로 막는 방식은 프로세스가 비정상 종료되면 파일만 남아 다음 실행을 영영…

Continue Readingflock으로 Bash 스크립트 동시 실행 방지하기