Skip to content

Kbuild

  • Published on
    커널을 직접 빌드해 본 사람과 그렇지 않은 사람 사이에는 넘기 힘든 선이 하나 있습니다. 이 글은 그 선을 넘는 절차를 처음부터 끝까지 정리합니다. defconfig와 menuconfig와 localmodconfig가 각각 무엇을 해 주는지, .config 파일이 실제로 무엇을 통제하는지, 디버그 심볼이 빌드 시간과 디스크를 어떻게 잡아먹는지, 그리고 병렬 빌드 옵션이 어디서 한계에 부딪히는지를 공식 문서 기준으로 다룹니다. 설치 부분에서는 지금 돌아가는 커널을 지우지 않고 그 옆에 새 커널을 얹어 언제든 되돌아올 수 있게 만드는 방법을 LOCALVERSION과 부트로더 관점에서 설명합니다. 그리고 이 글에서 가장 강조하고 싶은 것, 커널 실험을 왜 QEMU 가상 머신 안에서 해야 하는지를 다룹니다. 부팅되지 않는 커널은 부팅되지 않는 컴퓨터이고, 이것이 VM 단계가 선택 사항이 아닌 이유입니다.
  • Published on
    앞의 네 편이 남의 코드를 읽는 일이었다면 이 글부터는 커널 안에서 실행되는 코드를 직접 씁니다. 로드되기만 하는 가장 작은 모듈을 먼저 만들고, 그것이 왜 그 형태여야 하는지를 module_init과 MODULE_LICENSE의 실제 정의를 열어 확인합니다. 트리 밖에서 모듈을 빌드하는 Makefile은 커널 공식 문서의 예제를 그대로 따라가고, insmod와 rmmod와 modinfo와 lsmod가 각각 무엇을 보는지 정리합니다. printk의 로그 레벨 여덟 단계와 pr_ 계열 매크로, 그리고 pr_fmt로 접두사를 붙이는 관용구를 다루고, 모듈 파라미터를 sysfs에 노출하는 방법까지 이어집니다. 마지막 세 절은 정직한 경고입니다. 표준 C 라이브러리도 부동소수점도 없고, 널 포인터 접근은 세그멘테이션 폴트가 아니라 시스템 정지이며, GPL로 표시하지 않은 모듈은 커널 심볼의 상당수에 아예 링크할 수 없습니다.