elsa in mac

Asahi Linux, DP Alt Mode를 지원하는 Kernel branch "Fairydust" 공개, kernel 빌드 방법 및 적용 결과 본문

Linux/Asahi Linux

Asahi Linux, DP Alt Mode를 지원하는 Kernel branch "Fairydust" 공개, kernel 빌드 방법 및 적용 결과

elsa in mac 2025. 12. 31. 13:15

본 포스트는 Asahi Fedora Remix를 기반으로 작성되었습니다. 

2025년 12월 30일, 39C3에서 Asahi Team의 개발 멤버인 svan이 Asahi Linux - Porting Linux to Apple Silicon이라는 주제로 발표가 있었습니다. (이전 포스트 참고)

그리고, DP alt-mode(DisplayPort alternative mode)가 적용된 kernel source 코드가 공개되었습니다. 아직은 개발자 버전 소스코드라고 할 수 있겠죠.. 코드명은 Fairydust 입니다.  작명 센스가 돋보입니다. 

일단 결론적으로 해당 소스코드를 받은 후, 빌드하여 적용해 봤는데요.. USB-C 포트와 연결된 모니터가 잘 작동합니다. 아래는 결과입니다. 

Kernel 버전은 6.18.2+ 로 표시가 됩니다. 

결론적으로 6.18.x 정식 버전이 릴리즈 되면, 거의 100% USB-C 포트를 통한 외부 모니터를 연결하여 사용할 수 있을 것으로 보입니다. MacBook에서 Asahi Linux를 사용하는 사용자들에게는 정말 반가운 소식이 아닐 수 없습니다. 

아래는 해당 kernel을 빌드하고 설치하여 사용하는 과정을 정리한 것입니다.

단, 아래의 절차에 따라 kernel을 빌드하고 사용하시기 전에 알아 두어야 할 점은 아직은 DP alt-mode를 사용할 수 있다는 수준이지, 일반 사용자들이 편리하게 사용할 수준은 아닙니다.  예를 들어, 부팅을 하면 화면이 들어오지 않습니다. 모니터에서 HDMI로 변경한 후(혹은 모니터를 껐다가 다시 켬), 다시 USB-C로 변경해야 비로소 화면이 들어옵니다.  이런 불편한 점이 있다는 점을 감안하고 검토하시기 바랍니다. 

따라서, Kernel을 수정, 빌드, 설치에 경험이 없는 사용자라면 직접 해당 kernel을 빌드하고 사용하는 것이 대단히 위험할 수 있습니다. 단지 참고 사항으로만 보시기를 추천합니다.  

 

Kernel 빌드 절차

우선, 필자는 M1 mac mini (2020 late, 8GB/256GB)의 기본 모델을 사용하고 있습니다.  아마 Asahi Linux를 사용할 수 있는 mac 중에 가장 기본 모델이라고 해도 무방할 것입니다. 

일단, kernel을 빌드하여 사용하려면, 사용할 수 있는 여유 저장공간이 10GB 이상 남아 있어야 합니다. 소스코드 자체가 크고, 빌드과정에서 생성되는 object 파일 등의 중간 산출물이 거의 많기 때문입니다. 필자의 경우에는 Asahi Linux에 할당된 내부 저정공간은 60GB 이기 때문에, 대부분의 큰 작업은 외장 SSD(512GB)에서 합니다.  Memory는 8GB 이상이어야 하며, 필자처럼 8GB 메모리라면 반드시 swap을 사용해야 합니다. 

Kernel을 빌드하고 적용해 본 경험이 없는 사용자라면, 이 과정이 꽤나 어려울 수 있습니다.  진행과정에 대한 스샷이나 결과가 본인이 사용하는 mac에 따라 조금씩 상이할 수도 있다는 점을 유념하여 보시기 바랍니다. 

우선, 빌드 환경은 kernel 6.17.12-400 하에서 진행했습니다.  

그럼, 빌드 절차를 하나하나 알아봅니다. 

우선, kernel 빌드에 필요한 의존성 패키지들을 설치해야 합니다. 

sudo dnf groupinstall "Development Tools"
sudo dnf install git ncurses-devel flex bison openssl-devel elfutils-libelf-devel
sudo dnf install rust rust-src bindgen-cli clang llvm

asahi linux의 GPU 드라이버는 Rust로 작성되어 있기 때문에, rust 관련 패키지들도 설치가 되어 있어야 합니다. 

패키지가 다 설치되었다면, 이제 fairydust kernel source를 받아야 합니다. 

# 기본 소스코드 clone 
ggit clone -b fairydust --single-branch --depth 1 https://github.com/AsahiLinux/linux.git

# 소스코드 root로 이동
cd linux

다음으로 현재 사용 중인 kernel의 config 파일을 복사해야 합니다. 

# 6.17.12-400 kernel의 config를 .config로 복사
cp /boot/config-6.17.12-400.asahi.fc43.aarch64+16k .config

.config로 복사가 되었다면, 이제 asahi linux를 위해 권장되는 config option을 반영해야 합니다.  이 정보는 arch/arm64/configs/asahi.config 에 있습니다. 이 정보를 복사한 .config에 반영해 줘야 합니다. 

