QEMU(arm64) 임베디드 리눅스 타깃 만들기 (6) — 커널 모듈, gdb 원격 디버깅, NFS 루트

4편까지 오면 타깃은 완성됐다. 남은 것은 이 타깃을 실제 개발에 쓰는 방법이다. 실물 보드에서 하던 일 — 드라이버를 고쳐 올리고, 부팅이 이상하면 붙잡아 들여다보고, 빌드 결과를 매번 굽지 않고 바로…

Continue ReadingQEMU(arm64) 임베디드 리눅스 타깃 만들기 (6) — 커널 모듈, gdb 원격 디버깅, NFS 루트

QEMU(arm64) 임베디드 리눅스 타깃 만들기 (5) — Yocto로 타깃 이미지 빌드

1편부터 4편까지는 디스크 이미지를 자르고, U-Boot을 빌드하고, 커널을 컴파일하고, 루트 파일 시스템을 손으로 채웠다. 제품용 타깃이라면 이 과정을 재현 가능하게 자동화해야 하는데, 그 자리에 쓰는 것이 Yocto다. 레시피와 설정 파일에서…

Continue ReadingQEMU(arm64) 임베디드 리눅스 타깃 만들기 (5) — Yocto로 타깃 이미지 빌드

QEMU(arm64) 임베디드 리눅스 타깃 만들기 (4) — 루트 파일 시스템과 패키지 설치

3편에서 커널이 ext4 루트를 마운트하는 데까지 갔지만 그 안이 mkfs 직후 상태라 No working init found로 멈췄다. 이제 그 빈 파티션을 채운다. 두 단계로 간다. 먼저 BusyBox 하나로 셸이 뜨는…

Continue ReadingQEMU(arm64) 임베디드 리눅스 타깃 만들기 (4) — 루트 파일 시스템과 패키지 설치

QEMU(arm64) 임베디드 리눅스 타깃 만들기 (3) — 커널 크로스 컴파일과 부팅

2편까지 오면 타깃에 부트로더가 올라가 디스크에서 파일을 읽어 실행하는 데까지 된다. 이제 그 자리에 올릴 커널이 필요하다. 실물 보드라면 벤더가 준 커널 소스를 받아 크로스 컴파일하고 SD 카드에 복사하는 단계인데,…

Continue ReadingQEMU(arm64) 임베디드 리눅스 타깃 만들기 (3) — 커널 크로스 컴파일과 부팅

QEMU(arm64) 임베디드 리눅스 타깃 만들기 (2) — U-Boot 올리기

1편에서 만든 디스크 이미지는 아직 아무도 읽어주지 않는다. virt 머신에는 x86의 BIOS/UEFI 같은 내장 펌웨어가 없어서, 전원을 넣어도 실행할 코드가 없으면 한 글자도 나오지 않기 때문이다. 실물 보드라면 SoC의 부트…

Continue ReadingQEMU(arm64) 임베디드 리눅스 타깃 만들기 (2) — U-Boot 올리기

QEMU(arm64) 임베디드 리눅스 타깃 만들기 (1) — 타깃 디스크 이미지와 virt 보드 구성

임베디드 리눅스 개발은 보드가 손에 있어야 시작되는 일이 많다. 부트로더를 잘못 덮어써 보드를 못 쓰게 만들거나, SD 카드를 다시 굽느라 시간을 흘려보내거나, 사람 수보다 보드가 적어 순서를 기다리는 상황이 반복된다.…

Continue ReadingQEMU(arm64) 임베디드 리눅스 타깃 만들기 (1) — 타깃 디스크 이미지와 virt 보드 구성

QEMU(arm64)에 라즈베리파이 올리기

라즈베리파이 OS의 설정을 조금 바꿔볼 때마다 SD 카드를 굽고 보드에 꽂고 전원을 넣는 건 느리다. 보드가 아직 손에 없거나, 망가뜨려도 되는 환경이 필요할 때도 있다. QEMU의 raspi3b 머신은 배포된 이미지를…

Continue ReadingQEMU(arm64)에 라즈베리파이 올리기

리눅스 커널의 시스템 콜 처리 경로 — arm64 예외 벡터부터 핸들러까지

x86-64에서는 syscall 명령이 MSR_LSTAR에 적힌 주소로 곧장 점프한다. 시스템 콜 전용 진입점이 레지스터 하나에 박혀 있는 구조다. arm64에는 그런 전용 레지스터가 없다. svc 명령이 만드는 것은 "동기 예외" 하나일 뿐이고,…

Continue Reading리눅스 커널의 시스템 콜 처리 경로 — arm64 예외 벡터부터 핸들러까지

Rust 커널 프로그래밍 가이드 (5) — platform 드라이버로 배우는 모듈의 표준 구조: probe/remove와 디바이스 트리 바인딩

앞선 편들에서 module! 매크로로 init/exit을 가진 모듈을 만들고 misc device까지 붙여봤다. 그런데 실제 하드웨어를 다루는 드라이버는 insmod 시점에 일을 시작하지 않는다. 모듈은 "이런 하드웨어를 담당할 수 있다"고 등록만 해두고, 그…

Continue ReadingRust 커널 프로그래밍 가이드 (5) — platform 드라이버로 배우는 모듈의 표준 구조: probe/remove와 디바이스 트리 바인딩