link もっと前
   2020年 2月 8日 -
      2020年 2月 8日  
link もっと後

link 未来から過去へ表示(*)
link 過去から未来へ表示

日々

link permalink

link 編集する

Zephyr OS で遊ぼう その 7 - 独自のシリアルドライバの枠組み

Zephyr のビルドに成功し、gdb で追跡したところ Hello world の main 関数まで到達していることもわかりました。ここまでくればあとは文字出力だけです。

まず Hoge ボードの defconfig に CONFIG_UART_SPIKE=y を加えます。cmake に「そんなコンフィグはない」と怒られるようになりますが、これから作るので OK です。

シリアルドライバの Kconfig, CMake

シリアルドライバのディレクトリは zephyr/drivers/serial にあります。ディレクトリの構造を見ると、CMakeLists.txt, Kconfig.*, ソースコード uart_*.c が並んでいます。この 3つの組を追加もしくは変更すれば良さそうです。

zephyr/drivers/serial/Kconfig.spike

# SPDX-License-Identifier: Apache-2.0

menuconfig UART_SPIKE
        bool "Spike Simulator serial driver"
        depends on SOC_RISCV_SPIKE
        select SERIAL_HAS_DRIVER
        help
          This option enables the Spike Simulator serial driver.

名前は何でも良いですが、Kconfig.spike という名前にしました。Kconfig.soc とは違って、ファイルを足すだけではダメで、シリアルドライバの Kconfig から読んでもらう必要があります。

zephyr/drivers/serial/Kconfig に追加する行

...

source "drivers/serial/Kconfig.litex"

source "drivers/serial/Kconfig.rtt"

source "drivers/serial/Kconfig.xlnx"

source "drivers/serial/Kconfig.spike"    # ★この行を足す★

endif # SERIAL

Kconfig を追加して cmake をするとまだ怒られます。CMakeList.txt も変更する必要があるとのことです。

Kconfig 追加後の cmake
-- Configuring done
CMake Error at ../../cmake/extensions.cmake:372 (add_library):
  No SOURCES given to target: drivers__serial
Call Stack (most recent call first):
  ../../cmake/extensions.cmake:349 (zephyr_library_named)
  ../../drivers/serial/CMakeLists.txt:3 (zephyr_library)


CMake Generate step failed.  Build files cannot be regenerated correctly.
FAILED: build.ninja

CMakeLists.txt は他の行に習って追加します。CMakeLists.txt を変更しただけだと uart_spike.c が無いと言われるので、touch uart_spike.c で空のファイルを作成します。

zephyr/drivers/serial/CMakeLists.txt に追加する行

...

zephyr_library_sources_if_kconfig(uart_liteuart.c)
zephyr_library_sources_ifdef(CONFIG_UART_RTT_DRIVER uart_rtt.c)
zephyr_library_sources_if_kconfig(uart_xlnx_ps.c)
zephyr_library_sources_if_kconfig(uart_spike.c)    # ★この行を足す★

...

他の行に習って追加するだけではつまらないので、CMake のスクリプトも眺めます。今回使用した zephyr_library_sources_if_kconfig() と zephyr_library_sources_ifdef() との違いは、ソースコードのコメントにある説明がわかりやすいです。

ファイル名を大文字にして、CONFIG_ と連結させた名前(今回のケースだと CONFIG_UART_SPIKE)を生成して、コンフィグが有効ならソースコードをビルド対象に加えるという意味です。Kconfig のコンフィグは y, n, m の 3値を取りますが、Zephyr のスクリプトでは、コンフィグが有効だと y という値が入り、無効だと未定義になるようです。

zephyr_library_sources_if_kconfig の実装

# zephyr/cmake/extensions.cmake

...

# zephyr_library_sources_if_kconfig(fft.c)
# is the same as
# zephyr_library_sources_ifdef(CONFIG_FFT fft.c)

...

function(zephyr_library_sources_if_kconfig item)
  get_filename_component(item_basename ${item} NAME_WE)
  string(TOUPPER CONFIG_${item_basename} UPPER_CASE_CONFIG)
  zephyr_library_sources_ifdef(${UPPER_CASE_CONFIG} ${item})
endfunction()

...

function(zephyr_library_sources_ifdef feature_toggle source)
  if(${${feature_toggle}})
    zephyr_library_sources(${source} ${ARGN})
  endif()
endfunction()


# zephyr/cmake/extensions.cmake

...

function(zephyr_library_sources source)
  target_sources(${ZEPHYR_CURRENT_LIBRARY} PRIVATE ${source} ${ARGN})
endfunction()

...

以上の変更でビルドが通り、シリアルドライバを実装する枠が完成しました。続きは次回。

[編集者: すずき]
[更新: 2020年 2月 16日 18:23]

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
   2020年 2月 8日 -
      2020年 2月 8日  
link もっと後

管理用メニュー

link 記事を新規作成

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDF ファイル RSS 1.0
QR コード QR コード

最終更新: 2/22 03:01

カレンダー

<2020>
<<<02>>>
------1
2345678
9101112131415
16171819202122
23242526272829

最近のコメント 5件

  • link 19年09月01日
    すずき 「私も正直びっくりです。間違って違う製品を...」
    (更新:09/04 23:39)
  • link 19年09月01日
    hdk 「車向けの製品の中でも、車載コンピューター...」
    (更新:09/02 23:20)
  • link 19年07月18日
    hdk 「あっ、AAMはマニュアルのオペレーション...」
    (更新:07/25 00:02)
  • link 19年07月18日
    すずき 「AAM(ASCII Adjust AX ...」
    (更新:07/24 22:22)
  • link 19年07月18日
    hdk 「加算減算は符号のありなしどちらも命令が同...」
    (更新:07/24 07:25)

最近の記事 3件

link もっとみる
  • link 20年02月21日
    すずき 「[Zephyr と RISC-V とマルチプロセッサ] 昨日(20...」
    (更新:02/22 03:01)
  • link 20年02月20日
    すずき 「[Zephyr の 16550 シリアルドライバ] 先日は Zep...」
    (更新:02/22 02:55)
  • link 19年03月28日
    すずき 「[マンガ紹介] お気に入りのマンガ紹介シリーズ。[マンガ紹介 その ] ...」
    (更新:02/21 20:37)

こんてんつ

open/close wiki
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報