2012-07-29 2 views
16

나는 리눅스 장치 드라이버를 개발했다. 현재 우분투 12.04에서 크로스 컴파일러로 팔을 컴파일하고 내 팔 리눅스 이미지에서 insmoding하고 있습니다. 하지만 나는 리눅스 소스 코드에 추가 할 수있는 방법을 배우고 팔 리눅스 구성을 추가/제거 할 수있는 옵션을 제공하여 리눅스 소스 코드 컴파일로 컴파일 할 수 있도록하고 싶습니다.리눅스 소스 코드에 새로운 드라이버 코드 추가

아이디어가 있으십니까?

답변

3

패치를 작성하고 커널 타볼의 압축을 풀고 구성/컴파일하기 전에이 패치 적용을 단계로 추가하십시오.

6

장치 드라이버를 설치할 커널 원본 하위 디렉터리의 Kconfig 파일에 config 옵션을 추가해야합니다. 또한 해당 디렉토리의 Makefile에 행을 추가해야합니다. 분명히 그 디렉토리에 소스 파일도 복사해야합니다.

드라이버는 ARM 아키텍처에 의존하기 때문에, kconfig를, 당신은의 옵션을 둘 필요가처럼 '에 따라'

config SND_ARMAACI 
tristate "ARM PrimeCell PL041 AC Link support" 
depends on ARM_AMBA 

과 메이크

obj-$(CONFIG_SND_ARMAACI) += snd-aaci.o 
snd-aaci-objs  := aaci.o 

모양을 이제 커널 소스 트리에서 make menuconfig를 실행하면 Kconfig에 넣은 config 옵션을 찾을 수 있습니다.이 옵션을 선택하여 커널에 컴파일하거나 모듈로 컴파일하거나 컴파일하지 않을 수 있습니다.

드라이버가 의미하는 하위 디렉토리에서 예제를 찾으십시오.

+0

답장을 보내 주셔서 감사합니다. 나는 그것을 알아 냈고 당신이 언급 한 것과 똑같은 행동을했습니다. 그러나 이제는 새로운 문제가 있습니다. 드라이버 코드를 모듈로 컴파일하고 리눅스 커널에서 insmod를 할 때/dev/아래에 장치가 생성되는 것을 볼 수 있습니다. 하지만 커널 트리에 코드를 넣고 커널을 컴파일 할 때/dev에 장치가 보이지 않습니다. Class_create() 및 device_create()를 사용하여 장치 노드를 작성합니다. 또한 위에서 설명한 것처럼 커널 트리에 내 코드를 추가했습니다. – Ravi

+0

드라이버를 내장하도록 설정 했습니까? 즉, 드라이버를 강조 표시하고 'Y'를 눌러 접두사 앞에 [*] – microMolvi

35

팔 아키텍처에서 자신의 드라이버를 크로스 컴파일하려면 아래에 설명 된 것처럼 몇 가지 단계를 따라야합니다.

  1. 은 드라이버 (리눅스 소스 코드에) my_drvr 내부 드라이버와 같은 디렉토리를 만들고 드라이버 (my_driver.c)이 디렉토리 안에 파일을 넣어. /linux_source_code/drivers/my_drvr/my_driver.c

  2. 이 드라이버 디렉토리 안에 하나의 Makefile을 만들기 것처럼 것이다 (VI 어떤 편집기를 사용하여)이이 obj-$(CONFIG_MY_DRIVER) += my_driver.o 을 넣고이 파일을 저장 내부 보인다.이 뜻은 (VI 어떤 편집기를 사용하여) 드라이버 디렉토리 안에 하나 개 Kconfig 파일을 만듭니다 /linux_source_code/drivers/my_drvr/Makefile

  3. 처럼 나타납니다이 내부

    config MY_DRIVER 
    tristate "my driver" //gives your driver description like vendor name etc. 
    depends on ARM 
    default y if ARM 
    help 
        my driver module.
  4. 저장이 파일을 넣어,이 뜻이 /linux_source_code/drivers/my_drvr/Kconfig

  5. 처럼 나타납니다 Linux 소스 드라이버 MakefileKconfig 파일에 MakefileKconfig 파일을 모두 추가하십시오 (/linux_source_code/drivers/Makefile 및). 메이크는

     obj-y += my_drvr/

    또는 kconfig를 파일에서

     obj-$(CONFIG_MY_DRIVER) += my_drvr/
  6. 가 마지막 줄에 아래 추가

    source "drivers/my_drvr/Kconfig"
  7. 마지막으로 추가 할 필요가 마지막 줄에 아래의 추가에

  8. 615,Kconfig 파일을 아키텍처로 가져 오기 이에 kernel_source/arch/arm/configs/--defconfig에있을 것입니다 pecific 설정 파일 참고

    CONFIG_MY_DRIVER=y

마지막

에 선 아래 추가 : - 당신이 알아서 가질 수 있도록 마지막 단계는 아키텍처에 따라 달라집니다. 이제 make 명령을 사용하여 드라이버를 컴파일 할 수 있습니다. (예 : sun7i_defconfig)

+1

이라는 별표가 붙도록하십시오. 정확하고 간결합니다. 고맙습니다. –

관련 문제