프로그래밍/리눅스 커널

리눅스 Device Tree aliases 기준 정리

포도알77 2026. 7. 6. 17:26

리눅스 Device Tree aliases 기준 정리

/aliases 노드는 Device Tree에서 긴 경로를 짧은 이름으로 참조할 수 있게 만드는 루트 노드다. 2026년 7월 6일 기준 Devicetree Specification stable 문서는 alias가 루트의 /aliases 아래에 정의되며, 각 속성값은 실제 노드의 전체 경로 문자열이라고 설명한다.

실무에서 헷갈리는 지점은 세 가지다. aliases는 노드를 새로 만드는 기능이 아니고, label이나 phandle의 대체도 아니며, Linux에서는 모든 참조가 자동으로 alias만 쓰이도록 강제되지도 않는다. 이 글은 /aliases의 의미, 이름 규칙, /chosen/stdout-path와의 관계, Linux 커널에서 확인할 기준만 간단히 정리한다.

/aliases는 무엇을 담을까?

Devicetree Specification에 따르면 /aliases는 루트에 놓이는 선택적 노드다. 각 속성의 이름이 alias 이름이고, 값은 Device Tree 안의 특정 노드를 가리키는 전체 경로 문자열이다. 값은 리프 노드만 가리켜야 하는 것은 아니며, 경로로 해석 가능한 노드라면 대상이 될 수 있다.

/ {
    aliases {
        serial0 = "/soc/serial@fe000000";
        ethernet0 = "/soc/ethernet@ff0e0000";
    };
};

핵심은 alias가 "짧은 이름에서 전체 경로로 가는 매핑"이라는 점이다. 실제 하드웨어 속성은 여전히 대상 노드에 있어야 하고, alias에는 주소나 interrupt 같은 장치 정보 자체를 넣지 않는다.

이름은 어떻게 정해야 할까?

Devicetree Specification stable 문서는 alias 이름을 소문자 1자 이상 31자 이하로 제한하고, 허용 문자를 소문자 a-z, 숫자 0-9, 하이픈 -으로 규정한다. 따라서 대문자, 밑줄, 공백이 들어간 이름은 표준 형식과 맞지 않는다.

문서 예시는 serial0, ethernet0 같은 형태를 사용한다. 실무에서도 기능군과 번호를 조합한 짧은 이름이 가장 읽기 쉽다. 다만 번호가 곧 Linux의 모든 장치 번호를 보장한다고 일반화하면 안 된다. alias는 경로를 줄이는 수단이지, 모든 사용자 공간 이름 규칙을 단독으로 정의하는 메커니즘은 아니다.

label, phandle와는 무엇이 다를까?

항목 주 용도 무난한 이해 방식
/aliases 짧은 이름에서 전체 경로를 가리키는 문자열 매핑 경로 별칭
DTS label 소스 안에서 노드를 읽기 쉽게 이름 붙이기 작성 편의용 식별자
phandle 속성 값 안에서 다른 노드를 참조하기 구조화된 노드 참조

label은 DTS 작성 단계에서 &uart0처럼 참조하기 쉽게 만드는 표기이고, phandle은 컴파일된 트리 안에서 노드 간 연결을 표현하는 표준 속성이다. 반면 /aliases는 경로 문자열을 줄이는 용도라서 성격이 다르다. 같은 노드에 label, phandle, alias가 모두 존재할 수 있지만 서로 대체 관계는 아니다.

Linux는 alias를 어디서 쓸까?

Linux kernel 문서의 DeviceTree Kernel API를 보면 of_find_node_opts_by_path()는 인자로 받은 문자열이 /로 시작하지 않으면 /aliases 노드의 속성 이름으로 해석할 수 있다고 설명한다. 문서상 유효한 형태는 전체 경로, alias 단독, alias 뒤에 상대 경로를 붙인 형태다.

즉 Linux에서는 alias가 단순한 문서 관례가 아니라, 커널 코드가 실제로 해석할 수 있는 경로 축약 수단이다. 다만 모든 커널 인터페이스가 alias 문자열만 받는 것은 아니다. 어떤 바인딩이나 속성은 여전히 phandle 기반 참조를 요구하므로, alias를 "모든 참조의 공통 포맷"으로 이해하면 범위를 넘는다.

