« LM26420をなんとか入手 | トップページ | UIOデバイスドライバを組み込む方法 »

2017.12.04

自分で作ったデバイスドライバをmenuconfigに出す方法

Linuxのデバイスドライバを作り、それをMenuconfigで選べるようにする方法を紹介します。

ZYNQ Linuxのフォルダのdriversフォルダに、いろいろなカテゴリに分けてドライバが存在しています。

ここではdrivers\gpioの中にオリジナルのドライバ「gpio-cosmoz.c」を入れて、それをmenuconfigで有効/無効を切り替えられるようにしてみます。

まず、linux-xlnx/drivers/gpioの中にドライバのファイルを作成し、KConfigを編集します。

Menuconfig1

GPIO_ZYNQとGPIO_ZXの間に自分のドライバのconfig定義を書きます。

書き方は、他のconfig定義に倣って、見よう見まねで書けばよいでしょう。

config GPIO_ZYNQ
	tristate "Xilinx Zynq GPIO support"
	depends on ARCH_ZYNQ || ARCH_ZYNQMP
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to support Xilinx Zynq GPIO controller.

config GPIO_COSMOZ
	tristate "Cosmo-Z AXI Driver"
	help
	  Help yourself!

config GPIO_ZX
	bool "ZTE ZX GPIO support"
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to support the GPIO device on ZTE ZX SoCs.

これで、menuconfigを実行します。

すると、Device Drivers→GPIO Support→Memory Mapped GPIO driversの中に、Zynq GPIOとZTE ZXの間に自分で定義したドライバ(Cosmo-Z AXI)が出来ました。

Menuconfig2

これを有効にすると、Linuxソースディレクトリ(linux-xlinx)のトップにある.configにCONFIG_GPIO_COSMOZが追加されます。

# CONFIG_GPIO_ZEVIO is not set
CONFIG_GPIO_ZYNQ=y
CONFIG_GPIO_COSMOZ=y
# CONFIG_GPIO_ZX is not set

また、drivers/gpio/Makefileには

obj-$(CONFIG_GPIO_XTENSA)	+= gpio-xtensa.o
obj-$(CONFIG_GPIO_ZEVIO)	+= gpio-zevio.o
obj-$(CONFIG_GPIO_ZYNQ)		+= gpio-zynq.o
obj-$(CONFIG_GPIO_COSMOZ)	+= gpio-cosmoz.o
obj-$(CONFIG_GPIO_ZX)		+= gpio-zx.o
obj-$(CONFIG_GPIO_LOONGSON1)	+= gpio-loongson1.o

を追加しておきます。

これでMakeを行うと、.configによってCONFIG_ドライバ名のマクロが有効になって、gpio-cosmoz.cがコンパイルされ、gpio-cosmoz.oとなってカーネルに追加されます。

つまり、やり方としては

  1. ドライバのソースファイル(.c)を用意する。
  2. 適当なドライバソースのディレクトリに入れる
  3. そのディレクトリのKConfigを見て、見よう見まねでconfig追加する
  4. そのディレクトリのMakeファイルに、ソースファイルの.cを.oに変えたものを登録する
というわけです。

|

« LM26420をなんとか入手 | トップページ | UIOデバイスドライバを組み込む方法 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« LM26420をなんとか入手 | トップページ | UIOデバイスドライバを組み込む方法 »