나는 리눅스 장치 드라이버를 개발했다. 현재 우분투 12.04에서 크로스 컴파일러로 팔을 컴파일하고 내 팔 리눅스 이미지에서 insmoding하고 있습니다. 하지만 나는 리눅스 소스 코드에 추가 할 수있는 방법을 배우고 팔 리눅스 구성을 추가/제거 할 수있는 옵션을 제공하여 리눅스 소스 코드 컴파일로 컴파일 할 수 있도록하고 싶습니다.리눅스 소스 코드에 새로운 드라이버 코드 추가
아이디어가 있으십니까?
나는 리눅스 장치 드라이버를 개발했다. 현재 우분투 12.04에서 크로스 컴파일러로 팔을 컴파일하고 내 팔 리눅스 이미지에서 insmoding하고 있습니다. 하지만 나는 리눅스 소스 코드에 추가 할 수있는 방법을 배우고 팔 리눅스 구성을 추가/제거 할 수있는 옵션을 제공하여 리눅스 소스 코드 컴파일로 컴파일 할 수 있도록하고 싶습니다.리눅스 소스 코드에 새로운 드라이버 코드 추가
아이디어가 있으십니까?
패치를 작성하고 커널 타볼의 압축을 풀고 구성/컴파일하기 전에이 패치 적용을 단계로 추가하십시오.
장치 드라이버를 설치할 커널 원본 하위 디렉터리의 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 옵션을 찾을 수 있습니다.이 옵션을 선택하여 커널에 컴파일하거나 모듈로 컴파일하거나 컴파일하지 않을 수 있습니다.
드라이버가 의미하는 하위 디렉토리에서 예제를 찾으십시오.
팔 아키텍처에서 자신의 드라이버를 크로스 컴파일하려면 아래에 설명 된 것처럼 몇 가지 단계를 따라야합니다.
/linux_source_code/drivers/my_drvr/my_driver.c
이 드라이버 디렉토리 안에 하나의 Makefile을 만들기 것처럼 것이다 (VI 어떤 편집기를 사용하여)이이 obj-$(CONFIG_MY_DRIVER) += my_driver.o
을 넣고이 파일을 저장 내부 보인다.이 뜻은 (VI 어떤 편집기를 사용하여) 드라이버 디렉토리 안에 하나 개 Kconfig
파일을 만듭니다 /linux_source_code/drivers/my_drvr/Makefile
처럼 나타납니다이 내부
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.
저장이 파일을 넣어,이 뜻이 /linux_source_code/drivers/my_drvr/Kconfig
처럼 나타납니다 Linux 소스 드라이버 Makefile
및 Kconfig
파일에 Makefile
및 Kconfig
파일을 모두 추가하십시오 (/linux_source_code/drivers/Makefile
및). 메이크는
obj-y += my_drvr/
또는 kconfig를 파일에서
obj-$(CONFIG_MY_DRIVER) += my_drvr/
가 마지막 줄에 아래 추가
source "drivers/my_drvr/Kconfig"
마지막으로 추가 할 필요가 마지막 줄에 아래의 추가에
615,Kconfig
파일을 아키텍처로 가져 오기 이에 kernel_source/arch/arm/configs/--defconfig
에있을 것입니다 pecific 설정 파일 참고
CONFIG_MY_DRIVER=y
마지막
에 선 아래 추가 : - 당신이 알아서 가질 수 있도록 마지막 단계는 아키텍처에 따라 달라집니다. 이제 make 명령을 사용하여 드라이버를 컴파일 할 수 있습니다. (예 : sun7i_defconfig)이라는 별표가 붙도록하십시오. 정확하고 간결합니다. 고맙습니다. –
답장을 보내 주셔서 감사합니다. 나는 그것을 알아 냈고 당신이 언급 한 것과 똑같은 행동을했습니다. 그러나 이제는 새로운 문제가 있습니다. 드라이버 코드를 모듈로 컴파일하고 리눅스 커널에서 insmod를 할 때/dev/아래에 장치가 생성되는 것을 볼 수 있습니다. 하지만 커널 트리에 코드를 넣고 커널을 컴파일 할 때/dev에 장치가 보이지 않습니다. Class_create() 및 device_create()를 사용하여 장치 노드를 작성합니다. 또한 위에서 설명한 것처럼 커널 트리에 내 코드를 추가했습니다. – Ravi
드라이버를 내장하도록 설정 했습니까? 즉, 드라이버를 강조 표시하고 'Y'를 눌러 접두사 앞에 [*] – microMolvi