Bullshitting Blog

개소리하는 블로그

QEMU VM 생성 삽질기

Tags = [ kernel ]

Rust 커널 서적을 따라가면서 커널을 빌드해서 qemu로 실행시키기 위한 과정을 밟고 있었다. 그리고 busybox 위에서 그걸 돌리도록 되어 있었음. 그래서 busybox 최신 릴리즈(1.37.0)에서 make menuconfig 실행하는데, ncurses가 없다고 설치하라고 자꾸 떴다. 대충 그 방향키로 뚝딱거릴 수 있도록 GUI스럽게 만들어둔 터미널 기반 환경을 사용하기 위해 필요하다고 함. 근데, 문제는 그 패키지 이미 설치 다 되어 있다는 것이다. 그리고 이미 리눅스 커널 빌드하기 전에 똑같이 make menuconfig 이용 잘 했었음.

그럼 그 환경 대신 일반 cli 환경을 이용하는 방법이 있다. make config 하면 되는데, 그렇게 해봐도 실제로 qemu로 실행해보면 아무 것도 안뜨고 멈춰 있었다. 그래서 처음엔 qemu 해결하려고 이런저런 해결책들을 반영하면서 삽질을 했다.

ChatGPT 선생에게 보고를 했고, linux-api-headers, base-devel 다 재설치 해도 해결이 안됨. 그랬더니 선생도 귀찮은지, “아 소스 까봐! scripts/kconfig/lxdislog/check-lxdialog.sh 이거임. 대충 거기서 에러 왜 뱉는지 찾아보셈” 이런 식의 답변을 함. 정말 들어가서 봤더니, 문제되는 부분이 있었다.

그리고 이제 ChatGPT 선생이 이제 시니어를 해먹기 시작한 듯 하다. “아 그 저 여기에 거기 그 뭐 있을텐데 봐보셈”. 방식의 답변이다. 대충 바이브인데 정확하기까지 하다.

image.png

C언어 메인함수에 반환형 타입도 명시 안하고 쓰는 신박한 모습이다. 저 부분 int 추가해주니 해결됨. 그래서 git repo 최신에도 저게 저렇게 들어가 있는지 확인해보니, 이미 작년에 고쳐놨다. “릴리즈 주기가 이렇게 느리다고?” 싶다. 사실 부럽다. 우린 고객사의 “해-줘” 한 마디에, 해가 중천에서 “아 피곤한데 집에 갈까?” 하는 오후 3시에, 갑자기 새 일에 착수해서 다른 일 다 제쳐두고 일주일동안 그 짓만 하는데 말이다. 그에 반해 이 busybox는 최신 릴리즈인 1.37.0은 작년 9월, 저 부분이 고쳐진건 작년 10월이다. 그리고 지금까지 릴리즈가 안된 것이다. busybox라는 이름과 대비된다.

여튼 그럼 해결 됐을까? 아니다.

그럼 실제로 문제 원인은 뭐였냐고? 기대해도 좋다.

콘솔을 ttyS0 로 이용해야 하는데 tty50 으로 계속 쓰고 있었다. 심지어 “왜 굳이 50이지? 다른 특별한 숫자도 아닌?” 하면서 그냥 50을 입력하고 넘어감. 그래서 쉘에 아무 것도 출력이 안된 것이었다.

이게 디버깅의 묘미다. 돌고 돌아 오타 한 글자를 찾는 행위가 바로 디버깅이다.