目次: Zephyr
以前、RISC-V QEMUの -machine virtで、シリアルドライバ16550を使う設定を作りましたが、Zephyr 2.3.0で動かなくなってしまいました。悲しい。
変更点はレジスタアドレスシフト量の設定方法です。DT_NS16550_REG_SHIFTで設定する方式でしたが、デバイスツリーから設定するように変更されました。
commit 70a0063b69b06812c5726077646cffae3b8e199c Author: Kumar Gala <kumar.gala@linaro.org> Date: Fri Mar 27 06:03:59 2020 -0500 drivers: serial: uart_ns16550: Convert to new DT_INST macros Convert older DT_INST_ macro use the new include/devicetree.h DT_INST macro APIs. Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
// zephyr/drivers/serial/uart_ns16550.c
-#ifdef DT_INST_0_NS16550_REG_SHIFT
-#define UART_REG_ADDR_INTERVAL (1<<DT_INST_0_NS16550_REG_SHIFT)
+#if DT_INST_NODE_HAS_PROP(0, reg_shift)
+#define UART_REG_ADDR_INTERVAL (1<<DT_INST_PROP(0, reg_shift))
#endif
デバイスツリーに何を書けば良いのかは、デバイスツリーのドキュメント(ns16550.yaml)を見ましょう。プロパティ名と説明が書いてあります。
// zephyr/dts/bindings/serial/ns16550.yaml
properties:
reg:
required: true
reg-shift:
type: int
required: false
description: quantity to shift the register offsets by
// zephyr/dts/riscv/riscv32-virt.dtsi
...
uart0: serial@10000000 {
compatible = "ns16550";
reg = <0x10000000 0x100>;
clock-frequency = <3686400>;
label = "uart_0";
current-speed = <115200>;
reg-shift = <0>; /* ★これを追加★ */
};
// zephyr/soc/riscv/riscv-privilege/rv32-virt/soc.h
...
/* ★★下記定義は全て不要★★ */
#define DT_UART_NS16550_PORT_0_BASE_ADDR DT_INST_0_NS16550_BASE_ADDRESS
#define DT_UART_NS16550_PORT_0_BAUD_RATE DT_INST_0_NS16550_CURRENT_SPEED
#define DT_UART_NS16550_PORT_0_CLK_FREQ DT_INST_0_NS16550_CLOCK_FREQUENCY
#define DT_UART_NS16550_PORT_0_NAME DT_INST_0_NS16550_LABEL
#define DT_NS16550_REG_SHIFT 0
以上の修正を入れて動かします。
$ qemu-system-riscv32 -nographic -machine virt -net none -chardev stdio,id=con,mux=on -serial chardev:con -mon chardev=con,mode=readline -kernel zephyr/zephyr.elf -bios none
*** Booting Zephyr OS build zephyr-v2.3.0-2350-g2f294fcc2da8 ***
Hello World! QEMU RV32 virt board
動きました。良かった良かった。
< | 2020 | > | ||||
<< | < | 09 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | - | - | - |
合計:
本日:
管理者: Katsuhiro Suzuki(katsuhiro( a t )katsuster.net)
This is Simple Diary 1.0
Copyright(C) Katsuhiro Suzuki 2006-2023.
Powered by PHP 8.2.15.
using GD bundled (2.1.0 compatible)(png support.)