문제

그것은 컴파일 리눅스 커널(2.6)모듈을 포함하는 정의된 기능이 아닌 커널에 포함되어 있는?

예를 들어:


kernelmodule.h

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>   // printk()
// ...
#include <openssl/sha.h>
// ...

Makefile

obj-m := kernelmodule.o
all:
    $(MAKE) -C /lib/modules/`uname -r`/build M=`pwd` modules

clean:
    $(MAKE) -C /lib/modules/`uname -r`/build M=`pwd` clean
    $(RM) Module.markers modules.order

커널 모듈을 작성하고 컴파일하는 기능이 포함되어 있습니에서 찾을 수 openssl 을 포함한 파일이 있습니다.

표준 makefile 을 위에서 제시 허용하지 않을 포함한 외부의 리눅스의 헤더가 있습니다.그것은 가능한 이 기능을 포함하고,그렇다면,당신이 수십시오점에서 저를 오른쪽 방향입니다.

감사합니다, 마

도움이 되었습니까?

해결책

커널은 사용자 공간 코드를 사용할 수 없으며 혼자 독립해야합니다 (즉, 라이브러리가 완전히 포함되어 있어야 함) 표준 헤더를 선택하지 않습니다.

사용자 공간 헤더를 픽업하려는 이점이 분명하지 않습니다. 거기에 사용하는 것이 유효한 것이 있다면 (상수, 일부 매크로가 사용자 공간 함수를 호출하지 않으면 아마도 일부 매크로가 아마도 그것들을 복제하고 필요한 커널 호환 부품 만 포함하는 것이 더 나을 수 있습니다.

커널의 링크 환경을 선택할 수 없기 때문에 사용자 공간 사용을 위해 설계된 라이브러리와 커널을 사용자 공간 사용을 위해 설계된 라이브러리와 연결할 수 없습니다.

대신, 커널에서 사용할 함수를 다시 컴파일합니다 (OS 또는 라이브러리 호출을하지 않는다고 가정합니다. 커널 모듈에 사용할 자신의 라이브러리에 통합하십시오.


최근의 Linux 버전에는 다양한 SHA 해시를 포함하여 암호화 기능이 포함되어 있습니다. 아마도 그 중 하나를 대신 사용할 수 있습니다.


또 다른 아이디어는 커널 공간에서 암호화를하지 않고 코드를 사용자 공간으로 옮기는 것입니다. 사용자 공간 코드는 쓰기 / 디버그 / 유지 등이 더 쉽습니다.

다른 팁

나는 조금의 사용자 코드가 작성 및 변환하는 작업에서 커널 공간(즉사용 kmalloc(),등),그것은 어렵지 않다.그러나,당신은 당신에 국한된 커널 이해의 C,사용자는 약간 다릅니다..특히 다양한 표준 int 형식입니다.

그냥 연결에 대한 사용자 공간에 DSO 가능하지 않은—리눅스 커널은 모놀리식,완전히 모든 것이 포함되어 있기도 합니다.그것은 사용하지 않는 사용자 공간 libc,도서관이나 다른 비트로 다른 사람에 주목했다.

9/10 번,당신이 무엇을 찾아야 할 어딘가 습니다.그것은 매우 가능성이 다른 사람의 필요를 썼고,어떤 정적 기능에 어떤 모듈이 무엇을 원하는..그냥 사람들을 잡아 다시는 그들을 사용한다.

의 경우에 암호화,다른 사람으로 말했듯이,단지 사용에 무엇이 있습니다.주의 할 점은,당신은 그들이 필요하에서 사용할 수 있 필요하지만 컴파일러는 필요하지 않지 않을 수도 있습니다 또는 일이 무엇인지에 따라 사용자가 선택할 때는 건물니다.그래서에 대한 조심,종속성을 명시해야 할 수 있습니다 해킹 몇 가지 항목에서는 필요하지만 컴파일러는 필요하지 않는 또한 선택의 암호화 API 할 때 당신의 모듈을 선택합니다.하이 될 수 있는 약간의 고통 때는 건물의 나무입니다.

그래서 한편으로 우리는"그냥 복사하고 이름을 바꾸는 물건을 추가하는 동안 전반적인 블로에,"당신이"사람에게 해야 합니다 그들은 전체 커널 소스".그것은 하나의 단점으로 오는 모놀리식 커널이다.

으로 마이크로 커널,거의 모든 것을 실행에 사용자 공간,아무 걱정을 연결하여 DSO 를 위해 어떤 드라이버...그것은 아닌 문제입니다.십시오지 않는 문 큐로를 다시 시작하는 커널 디자인 철학에 댓글,지 않는 범위에서 이 질문입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top