目次: 自宅サーバー
以前(2023年7月28日、2023年7月13日の日記参照)この日記システムをPHPの最新バージョンPHP 8に対応させました。日記システムは恐らく移行できたと思います。
このサイトはもう一つ主要なシステムとして、PukiWikiを設置していますが、バージョンアップをサボっていてPHP 8に未対応のバージョンの1.5.0か何かのままだったため、エラーになって真っ白ページになっていました。色々イカンので最新版の1.5.4にアップデートしました。
PukiWikiといえば2006年頃に1.4.x系のリリースが止まりました。私はいちユーザーでプロジェクトの内情は知らないですが、開発者の方々(※)が会話しているWikiを確認すると結構荒れてました。2010年頃には、メンテナに対して退けなんて意見を言っている人までいます(開発談義/10 - PukiWiki-devにログが残っています)。ひぇー、こわ……。
開発者不足で困っているPukiWikiプロジェクトですが、2014年に新たなコミッターさんが参加され、今は2年くらいに一度1.5.x系がリリースされています。
コミットログを見ると1.5.x系の開発(PHP 5対応やPHP 8対応なども)はその新たなコミッターさんが頑張っていらっしゃるようです。10年続けているのは凄いですね。
(※)OSDNはプロジェクトメンバー = コミッターでしたっけ?PukiWikiのプロジェクトメンバーは メンバーリスト - PukiWiki - OSDN で確認できます。
目次: 自宅サーバー
以前(2023年7月13日の日記参照)この日記システムをPHPの最新バージョンPHP 8に対応させました。このとき実はコメントがついた日記の一部がエラーになって真っ白ページしか出なくなっていました。私も気づいていなかったくらいなので、誰も気づかなかったはず。たぶん。
エラーメッセージから原因がよくわからず、真面目にデバッグしてみたところ、タグを変換するための設定を思いっきり間違っていました。存在しないキーでハッシュを参照しまくっておりエラー多発です。これは動かないですね。
PHP 8の動きには納得ですけど、PHP 5はこれで動いていたことが逆に不思議です。PHP 5はおおらかなプログラミング言語ですね……。
目次: OpenOCD
OpenOCDにRISC-Vの独自(もしくは標準に準拠しているものの新しすぎるなど)のCSR(Control and Status Register)を定義してアクセスする方法をメモしておきます。
前回はexpose_csrsを使って独自のレジスタを定義しました。この機能はOpenOCDの改造が不要で手軽な反面、2つの問題があります。1つ目の問題はSMPモードだと使えないことで、SMPモードと併用すると下記のように怒られCSRにアクセスできません。
Warn : Register csrNNN does not exist in riscv.cpu.0, which is part of an SMP group where this register does exist.
2つ目の問題点は名前がわかりづらいことです。csrNNNのようなほぼ番号同然の名前を暗記するのは正直言って辛いですよね。
CSR名を新たに追加するにはOpenOCDにパッチを当てて、再ビルドする必要があります。OpenOCDのビルド方法は以前書きました(2023年6月28日の日記参照)のでそちらに任せるとして、今回はパッチについて紹介しましょう。
前回同様、題材はRNMI CSRを使います。RISC-V Privileged Architectures V20211203(RISC-V Instruction Set Manual の2023-05-23のリリースページからダウンロードできます)を見ると、RNMIでは4つのCSRが定義されています。
書き起こしておくと、
となります。OpenOCDを変更すべき箇所はsrc/target/riscv/encoding.hというヘッダファイルだけです。
diff --git a/src/target/riscv/encoding.h b/src/target/riscv/encoding.h
index c2da4e676..6c3f9cc12 100644
--- a/src/target/riscv/encoding.h
+++ b/src/target/riscv/encoding.h
@@ -2992,6 +2992,10 @@
#define CSR_PMPADDR61 0x3ed
#define CSR_PMPADDR62 0x3ee
#define CSR_PMPADDR63 0x3ef
+#define CSR_MNSCRATCH 0x740
+#define CSR_MNEPC 0x741
+#define CSR_MNCAUSE 0x742
+#define CSR_MNSTATUS 0x744
#define CSR_MSECCFG 0x747
#define CSR_TSELECT 0x7a0
#define CSR_TDATA1 0x7a1
@@ -4714,6 +4718,10 @@ DECLARE_CSR(pmpaddr60, CSR_PMPADDR60)
DECLARE_CSR(pmpaddr61, CSR_PMPADDR61)
DECLARE_CSR(pmpaddr62, CSR_PMPADDR62)
DECLARE_CSR(pmpaddr63, CSR_PMPADDR63)
+DECLARE_CSR(mnscratch, CSR_MNSCRATCH)
+DECLARE_CSR(mnepc, CSR_MNEPC)
+DECLARE_CSR(mncause, CSR_MNCAUSE)
+DECLARE_CSR(mnstatus, CSR_MNSTATUS)
DECLARE_CSR(mseccfg, CSR_MSECCFG)
DECLARE_CSR(tselect, CSR_TSELECT)
DECLARE_CSR(tdata1, CSR_TDATA1)
CSR番号とDECLARE_CSRを追加するだけで良いみたいです。さすがOpenOCD便利な作りですね。
前回同様、RNMIを実装しているCPUの例としてNSITEXE NS31を用いてRNMI CSRを読み出してみましょう。
(gdb) info reg mnscratch mnepc mncause mnstatus mnscratch 0x0 0 mnepc 0x0 0 mncause 0x80000000 -2147483648 mnstatus 0x8 8
無事読み出すことができました。やはり名前が付いているとわかりやすいですね。
< | 2023 | > | ||||
<< | < | 08 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | 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 | 31 | - | - |
合計:
本日: