2012-07-29 13 views
16

Opracowałem sterownik urządzenia Linux. W tej chwili kompiluję go na Ubuntu 12.04 z kompilatorem cross-arm na ramię, a następnie insmoding go na moim ramieniu obrazu Linux. Ale chcę się nauczyć, jak dodać go do kodu źródłowego Linuksa i dać i opcję dodania/usunięcia przez konfigurację ramienia Linuxa, aby móc skompilować go z kompilacją kodu źródłowego Linuksa?Dodawanie nowego kodu sterownika do kodu źródłowego linux

Wszelkie pomysły?

Odpowiedz

3

Utwórz poprawkę i dodaj stosowanie tej poprawki jako kroku po dekompresji archiwum jądra i przed skonfigurowaniem/kompilacją.

6

Musisz dodać opcję config do pliku Kconfig w podkatalogu źródła jądra, w którym zostanie zainstalowany sterownik twojego urządzenia. Musisz również dodać linie do Makefile tego katalogu. Oczywiście musisz również skopiować pliki źródłowe do tego katalogu.

Ponieważ kierowca zależy na architekturze ARM, w KConfig, trzeba położyć opcję „zależy” jak:

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

a Makefile będzie wyglądać

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

Teraz, kiedy robisz make menuconfig w drzewie źródeł jądra, znajdziesz opcję konfiguracji, którą umieścisz w Kconfig i będziesz mógł wybrać, aby była ona skompilowana do jądra lub zbudowana jako moduł lub w ogóle nieskompilowana.

Poszukaj przykładów w katalogu podsystemów, do którego przeznaczony jest twój sterownik.

+0

Dziękuję za odpowiedź. Rozgryzłem to i zrobiłem to samo, o czym wspomniałeś. Ale teraz jest nowy problem. Kiedy kompiluję mój kod sterownika jako moduł i robię insmod w jądrze Linuxa, widzę, jak moje urządzenie jest tworzone w/dev /. Ale kiedy umieszczam swój kod w drzewie jądra i kompiluję jądro, nie widzę swojego urządzenia w/dev. Zwróć uwagę, że używam class_create() i device_create(), aby utworzyć węzeł urządzenia. Dodałem również mój kod do drzewa jądra w taki sam sposób, jak podano powyżej. – Ravi

+0

Czy ustawiłeś sterownik, który ma być wbudowany, tj. Podświetl sterownik i naciśnij "Y", tak aby był poprzedzony gwiazdką w następujący sposób: [*] – microMolvi

35

Aby skompilować własny sterownik w architekturze ramienia, należy wykonać kilka kroków opisanych poniżej.

  1. Utwórz katalog jak my_drvr wewnątrz sterowników (co jest w kodzie źródłowym Linux) dla kierowcy i umieścić sterownik (my_driver.c) plik w tym katalogu. Będzie wygląda /linux_source_code/drivers/my_drvr/my_driver.c

  2. Załóż Makefile wewnątrz katalogu kierowcy (za pomocą dowolnego edytora vi) i wewnątrz tego umieścić obj-$(CONFIG_MY_DRIVER) += my_driver.o i zapisać ten plik.Będzie to wygląda jak /linux_source_code/drivers/my_drvr/Makefile

  3. Załóż Kconfig plik wewnątrz katalogu kierowcy (za pomocą vi dowolnym edytorze) i wewnątrz tego umieścić

    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. zapisać ten plik, będzie to wygląda jak /linux_source_code/drivers/my_drvr/Kconfig

  5. Dodaj oba pliki: Makefile i Kconfig w plikach sterowników Linuksowych o numerze Makefile i Kconfig o numerach: /linux_source_code/drivers/Makefile i /linux_source_code/drivers/Kconfig

  6. w Makefile dodać poniżej w ostatnim wierszu

     obj-y += my_drvr/

    lub

     obj-$(CONFIG_MY_DRIVER) += my_drvr/
  7. W pliku KConfig dodać poniżej w ostatnim wierszu

    source "drivers/my_drvr/Kconfig"
  8. koniec trzeba dodać Kconfig plik do architektury s zczególn plik konfiguracyjny, który będzie na kernel_source/arch/arm/configs/--defconfig w ten dodatek poniżej linii w ostatnim

    CONFIG_MY_DRIVER=y

Uwaga: - Ostatni etap będzie się różnić w zależności od architektury, tak że trzeba dbać. Teraz możesz skompilować sterownik za pomocą polecenia make. (np .: sun7i_defconfig)

+1

doskonała. dokładne i zwięzłe. Dziękuję Ci. –

Powiązane problemy