2016-06-22 4 views
1

시나리오 1 : 나는 (실제로, Elrepo에서 kernel-lt) 바닐라 커널 3.10로 RHEL6에 IBMGPFS 드라이버를 설치하려고 해요. 적절한 기능 검사

  • 구조체의 X를 함수에 전달

    • 너무 많은/너무 적은 인수
    • 유형이 일치하지

    그들의 코드가 잘에 컴파일 그러한 회원에게주지 않습니다으로 인해 GPL 부분은 컴파일되지 않습니다 RHEL/Suse 커널이 이전 버전이거나 새로운 버전이지만 여기서 실패합니다.

    시나리오 2 : I 증권 커널 RHEL6에 오픈 소스 softiwarp 드라이버를 컴파일하기 위해 노력하고있어,하지만, 그러나, 바닐라 커널에 잘 컴파일은 시나리오 1과 같은 오류와 함께 실패합니다.

    #if LINUX_KERNEL_VERSION >= 2061300 
    #define FOO <newer variant> 
    #else 
    #define FOO <older variant> 
    #endif 
    

    을하지만 자신의 3.10.101 바닐라 3.10.101과 동일하지 않도록 RHEL 및 SUSE가 많은 백 포트 및 버그 수정이 그들의 기능 검사 헤더는 다음과 같이 있기 때문에

    이 모든입니다.

    기능을 확인하는 코드를 작성하는 방법은 버전 번호가 아닌입니까? 사용자 공간 프로그램에서 나는 AC_CHECK_MEMBER/AC_CHECK_FUNC

  • 답변

    0

    가 어떻게 기능하지 버전 번호를 확인하는 코드를 작성하는 autoconf를 매크로를 사용해야합니까? 사용자 공간 프로그램에서 나는 autoconf를 매크로 AC_CHECK_MEMBER/AC_CHECK_FUNC

    표준 처리기의 기능을 일부 사람들이 생각하는 것보다 훨씬 저렴합니다을 사용합니다. 그것은 당신이 직접 원하는 것을 할 수있는 능력이 없습니다. Autoconf는 이와 관련하여 마술을 제공하지 않습니다. 컴파일러가 주어진 코드를 받아들이는지 검사하고, 전 처리기 매크로를 정의함으로써 주로 컴파일러에 결과를 전달함으로써 구성 시간에 테스트를 수행합니다. (그리고 예제에서와 비슷한 조건부 테스트에서 필요에 따라 매크로를 사용해야 할 책임이 있습니다.)

    그러나 우리는 Autoconf에 대해 이야기하고 있기 때문에 커널을 만들려면 적어도 일부 Autoconf 매크로가 작동해야하며 다른 사용자를 위해 사용자 정의 Autoconf 테스트를 작성할 수 있어야합니다. 사실, 컴파일러가 빌드 타임에 감지 할 수있는 모든 문제는 Autoconf가 테스트 할 수 있어야합니다.

    물론 모듈 빌더에게 필요한 구성 세부 정보를 명시 적으로 표시 할 수있는 옵션도 있습니다. 예를 들어, 기능 선택 매크로를 조정하여 빌더가 결과를 변조하는 데 사용하도록 예약 된 기호에도주의하십시오.

    +0

    무엇을?! Autotools는 libc 밑에 많이 의존합니다. 스스로 해킹하지 않고 어떻게 커널에서 사용할 수 있습니까? – 0andriy

    +0

    @AndyShevchenko, "gcc"와'make'가 libc에 의존한다고 말할 수 있습니다. 어떻게 커널을 만들 수 있습니까?"실제로 Autoconf는 문제에 관련된 체크가 컴파일러를 통한 테스트에 의존하기 때문에, 내가 말했던 것처럼, 커널 헤더가 올바른 것인지 확인하기 만하면된다 .Autoconf는 많은 수표를 수행하는 방법을 알고있다. 커널 빌드 (예 : 도서관 수표)에 대해서는 이해가되지 않지만, 그것이 의미가있는 수표를 사용할 수 없다는 것을 의미하지는 않습니다. –

    +0

    첫 단락 @JohnBollinger에 대한 나의 무지 추정이 마음에 들지 않지만, 나머지 대답은 말이 되네. 받아 들일거야. – basin