2014. 2. 26. 20:58 devel/code
kcompat.h - linux kernel version
별건 아니고 e1000e driver 예전꺼를 최신 커널에서 컴파일 하려니까 오류가 나더라
원인을 찾아보니까 kernel 2.x에서 사용하던 kernel function 중 하나 kmap_atomic, kunmap_atomic 함수의
인자 하나가 없어졌다
요걸 어떻게 인텔에서 처리했나 찾아봤다
e1000e driver 구버전(2.x), e1000e driver 신버전(3.x)
을 보면 kcompat.h 이라는 헤더파일에 커널 버전에 따라서 호환성을 다르게 넣는 코드가 숨어있더라
예를 들면 SLE_VERSION_CODE 같은 녀석들 혹은
#if ( LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0) )
이런식의 코드들로 구분을 하더라
사용된 함수 정의를 undef로 날려버리고 새로 define 함수로 인자 하나를 다른거로 교체하느 방식으로 코드를 작성했다
이게 장점이 뭐냐면 c 파일에서 일일히 kmap_atomic 함수를 호출할 때마다 #if(LINUX_VERSION~~) 이런식으로 작성을 하면 엄청 코드가 난잡해지고 지저분해지는데
헤더파일에 저렇게 해주면 코드 가독성이 많이 증가해서 좋은 것 같다
인텔 형님들, 좋은 팁을 배워갑니다
아래는 다른 예시
'devel > code' 카테고리의 다른 글
쉘 스크립트 배열 (0) | 2014.03.15 |
---|---|
for loop (0) | 2014.03.04 |
문자열 배열 (0) | 2013.07.06 |
c에서 linked list 자료형에 관계 없이 접근하기 (0) | 2013.01.23 |
ntohs 같은 byte order 변경 함수 (0) | 2012.10.24 |