/chosen/stdout-path와는 왜 같이 언급될까?

Devicetree Specification stable 문서는 /chosen/stdout-path가 부트 콘솔 출력 장치를 가리키는 문자열이며, 이 값은 alias일 수 있다고 명시한다. 또한 값에 :가 들어가면 그 앞부분까지만 경로로 본다고 설명한다.

그래서 아래처럼 전체 경로 대신 serial0:115200n8 같은 형식이 가능하다. 이때 경로 해석의 첫 단계는 serial0 alias를 실제 노드 경로로 바꾸는 것이다.

/ {
    aliases {
        serial0 = "/soc/serial@fe000000";
    };

    chosen {
        stdout-path = "serial0:115200n8";
    };
};

본문 중간 기준 한 번에 정리

질문 무난한 기준 이유
alias를 꼭 만들어야 할까? 필수는 아니지만, 반복해서 참조할 경로가 있으면 만드는 편이 낫다 /aliases는 선택적 노드다
아무 이름이나 써도 될까? 소문자, 숫자, 하이픈만 쓰고 31자 이내로 유지한다 스펙이 이름 형식을 제한한다
label 대신 alias만 써도 될까? 그렇지 않다 작성 편의용 식별자와 경로 별칭은 역할이 다르다
phandle 대신 alias를 속성 값에 넣어도 될까? 바인딩이 요구하는 참조 형식을 먼저 본다 많은 구조화된 참조는 여전히 phandle 기반이다
부트 콘솔 지정에 alias를 써도 될까? 가능하다 stdout-path 값은 alias일 수 있다고 문서에 적혀 있다

자주 놓치는 점

Linux kernel의 "Linux and the Devicetree" 문서는 /aliases, /chosen, /memory를 정보성 노드로 설명한다. 즉 /aliases는 장치를 하나 더 기술하는 곳이 아니라, 다른 노드를 읽기 쉽게 가리키는 보조 정보다.

또 하나는 alias 값이 전체 경로 문자열이라는 점이다. DTS 안에서 자주 보이는 &label 표기는 사람이 쓰는 소스 문법이고, /aliases의 값 형식과는 다르다. alias 값에 label 참조를 그대로 넣는 예시를 표준 규칙으로 이해하면 혼동이 생긴다.

자주 헷갈리는 질문

Q. alias는 루트가 아닌 하위 노드에 두어도 될까?

권장 수준이 아니라 스펙상 위치가 정해져 있다. Devicetree Specification은 alias 노드가 루트에 있어야 하고 노드 이름도 /aliases여야 한다고 설명한다.

Q. alias 값은 노드 이름만 적어도 될까?

그보다 더 구체적이어야 한다. 스펙은 alias 값이 Device Tree 안의 전체 경로를 나타내는 문자열이라고 설명한다. 필요하면 그 뒤에 상대 경로를 붙여 Linux API에서 해석할 수는 있지만, alias 정의 자체는 대상 경로를 분명히 적는 편이 맞다.

Q. alias를 만들면 해당 장치가 자동으로 활성화될까?

그렇지 않다. alias는 경로를 짧게 부르는 정보일 뿐이며, 장치 활성화 여부는 대상 노드의 status, 바인딩, 드라이버 동작 같은 다른 조건이 결정한다.

정리

/aliases는 Device Tree에서 긴 노드 경로를 짧고 일관된 이름으로 줄여 주는 보조 노드다. 표준 기준으로는 루트에 놓고, 소문자·숫자·하이픈만 사용하며, 값에는 실제 노드의 전체 경로 문자열을 넣는다.

2026년 7월 6일 기준 공개 문서만 놓고 보면, alias는 특히 stdout-path 같은 문자열 기반 경로 참조에서 실용적이다. 반면 노드 간 구조화된 연결까지 대신하는 도구는 아니므로, labelphandle의 역할은 그대로 분리해서 이해하는 편이 안전하다.

참고 자료

반응형
페이스북으로 공유카카오톡으로 공유카카오스토리로 공유트위터로 공유URL 복사