ARM_core 기반 리눅스 BSP 개발/Raspberry_PI Kernel build

[Raspberry_PI]_env_환경 변수

juniha 2025. 6. 17. 20:20

목적  : 환경변수는 프로그램이 실행되는 동안에 필요한 매개변수를 전달하는 목적으로 사용된다.

전체 진행 과정

 

1
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig
cs

 

환경변수는 프로그램이 실행되는 동안에 필요한 매개변수를 전달하는 목적으로 사용된다.

 

위의 명령에서는 ARCH와 CROSS_COMPILE 두가지의 환경변수를 선언한다.

ARCH=arm, CROSS_COMPILE=arm-linux-gnueabihf-라고 정의한다.

이런 방식의 환경변수 선언은 1회에 한정하여 반영됩니다. 즉, 한번의 make동작에서만 반영된다.

 

쉘의 창이 열려있는 동안에 지속적으로 반영하려면 아래와 같이 입력한다.

 

1
2
3
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
make bcm2709_defconfig
cs

 

 

위의 명령에서는 export를 사용하여 쉘 자체에 기억되도록 선언하였기 때문에 환경변수의 지정 없이 사용이 가능하다.

 

이미 선언된 환경변수의 목록을 확인 하려면 env명령을 수행한다.

 

echo $ARCH # 현재 환경 변수 ARCH의 값을 출력 (ARCH 변수의 값이 무엇인지 화면에 표시) unset ARCH # ARCH라는 환경 변수를 제거 (환경 변수 ARCH를 삭제하여 이후 $ARCH는 빈 값이 됨)

 

사용 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>   // 표준 입출력 함수 (printf 등) 사용을 위한 헤더
#include <stdlib.h>  // getenv 함수 사용을 위한 헤더
 
int main() {
    // ARCH라는 환경 변수의 값을 가져옴
    // arch가 NULL이면 해당 환경 변수가 설정되지 않은 것
    const char* arch = getenv("ARCH");
 
    if (arch)  // arch가 NULL이 아닐 경우 (환경 변수 ARCH가 존재)
        printf("Architecture (from env): %s\n", arch);  // ARCH 값 출력
    else       // arch가 NULL일 경우 (환경 변수 ARCH가 존재하지 않음)
        printf("ARCH environment variable is not set.\n");  // ARCH가 없다는 메시지 출력
 
    return 0;  // 프로그램 정상 종료
}
cs

 

동작 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
./params
//  params 프로그램 실행
//  ARCH 환경 변수가 설정되지 않았기 때문에
ARCH environment variable is not set.
// 출력된다.
 
export ARCH=hello
// 현재 셸의 환경 변수 ARCH를 hello로 설정된다.
// 이 설정은 현재 셸과 이 셸에서 실행되는 모든 하위 프로세스(예: ./params)에 적용된다.
 
ARCH=haha ./params
// ARCH를 haha로 지정한 상태로 params를 실행 (임시 설정, 해당 명령에서만 유효)
// params가 읽은 ARCH 값은 haha
 
Architecture (from env): haha
// 이 ARCH=haha 설정은 ./params 실행에만 적용되고 셸의 ARCH=hello에는 영향을 주지 않는다.
 
./params
// 다시 params 실행된다. (이제는 export한 ARCH=hello 값이 적용됨)
 
Architecture (from env): hello
// 출력을 확인할 수 있다.
cs

 

동작 결과