저는 Buildroot를 사용하여 임베디드 Linux를 컴파일하고 있습니다. 대상 Makefile을 구성했기 때문에 제대로 작동하지만 이제 USB 장치용 드라이버가 필요합니다. 나는 buildroots를 사용하여 Linux를 대상으로 호스트 Linux에서 Qt appilactions(c++)를 컴파일했습니다 /output/host/usr/bin/arm-none-linux-gnueabi-c++
. 좋은 결과.
이제 c 파일을 컴파일하려고합니다.이 드라이버.
나는 그것을 이렇게 부른다:
/output/host/usr/bin/arm-none-linux-gnueabi-gcc -Wall -D__KERNEL__ -DMODULE -I/home/buildroot-2012.08/output/build/linux-2.6.35.3/include -DMODVERSIONS -include /home/buildroot-2012.08/output/build/linux-2.6.35.3/include/config/modversions.h -I /home/buildroot-2012.08/output/build/linux-2.6.35.3/drivers/usb/serial/ -O -c -o ftdi_sio.o ftdi_sio.c
오류가 발생합니다.
출력 /build/linux-2.6.35.3/include/linux/linkage.h:5: 치명적인 오류: asm/linkage.h: 해당 파일 또는 디렉터리가 없습니다.
- 드라이버 컴파일을 어떻게 구성해야 합니까?
- 대상 Linux에서 이 작업을 수행할 수 있는 다른 방법이 있습니까? 어쩌면 내가 이 일을 제대로 하고 있지 않을 수도 있습니다.
답변1
asm/
대상 아키텍처에 대한 심볼릭 링크입니다. 존재하지 않는 경우 커널 빌드 디렉터리에 일부 대상이 누락된 것일 수 있습니다 configure
(존재하지 않는 경우 module_headers
수행할 수 있음).
명령줄, 사용자 정의 Makefile 또는 Buildroot 패키지(사용 중인 Buildroot 버전)를 사용하고 있는지 질문에서 명확하지 않습니다.
명령줄에서 커널 모듈( 버전 2.4까지, 2.6부터 시작하는 커널 모듈의 확장 ) .o
대신 C 객체를 빌드하고 있습니다..o
.ko
커널 모듈 빌드, 빌드 및 로그의 자세한 정도를 높이는지 확실하지 않은 경우 동일한 플래그를 사용하십시오.
커널에는 자신만의 방식이 있습니다빌딩 블록그리고 Buildroot는 패키지와 관련하여 최선의 방법은 아마도 모듈을 빌드하기 위한 새 패키지를 생성하는 것입니다(그리고 모듈을 빌드하는 데 사용할 다른 패키지가 이미 있는지 확인).
이 예조금 오래되었지만 도움이 될 수도 있습니다.
편집하다
모듈이 ftdi_sio.ko
디렉토리에 생성됩니다./lib/modules/$(uname -r)/kernel/drivers/usb/serial/
builtin
.ko
그러나 기호를 생성하거나 확인 하지 않도록 구성할 수도 있습니다.USB_SERIAL_FTDI_SIO당신의구성y
( 내장 모듈 이어야 함 m
)
/proc
내장되었거나 플러그인된 경우 런타임 대상에 다음과 같은 인터페이스가 있어야 합니다.ftdi_sio, 그것을 찾아라.