Makefile에서의 Kernel Version 처리 방법에 대한 질문 입니다.

hyper9의 이미지

안녕하세요 ~

지금 생각난 질문은요 ..

예를 들어,,Makefile에서 현재 compile을 수행할 System의 Version에
따라 다른 절차를 정해놓고 싶을때요 ..

예를 들어..Kernel Version이 2.6.4 인 경우, 2.6.24, 2.6.40 인 경우가
있다고 하고요..

그 중에서 2.6.24 이후엔 Compile절차를 B type으로 진행하고 싶고
2.6.24 이전엔 Compile절차를 A type으로 진행하고 싶을때 ,,

이러한 Kernel Version을 일종의 숫자의 크기 비교와 같은 방법으로
비교해서 특정 Version이후면 이렇게, 특정 Version이전이면 저렇게,,
하고 싶거든요..

Source 상에서는 #define KERNEL_VERSION(a, b, c) (((a) << 16) + ((b) << 8) + (c))
를 쓰면 비슷한 효과를 얻을 수 있을 것 같은데요..

Makefile에서는 어떻게 처리를 하는지 여쭤보고 싶습니다..~
그럼...부탁드립니다..

hyper9의 이미지

에 대한 질문이기도 한거네요 ..

아직 답을 못찾고 있는 중입니다.. ㅜㅜ
GMAKE에 이런 기능이있을까요??

muninn의 이미지

제가 참여했던 프로젝트에서는 build system에 따라 .mk를 따로 include하도록 만들었습니다.
unmame을 통해서 os, version, processor 정보를 가지고 와서 제가 필요한 부분만 짤라서 string을 만들고선 string.mk를 include 했죠.

BUILD_OS := $(shell uname -s)
BUILD_PROCESSOR := $(shell uname -m)
BUILD_OS_VERSION := $(shell uname -r) | ~~ 대충 cut으로 잘라주시고
BUILD_SYSTEM := $(BUILD_OS)-$(BUILD_OS_VERSION_)-$(BUILD_PROCESSOR)

include $(BUILD_SYSTEM).mk

대략 위와 같이 했습니다. 원하시는 답은 아니지만 혹 참고가 되지 않을까 해서 적었습니다.

bushi의 이미지

VERSION
PATCHLEVEL
SUBLEVEL
KERNELRELEASE
KERNELVERSION

kbuild 시에 export 되는 환경변수들입니다.

MOTHER=$(shell expr $(VERSION) \* 16 + $(PATCHLEVEL) \* 8 + $(SUBLEVEL))

비스무리하게 될 것 같은데요 ?

OTL

hyper9의 이미지

많은 도움이 되었습니다..

이제 숫자의 크기 비교를 Makefile에서
할 수 있는지만 알 수 있으면 다 끝날 것 같네요..

혹시 이것도 알려주시려고 하다가 빠뜨리신건 아닌지.. ^^
그럼..다시 부탁드리겠습니다..

bushi의 이미지

그간 기회가 없어서 크게 신경을 쓰지 않았는데,
전에 했던 것을 새로 구조를 바꿔서 해보려고 시도하던 와중에 2.6.28 부터 bdev API 가 약간 바뀌었다는 것을 알게됐습니다.
마침, 가지고 있는 BSP 커널 소스가 2.6.27 과 2.6.29 라 어쩔 수 없이
2.6.28 의 아래 버전인지 아닌지 판별해서 선택적으로.

...상략...
 
condcheck_lt = test $(1)0 -lt $(2)0 && echo yes
kvercal_cmd = expr $(1)0 / 10 \* 65536 + $(2)0 / 10 \* 256 + $(3)0 / 10
 
KVER_THIS = $(shell $(call kvercal_cmd, $(VERSION), $(PATCHLEVEL), $(SUBLEVEL)))
KVER_NEWBDEV = $(shell $(call kvercal_cmd, 2, 6, 28))
 
ifeq ($(shell $(call condcheck_lt, $(KVER_THIS), $(KVER_NEWBDEV))), yes)
        BDEV = old
else
        BDEV = new
endif
 
...중략...
 
obj-m := cnftl.o
 
cnftl-y := cnftl_core.o cnftl_bdev_$(BDEV).o
 
...하략...

OTL

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.