저는 Linux 커널용 모듈을 작성 중입니다. 이 모듈이 준비되면 커널을 실행하는 모든 장치에서 실행되기를 원합니다.
안드로이드 폰에서 어떻게 테스트하나요? 테스트하려면 전화기의 전체 트리를 모듈로 다시 컴파일해야 합니까? 그렇다면 어떻게 해야 합니까? insmod
안드로이드 용도 있나요 ?
답변1
예, 물론 Android는 그렇습니다. insmod
Android는 일반 Linux 커널을 기반으로 하기 때문입니다. 이 질문에 대한 대답은 다른 Linux 커널과 동일합니다.
그리고 다른 크로스 컴파일 상황과 마찬가지로 장치의 커널 소스 및 커널 옵션과 올바른 시스템 아키텍처에 따라 모듈을 컴파일해야 합니다. 이는 장치, 제조업체, ROM 등에 따라 크게 다릅니다.
장치, 커널 버전, ROM 또는 개발 환경에 대한 세부 정보를 제공하지 않았기 때문에 "어떻게 해야 합니까?"라는 질문에 답할 수 없습니다.
당신이 올바른 길을 가고 있는지 진지하게 질문하고 싶습니다. 단순히 모듈을 작성하고 "모든 장치에서 실행"할 수는 없습니다. 모듈은 커널 버전과 아키텍처에 따라 다릅니다. 대부분의 장치는 잠겨 있으므로 커널은 물론 루트 파일 시스템에도 액세스할 수 없습니다. 이와 같은 것을 배포한다는 것은 일반적으로 자신의 장치별 ROM에 번들로 묶는 것을 의미합니다.
커널 모듈을 작성해야 하는 유일한 이유는 특정 하드웨어 기능을 지원하기 위한 경우가 많습니다. 이 경우 이 질문은 잘못된 방향에서 시작하는 것처럼 보입니다. 또 다른 가능성은 당신이 사악한 행동을 하고 싶고 리눅스가 일반적으로 허용하지 않는 일을 하고 싶어한다는 것입니다. 그러지 마세요.
답변2
Android와 다른 Linux 플랫폼 간에는 근본적인 차이가 없습니다. 모듈을 빌드하려면 커널 헤더 파일과 커널 컴파일 중에 생성된 일부 파일이 필요합니다. 이러한 파일은 커널 구성에 따라 다릅니다. 일반적인 Linux 배포판에는 이러한 커널 헤더 파일과 기타 파일이 포함된 패키지가 함께 제공되어 사용자 정의 모듈을 더 쉽게 만들 수 있습니다. 나는 Android NDK가 커널 헤더와 함께 제공되지 않는다고 생각합니다. (네이티브 애플리케이션을 작성하는 사람들의 수에 비해 커널 모듈을 만드는 사람들은 거의 없으며, 어쨌든 그들 중 상당수는 자체 시스템 이미지를 만드는 하드웨어 제조업체입니다.)
그러니 얻으세요안드로이드 소스 코드, 구체적으로커널트리( kernel/common
). 대상 장치에 대한 커널 구성을 얻으세요. 기본 이미지는 에서 구성을 제공하며 /proc/config.gz
를 통해 얻을 수 있습니다 adb shell 'gzip -d </proc/config.gz'
.
소스 트리와 구성 파일이 있으면 일반적인 연습을 따르십시오. 즉, 구성 파일을 .config
커널 트리 에 복사하고 make oldconfig
및 를 실행한 make modules_prepare
다음 make M=/path/to/your/module/tree
모듈을 빌드하십시오. 이것Linux 커널 모듈 프로그래밍 가이드그리고리눅스 장치 드라이버커널 빌드 시스템은 좋은 참고 자료입니다.Documentation/kbuild/modules.txt
.
대상 장치에 모듈이 활성화되어 있지 않은 경우( CONFIG_MODULES
구성 파일에서) 모듈을 사용하여 커널을 다시 빌드하고 시스템 이미지에 복사해야 합니다.
에뮬레이터의 Android 이미지는 매우 기본적인 모듈 유틸리티인 , 및 와 함께 제공되지만 insmod
매개 lsmod
변수 rmmod
를 insmod
지정할 수 있는 방법은 없습니다. 이것이 문제라면,바쁜 상자(다른 용도로도 유용합니다). 시장에서 구할 수도 있고 소스에서 컴파일할 수도 있습니다.
Android 커널 및 모듈 컴파일에 대한 많은 튜토리얼이 있습니다. 다음은 몇 가지입니다. 방금 훑어본 것이므로 품질을 보장할 수 없습니다.