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

link もっと前
   2021年 2月 2日 ---> 2021年 1月 24日
link もっと後

2021年 2月 2日

Zephyr と QEMU のリセット その 1 - 準備編

目次: Zephyr を調べる - まとめリンク

Zephyr でリセットできないんだけど、って言われて調べたので、忘れないうちに記録に残しておきます。

RISC-V の規格ではリセット処理について何も記述されていませんので、リセット処理はハードウェア依存となります。QEMU の RISC-V virt マシンはどうかというと、SiFive のナイスガイ達が作ってくれたリセットの仕組みがあります。

QEMU RISC-V virt マシンのリセット処理

// qemu/hw/riscv/virt.c

static const struct MemmapEntry {
    hwaddr base;
    hwaddr size;
} virt_memmap[] = {
    [VIRT_DEBUG] =       {        0x0,         0x100 },
    [VIRT_MROM] =        {     0x1000,        0xf000 },
    [VIRT_TEST] =        {   0x100000,        0x1000 },    //★アドレス 0x00100000 にある★
    [VIRT_RTC] =         {   0x101000,        0x1000 },
...


// qemu/hw/riscv/virt.c

static void virt_machine_init(MachineState *machine)
{

...

    /* SiFive Test MMIO device */
    sifive_test_create(memmap[VIRT_TEST].base);    //★テストデバイスを追加している★


// qemu/hw/misc/sifive_test.c

/*
 * Create Test device.
 */
DeviceState *sifive_test_create(hwaddr addr)
{
    DeviceState *dev = qdev_new(TYPE_SIFIVE_TEST);
    sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
    sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, addr);
    return dev;
}

...

static void sifive_test_write(void *opaque, hwaddr addr,
           uint64_t val64, unsigned int size)
{
    if (addr == 0) {
        int status = val64 & 0xffff;
        int code = (val64 >> 16) & 0xffff;
        switch (status) {
        case FINISHER_FAIL:
            exit(code);
        case FINISHER_PASS:
            exit(0);
        case FINISHER_RESET:
            qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);    //★ここに到達するとリセットが掛かるはず★
            return;
        default:
            break;
        }
    }
    qemu_log_mask(LOG_GUEST_ERROR, "%s: write: addr=0x%x val=0x%016" PRIx64 "\n",
                  __func__, (int)addr, val64);
}


// qemu/include/hw/misc/sifive_test.h

enum {
    FINISHER_FAIL = 0x3333,
    FINISHER_PASS = 0x5555,
    FINISHER_RESET = 0x7777    //★この値を書けば良さそう★
};

つまり 0x100000 に 0x00007777 を 4バイト Write すれば良さそうです。

準備

Zephyr のサンプル shell を使います。理由はリブートするコマンドが簡単に使えるからです。CONFIG_REBOOT を有効にする必要があります。またshell は起動後プロンプトが出るだけで、リセットが掛かったかどうかわかりにくいため、起動時のバナーも有効にしておくと良いです。

REBOOT, BOOT_BANNER を有効にする
CONFIG_REBOOT=y

  Boot Options  --->
    [ ] Reboot functionality

CONFIG_BOOT_BANNER=y

  General Kernel Options  --->
    Kernel Debugging and Metrics  --->
      [ ] Boot banner

ちょっと長いので一旦切ります。次回は実装と動作確認をします。

編集者: すずき(更新: 2021年 2月 6日 01:03)

コメント一覧

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



2021年 1月 31日

その Zoom は最新ですか?

Zoom って、バージョンアップのお知らせを全くしてこないので、起動時に勝手にアップデートされていると思っていたんですが、全くそんなことはなかったですね。ずっと古いバージョンの 5.3.1(2020/09/28 リリース)のまま使っていました。

手動でアップデートしたところ、無事に最新版の 5.4.9 になりました。4ヶ月で大分数字が変わりましたね。

比較的新しいアプリの割にアップデートは保守的ですね?不思議な設計だな……??

ミーティング後に表示される説

Facebook のコメントで「ミーティングの後」にバージョンアップのお知らせが出ることを教えてもらいました。

ミーティング前にバージョンアップすると遅刻する可能性大なので、ミーティング終了後に表示するのは良いアイデアですね。でも残念ながら、見たことないんだよな……。うちの Zoom は何か変なんだろうか??

メモ: 技術系?の話は Facebook から転記しておくことにした。加筆。

編集者: すずき(更新: 2021年 2月 6日 22:35)

コメント一覧

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



2021年 1月 30日

PlayStation Vita

久しぶりに PlayStation Vita を起動したところ、ネットワークに繋げる系アプリがほぼ全滅していました。

プラットフォーム依存のゲーム機は、本体が元気でもサードパーティの撤退やサービス終了に伴って、勝手にポンコツになってしまい悲しいです。結構高かったのに……。

ソニー製

  • flickr: 起動する、アカウント持ってないので動作不明
  • foursquare: サービス終了
  • LiveTweet: 起動する、PS Vita の内蔵ブラウザが Twitter 未サポート、アプリ認証できない
  • near: サービス終了
  • PlayStation Store: さすがにこれは動く
  • radiko.jp: 動作する
  • Reader: 起動する、機器認証でエラーになり進めなかった
  • えちゃんねる: 起動する、Twitter のアプリ認証できない

サードパーティ製

  • hulu: サービス終了
  • NHK オンデマンド: サービス終了
  • ニコニコ: サービス終了

PlayStation Store を見ると「アプリケーション」はたった 14個、サードパーティ製のアプリは 1つ(ROBOTICS; NOTES ELITE AR)だけです。PS Vita は既に 9年経過(2011年 12月発売)しており、ぶっちゃけソニーすらも Vita を見放している節があり、もう完全にオワコンです。

それなりに大きなプラットフォームの終焉を間近で見たのは貴重な体験、とはいえ、買った人は何も嬉しくないよね……。

メモ: 技術系?の話は Facebook から転記しておくことにした。多少修正。

編集者: すずき(更新: 2021年 2月 1日 11:25)

コメント一覧

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



link もっと前
   2021年 2月 2日 ---> 2021年 1月 24日
link もっと後

管理用メニュー

link 記事を新規作成

合計:  counter total
本日:  counter today

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

最終更新: 3/6 03:18

カレンダー

<2021>
<<<02>>>
-123456
78910111213
14151617181920
21222324252627
28------

最近のコメント 5件

  • link 21年02月28日
    すずき 「ですね、その辺りも違います。違いを全部示...」
    (更新:03/06 00:21)
  • link 21年02月28日
    hdk 「109と109Aって、かなの記号も違うん...」
    (更新:03/05 21:43)
  • link 21年02月14日
    すずき 「そうですね、1年だけとか、出張の時だけ、...」
    (更新:02/15 11:27)
  • link 21年02月14日
    hdk 「テレビデオも壊れたときがと聞いて買いませ...」
    (更新:02/15 06:24)
  • link 21年02月06日
    すずき 「そこまで珍しいと、売る側としてももう諦め...」
    (更新:02/13 15:13)

最近の記事 3件

link もっとみる
  • link 21年03月04日
    すずき 「[VSCode を使って Windows から Linux ア] ...」
    (更新:03/06 03:18)
  • link 21年03月03日
    すずき 「[VSCode を使って Windows から Linux ア] ...」
    (更新:03/06 02:30)
  • link 21年02月28日
    すずき 「[JIS 配列キーボードと OADG 配列キーボード] 今まで、い...」
    (更新:03/05 18:34)

こんてんつ

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 2021年
open/close 過去日記について

その他の情報

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