Makefile 을 살펴보면

  obj-y := audio_device.o

 혹은

  obj-m := audio_device.o

 혹은

  obj-$(CONFIG_TEST) := audio_device.o

 와 같은 형태를 볼 수 있다.

 무슨 차이가 있을까? 

 커널소스 트리에 있는 각종 드라이버들은 모듈로 컴파일 될 수도 있고 커널 이미지에 바로 들어갈 수 도 있다.

 
  obj-$(CONFIG_TEST) := audio_device.o

 
위와 같이 정의하면 make menuconfig 결과에 따라 모듈이나 빌트인으로 알아서 컴파일 된다.

 그럼 빌트인으로 컴파일하라는 명령은?

  obj-y := audio_device.o

 이고

 모듈로 컴파일 하라는 명령은?

  obj-m := audio_device.o 

 이다.  

  간혹 보면 아래와 같이 구성되는 경우도 있다. 


  obj-y := target.o
  target-objs += audio_driver.o
  target-objs += i2s.o
 
이런 무슨 뜻일까? 색을 칠해 보았다. 

  obj-y := target.o
  target-objs += audio_driver.o
  target-objs += i2s.o
 
 풀어서 설명하면,
 
  audio_driver.c 와 i2s.c 를 컴파일한 후 하나로 묶어서
  target.o 를 만들것이고
  target.o 는 빌트인으로 커널 이미지로 들어가게 된다는 뜻이다. 


그럼 이것은?

  obj-m := target.o
  target-objs += audio_driver.o
  target-objs += i2s.o

다 똑같은데 모듈로 만들겠다는 것만 다르다. 

그럼 이것은?
 

  obj-$(CONFIG_TEST) := target.o
  $(CONFIG_TEST)-objs += audio_driver.o
  $(CONFIG_TEST)-objs += i2s.o
 
menuconfig 결과에 따라 모듈로 컴파일 될 수도, 빌트인으로 컴파일 될 수도 있다는 뜻이다.

끝.

 
블로그 이미지

김유석0

,