# asahi.config 정보를 .config에 반영
scripts/kconfig/merge_config.sh -m .config arch/arm64/configs/asahi.config

다음으로  make menuconfig를 실행하여 Asahi Linux관련 GPU driver의 활성 여부를 확인합니다.  

# menuconfig 실행 
make menuconfig

터미널에서 make menuconfig 를 실행한 장면

General setup -> Rust support 를 선택해 줍니다. 해당 라인에서 space키를 누르면 [ ] 가 [*] 로 바뀌게 됩니다. 그럼 선택이 된 것이죠.  변경을 완료했으면, tab키를 눌러 선택바가 Save에 가게 한 다음 Enter키를 눌러 .config에 저장합니다.  참고로, 만일 rust와 관련된 빌드 패키지가 설치되어 있지 않다면 해당 옵션은 보이지 않습니다. 당연히 Rust로 작성된 Driver들도 옵션에서 보이지 않게 됩니다. 

save 를 선택한 경우의 스샷

저장을 했으면, <Exit> 를 선택하여 이전 화면으로 나갑니다. 그리고, 초기 메뉴에서 Device Drivers ---> Graphics support ---> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) ---> Asahi (DRM support for Apple AGX GPUs) 의 옵션을 [ ] 에서 [ * ] 로 변경해 줍니다.  [ ] 에서 space를 한번 누르면 [M]으로 바뀌고 다시 space를 누르면 [*] 로 바뀌게 됩니다. 

역시 <Save>를 선택하여 .config에 저장을 해 줍니다.  이제 <Exit> 를 연속으로 선택하여, menuconfig를 완전히 종료해 줍니다. 

다음으로 아래와 같이 빌드 옵션을 disable 하고 업데이트된 .config를 이용하여 빌드 설정을 업데이트합니다. 

# Debug 관련 기능을 off 
scripts/config --disable DEBUG_INFO 

# BTF(BPF Type Format) 생성하지 않음. 
scripts/config --disable CONFIG_DEBUG_INFO_BTF

# SBAT(Secure Boot) 관련 ZBOOT 비활성화 
scripts/config --disable CONFIG_EFI_ZBOOT


# 설정을 적용
make olddefconfig

 

make olddefconfig를 실행하면, 대략 아래와 같은 결과가 출력되게 됩니다. 몇 가지 warning이 나오지만 그냥 무시합니다. (아래 정보는 실제와 일부 상이할 수 있음.)

> make olddefconfig
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/confdata.o
HOSTCC scripts/kconfig/expr.o
LEX scripts/kconfig/lexer.lex.c
YACC scripts/kconfig/parser.tab.[ch]
HOSTCC scripts/kconfig/lexer.lex.o
HOSTCC scripts/kconfig/menu.o
HOSTCC scripts/kconfig/parser.tab.o
HOSTCC scripts/kconfig/preprocess.o
HOSTCC scripts/kconfig/symbol.o
HOSTCC scripts/kconfig/util.o
HOSTLD scripts/kconfig/conf
.config:10053:warning: symbol value 'm' invalid for HYPERV
.config:13022:warning: symbol value 'm' invalid for CRYPTO_LIB_CURVE25519_GENERIC
.config:13028:warning: symbol value 'm' invalid for CRYPTO_LIB_POLY1305_GENERIC
#
# configuration written to .config
#

이제 kernel 및 kernel module을 빌드합니다.

make -j8

팔자의 m1 mac-mini는 총 8개의 CPU core가 있으므로, -j8을 사용했습니다. 사용하는 mac의 Core수가 다를 수 있으니 확인 후 적절한 core 수로 정의해 주면 됩니다. 

kernel의 소스와 관련된 kernel modules들이 굉장히 많기 때문에 대략 40분 ~ 1시간 정도의 시간이 소요됩니다. 정상적으로 빌드가 완료되었다면.. 

정상적으로 빌드가 되었는지 확인

위의 스샷처럼 arch/arm64/boot 디렉터리 안에 Image와 Image.gz 파일이 생성된 것을 확인할 수 있습니다. 

빌드가 잘 되었다면, 이제 설치를 해야 합니다. 

설치는 빌드와 마찬가지로 linux (소스의 root) 디렉터리에서 합니다. 

# kernel 모듈 설치 
sudo make INSTALL_MOD_STRIP=1 modules_install

kernel 모듈은 디버깅 심벌을 제거하기 위해 STRIP 옵션을 주어 위와 같은 명령으로 실행합니다. 결과는 

스샷처럼 /lib/modules/ 디렉터리 밑에 6.18.2+ 라는 디렉터리가 생성되어 있고 그 안에 빌드한 kernel modules들이 포함되어 있는지를 확인하면 됩니다. 용량은 디버깅 심벌을 제거했으므로 대략 200 ~ 400MB 정도가 될 것입니다. (참고로 디버깅 심벌을 제거하지 않고 설치하면 6GB가 넘는 어머어마한 용량이 됩니다.)

 다음으로 DTB(Device Tree)를 설치해야 합니다. 새로운 Kernel에는 기존 Kernel에는 없었던 Device 항목들이 추가되었을 수 있기 때문에, 커널이 H/W를 인식하기 위한 DTB 파일이 반드시 필요합니다. 

