오탈자인지 여쭤어보고 싶습니다.

31 views
Skip to first unread message

유현우

unread,
Aug 9, 2018, 11:09:45 PM8/9/18
to linux-ke...@googlegroups.com

안녕하세요

최근 리눅스를 처음 알게된 사람입니다.

 

책을 읽는데 조금 어렵지만 나름 열심히 하고 있습니다.

 

궁금한 부분이 있는데요

 

2.1.2부분의 64페이지 코드작성을 보시면

윗단에는 BIG_ENDIAN으로 써주시고 빅 엔디안 코드를 define 하셨는데

 

아랫쪽도 마찬가지인가요?

아랫쪽은 

#ifdef CONFIG_CPU_BIG_ENDIAN

#define CPULE(code...)

#else

#define CPU_LE(code...) code로 되어있구요

 

오탈자가 아니라면 혹시 어떻게 규정되는지 궁금합니다.

 

 

답변 부탁드립니다

 

감사합니다

 

SeokHoon Yoon

unread,
Aug 13, 2018, 7:27:22 AM8/13/18
to linux-ke...@googlegroups.com, zmff...@naver.com
안녕하세요 윤석훈입니다.
먼저 저희 책을 구매하고 읽어주셔서 감사합니다^^

CPU_BE(), CPU_LE()는 특정 엔디안에서만 삽입될 코드를 추가하기 위해 사용하는 매크로입니다.
만약 CONFIG_CPU_BIG_ENDIAN이 정의되어 있다면 CPU_LE()로 감싼 코드는 모두 컴파일타임(pre-processing time)에 제거됩니다.
왜냐하면 정의에 의해 CPU_LE(code...)은 nothing으로 치환되니까요.

한가지 예를 들어서 보면 어떨까요?

아래코드는 big endian(CONFIG_CPU_BIG_ENDIAN이 정의된) 커널에서,

CPU_BE( orr x0, x0, #(1 << 25) ) // x0 |= (1 << 25)
CPU_LE( bic x0, x0, #(1 << 25) ) // x0 &= ~(1 << 25)

다음과 같이 변합니다.
orr x0, x0, #(1 << 25) 

CPU_LE()로 감싸서 추가한 코드가 아예 날라가죠.  

little endian 커널에서는  다음과 같이 다르게 변합니다. 
bic x0, x0, #(1 << 25)  

역시 CPU_BE()로 감싼 코드가 날라갑니다.  

감사합니다.
2018년 8월 10일 (금) 오후 12:09, 유현우 <zmff...@naver.com>님이 작성:
--
이 메일은 Google 그룹스 'Linux Kernel ARM' 그룹에 가입한 분들에게 전송되는 메시지입니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 linux-kernel-a...@googlegroups.com에 이메일을 보내세요.
이 그룹에 게시하려면 linux-ke...@googlegroups.com에 이메일을 보내세요.
https://groups.google.com/group/linux-kernel-arm에서 이 그룹을 방문하세요.
더 많은 옵션을 보려면 https://groups.google.com/d/optout을(를) 방문하세요.
Reply all
Reply to author
Forward
0 new messages