LoginSignup
1
0

More than 1 year has passed since last update.

nRF Connect SDK:Kconfig

Posted at

Kconfigってなんだ?

nRF Connect SDKを触り始めてしばらく経ちますが、Kconfigというものの存在がよく分かっていませんでした。中身を見てみるとprj.confで定義されているシンボルが記述されているのをよく見かけるわけですが
「はて、それだったら直接prj.confに書けばいいじゃん。なんでわざわざ別のKconfigとかいうのに書くわけ???」
とずっと思っていました。

ていうかKconfigってナニモノ?

確かに上記の理解は間違いではないのですが、厳密には正解というわけでもありません。標準で用意されているKconfigオプションというのは

ここで検索することはできますが、ここで検索できるオプションというのも全てKconfigで定義されたものです。具体的な例を見てみると、CONFIG_BT_SMPは以下の場所にあるKconfigで定義されています。
image.png

つまり

因果関係は逆であり、Kconfigで定義されているからprj.confで使うことができるという流れになります。
ということは・・・。

プロジェクト独自のオプションを定義できる

Kconfigが存在する最大の理由はこれです。いわゆるカスタムプロパティを定義することができます。標準で添付されているサンプルだとperipheral_uartなどでその記述を見ることができます。

#
# Copyright (c) 2018 Nordic Semiconductor
#
# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
#

source "Kconfig.zephyr"

menu "Nordic UART BLE GATT service sample"

config BT_NUS_THREAD_STACK_SIZE
	int "Thread stack size"
	default 1024
	help
	  Stack size used in each of the two threads

config BT_NUS_UART_BUFFER_SIZE
	int "UART payload buffer element size"
	default 40
	help
	  Size of the payload buffer in each RX and TX FIFO element

config BT_NUS_SECURITY_ENABLED
	bool "Enable security"
	default y
	select BT_SMP
	help
	  "Enable BLE security for the UART service"

config BT_NUS_UART_DEV
	string "UART device name"
	default "UART_0"
	help
	  Name of the used UART device. The sample uses uart0 by default.
	  The UART device should not be used as logger backend.

config BT_NUS_UART_RX_WAIT_TIME
	int "Timeout for UART RX complete event"
	default 50
	help
	  Wait for RX complete event time in milliseconds

config BT_NUS_UART_ASYNC_ADAPTER
	bool "Enable UART async adapter"
	select SERIAL_SUPPORT_ASYNC
	help
	  Enables asynchronous adapter for UART drives that supports only
	  IRQ interface.

endmenu

これらのうちのいくつかはmain.cにも出てくるんですよね。例えばこのあたりとかです。

main.c
BT_CONN_CB_DEFINE(conn_callbacks) = {
	.connected    = connected,
	.disconnected = disconnected,
#ifdef CONFIG_BT_NUS_SECURITY_ENABLED
	.security_changed = security_changed,
#endif
};

ここで「はて、CONFIG_BT_NUS_SECURITY_ENABLEDってなんだっけか?」と思ってKconfigサイトで調べてみると・・・。
image.png
ヒットしないのです。
ふぁーーーーー?どういうことなの?なんでコンパイルエラーにならないの?って思いますよね。実はこのオプションは自身のプロジェクト内のKconfigで定義されているオプションであり、このプロジェクトにしか存在しないものなのです。

なぜこんなものがあるのか?

そうは言ったって別に自分が使うだけのものならそんなもんイラナイじゃん、というのは実際その通りです(笑)。ですので、まだ完全には理解できていないというのが正直なところです。
分かり次第、追記しようと思います。(色々とあっちこっち調べているので時間はかかりますが)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0