# DTB 설치
sudo make dtbs_install INSTALL_DTBS_PATH=/usr/lib/modules/6.18.2+/dtb

자 이제 마자믹으로 kernel 이미지를 설치합니다. 

sudo make install

sudo make install을 실행하며, 관련 스크립트가 자동으로 /boot 디렉터리 내에 Kernel image를 복사하고, initramfs를 생성하며, GRUB 메뉴를 업데이트하여 새 kernel 항목을 추가하게 됩니다. 

sudo make install이 완료된 후의  /boot 디렉터리 내부 구성은 아래와 같습니다. 

dtb는 /lib/modules/6.18.2+/dtb 디렉터리로 연결되며, initramfs-6.18.2+.img 가 생성되어 있는 것을 알 수 있습니다. symver 이나 system.map 은 필수요소는 아닙니다. vmlinuz-6.18.2+는 kernel 이미지입니다. 추가되었지요. 

다음으로, GRUB에 추가되었는지를 확인해 봅니다. 

제일 상단에 Fedora Linux Asahi Remix (6.18.2+) 43 (Forty Three) 가 추가된 것을 확인할 수 있고, sudo grubby --default-kernel 명령을 사용하면, 현재 설정된 기본 부팅 kernel이 어떤 것인지를 확인할 수 있습니다. 

원래는 기본 부팅 항목을 6.18.2+로 변경해야 하지만, 만일을 대비하여 일단 기본 부팅 항목은 기존의 6.17.12로 남겨 둡니다. 

나중에 모든 검증이 끝나고 그대로 사용할 수 있겠다는 확신이 든다면.. default kernel을 변경하면 됩니다. 

# default kernel 변경 
sudo grubby --set-default /boot/vmlinuz-6.18.2+

이것으로 fairydust kernel의 빌드 및 설치는 모두 끝난 것입니다. 

이제, rebooting을 해서 kernel 6.18.2+로 부팅을 해 보면 됩니다. 

부팅을 해 보니, GRUB 메뉴에서 위의 스샷과 같이 6.18.2+가 표시되는 것을 알 수 있습니다. 해당 kernel을 선택하여 부팅을 해 줍니다. 

유의사항

먼저, 아직 U-boot 나 GRUB 선택 상태에서는 USB-C 모니터를 지원하지 않습니다. 아직은 kernel에서만 지원을 하기 때문에 kernel 부팅이 완료되는 시점에서 USB-C 모니터에 화면이 표시됩니다. 따라서, kernel이 정상적으로 동작하는 것을 확인했다면.. GRUB default kernel을 6.18.2+로 변경하는 것을 추천합니다. 

믈론, default kernel로 변경을 하더라도 글 도입부에서 언급했듯이, HDMI로 한번 변경한 후에 다시 USB-C로 변경하거나 kernel 부팅이 완전히 완료된 시점 이후에 모니터 전원을 Off -> On 해야 화면이 들어 오는 수준입니다. 필자는 모니터가 한 대 밖에 없기 때문에 HDMI + USB-C 로 듀얼 모니터 환경을 테스트 하지는 못했습니다. 이 경우에는 또 어떤 문제가 있을지 확인이 안되어 있다는 점도 고려해야 하며, MacBook 등 기타 다른 m1/m2 mac에서는 어떤 결과가 나올지도 확인이 되지 않았습니다. 

필자의 경우에는 wayland compositor를 직접 만들어서 사용하고 있는데, 

보는 바와 같이 /dev/dri 에 card0, card2, renderD128 장치가 있는 것을 알 수 있습니다. 기존 6.17에서는 card1, card2, renderD128 이였죠. 따라서, 사용하시는 WM 환경 설정에서 이 부분과 관련된 설정이 있다면, 이 설정을 변경해야 한다는 점도 살펴야 합니다. 장치명도 기존에는 USB-C로 연결할 경우 DP-1 으로 표시됩니다. 특정 설정에서 HDMI-A-1 등으로 설정된 것들이 있었다면, 이들 설정도 모두 DP-1으로 변경해야 정상적으로 동작한다는 점도 고려해야 합니다. 

위의 스샷은 wayland compositor 실행 시의 debug log 인데요, 보면, HDMI-A-1 과 DP-1 두 개가 detection 되는 것을 알 수 있습니다. 기존 kernel에서는 HDMI-A-1 1개만 확인 되었었습니다. 

- - - - -

그래도, 예상과는 달리 공개된 source가 꽤나 안정적이고, 여타 다른 부분에는 별 문제가 없다는 점이 인상적이였고, 6.18 정식 버전이 릴리즈 되면, USB-C 를 통한 외부 모니터 연결 사용에는 별 문제가 없을 것 같다는 생각입니다. 

사실 2025년 올 해 기대했던 업데이트는 아니였는데, 극적으로 2025년 마지막날 이렇게 기대감을 체우게 되었네요. 굉징히 기쁘고, Asahi team 의 노고에 감사의 맘을 전하고 싶군요.. 

공유하기 링크
Comments