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

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

 

 

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

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

Update : 2026.01.27
- fairydust 가 6.18.7+ 로 업데이트 되었습니다. 아래 글 내용에서 버전이 불일치 하는 부분들은 참고 하시기 바랍니다. (6.18.4+ 가 사용되는 부분들은 6.18.7+로  대신 사용해야 합니다.)

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

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

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

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

단, 아래의 절차에 따라 kernel을 빌드하고 사용하시기 전에 알아 두어야 할 점은 아직은 DP alt-mode를 사용할 수 있다는 수준이지, 일반 사용자들이 편리하게 사용할 수준은 아닙니다.  예를 들어, 부팅을 하면 화면이 들어오지 않습니다. 모니터를 껐다가 다시 켜야지만 화면이 들어 옵니다.(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 
git 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를 누르면 [*] 로 바뀌게 됩니다.

다음으로, Asialinux Document의 kernel config 설명에 의하면,  NVME_APPLE과 SPI_HID_APPLE_OF 항목은 안정성을 위해 kernel에 내장하는 것이 좋다고 권고하고 있습니다. 이를 위한 설정은 다음과 같습니다. 

우선, NVME_APPLE을 설정하기 위해서는 Device Drivers --> SOC (System On Chip) specific Drivers --> Apple SoC drivers --> Apple SART DMA address filter의 옵션을 * 로 변경합니다.  그리고, 이어서 Device Drivers --> NVME Support --> Apple ANS2 NVM Express host driver의 옵션을 역시 *로 변경합니다. 

다음으로, Device Drivers --> HID bus support --> SPI HID support --> HID over SPI transport layer for Apple Silicon SoCs 의 옵션을 역시 *로 변경합니다. 

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

위의 옵션을 굳이 .config 파일에서 수정하지 않고, make menuconfig를 이용하여 수정하는 이유는  * 즉, kernel  built-in 으로 변경할 때,  해당 옵션의 Depends on 항목들의 조건이 함께 부합해야 하기 때문입니다.  이 조건들이 맞지 않을 경우에는 .config에 해당 항목을  =y 로 변경한들 실제적으로는 변경이 되지 않은 것과 마찬가지 입니다. 이러한 이유로 make 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

#
# configuration written to .config
#

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

make -j8

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

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

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

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

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

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

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

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

스샷처럼 /lib/modules/ 디렉터리 밑에 6.18.4+ 라는 디렉터리가 생성되어 있고 그 안에 빌드한 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.4+/dtb

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

sudo make install

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

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

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

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

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

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

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

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

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

이제, rebooting을 해서 kernel 6.18.4+로 부팅을 해 보면 됩니다. (아래 스샷은 fairydust 6.18.2+ 일때의 스샷임)

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

 

유의사항

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

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

mac mini 의 경우 두 개의 USB-C 포트가 있습니다. 하나에 모니터를 연결하고, 다른 나머지 한 포트에 USB-C hub 를 연결하고, 이 USB-C hub에 키보드와 마우스를 연결해서 사용하고 있는데, 부팅 중에 USB-C hub가 연결이 끊기는 경우도 있습니다. 이 때는 우선 USB-C 모니터를 사용 가능한 상태로 만든 후,  USB-C hub 를 뺐다가 다시 연결하니 정상 동작했습니다.

또한, dp-alt mode 와 관련된 commit의 내용을 확인해 보면, USB-C 외부 모니터를 연결할 USB-C 포트가 mac 모델마다 정해져 있는 것 같습니다.  아래를 참고 하시기 바랍니다. 

DP alt mode for Mac Mini M2 Pro
--------------------------------
the blessed port is the back right middle port 
(second closest USB-C port to the power connector).


DP alt mode for Mac Studio
--------------------------
the blessed port is the back left middle port
(second closest USB-C port to the power connector).


Blessed dp-altmode port is front left port on j314/j316/j414/j416.


Enable DP alt mode for the front left USB-C port of Macbook Air 13 
(M2,13/15-inch) and Macbook Pro (M2, 13-inch).
Can't easily enabled on the M2 Mac Mini since dcpext is used for the
HDMI port and dcp bringup is troublesome.


Enable DP alt mode for all M1 devices:
-------------------------------------
Mac Mini (M1): USB-C port next to the HDMI port
Macbook Pro (M1, 13-inch): front left USB-C port
Macbook Air (M1, 13-inch): front left USB-C port
iMac (M1, 2 USB-C ports): back left USB-C port
iMac (M1, 4 USB-C ports): back right middle USB-C port

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

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

update : 2026.01.10 
- fairydust가 6.18.4로 업데이트 되면서, /dev/dri 가 card0, card2, renderD128 에서 card1, card2, renderD128로 변경됨.

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

- - - - -

그래도, 예상과는 달리 공개된 source가 꽤나 안정적이고, 여타 다른 부분에는 별 문제가 없다는 점이 인상적이지만 6.18 정식 버전이 릴리즈 되더라도 이 기능이 포함될지의 여부는 아직 미지수 입니다. 

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

공유하기 링크
Comments