13.4 OS 認識の有効化

provider.py にある下記の実装では、myosに、配列内の OS タスクをリストするグローバル変数 tasks と、OS がタスクのスケジューリングを開始したことを示すもう 1 つのグローバル変数 scheduler_running があると想定しています。

# this script implements the Java interface IOSProvider
from osapi import DebugSessionException

def areOSSymbolsLoaded(debugger):
    return debugger.symbolExists("tasks") \
        and debugger.symbolExists("scheduler_running")

def isOSInitialised(debugger):
    try:
        result = debugger.evaluateExpression("scheduler_running")
        return result.readAsNumber() == 1
    except DebugSessionException:
        return False

def getOSContextProvider():
    return None

def getDataModel():
    return None
provider.py の一番上にあるインポートステートメントの osapi モジュールは、Java オブジェクトとユーティリティ関数のラッパのコレクションです。ファイル osapi.py 自体は、JAR ファイル com.arm.debug.extension_<version>.jar にあります。
実行中のターゲットに接続し、OS に対してシンボルを手動でロードすると、areOSSymbolsLoaded() ステージと isOSInitialised() ステージの両方がはっきり示されます。
  • OS を実行しているターゲットに接続すると、シンボルをロードしていない場合は、[Debug Control]ビューに[No OS Support]と表示されます。
    図 13-3 myos の[No OS Support]
    myos の[No OS Support]

  • OS のシンボルをロードすると、ターゲットがまだ実行中であれば、[Debug Control]ビューに[ターゲットの停止の待機中]と表示されます。
    この時点で、areOSSymbolsLoaded() が呼び出されて True を返し、デバッガは isOSInitialised() を呼び出すためにターゲットが停止するのを待ちます。
    図 13-4 myos がターゲットの停止を待機
    myos がターゲットの停止を待機

  • ターゲットが停止するとすぐに、[Debug Control]ビューが更新されて、OS 認識が有効になったことが示されます。
    この時点で、isOSInitialised() が呼び出されて True を返します。
    図 13-5 myos 有効
    myos 有効

  • 別の事例で重要なのは、areOSSymbolsLoaded()True を返しますが、isOSInitialised()False を返すことです。これが起こるのは、例えば、停止したターゲットに接続する場合や、カーネルイメージをターゲットにロードしたり関連するシンボルをデバッガにロードしたりする場合、OS の初期化より前の時点から(例えばイメージのエントリポイントから)デバッグを開始する場合です。
    この場合、 scheduler_running がまだ 1 に設定されていないので、[Debug Control]ビューには [OS の初期化の待機中]と表示されますが、シンボルはロードされます。
    図 13-6 myos OS の初期化の待機中
    myos OS の初期化の待機中

    isOSInitialised() を呼び出さないと、デバッガでは認識機能の実装によって、初期化されていない可能性のあるメモリの読み取りが開始されます。このコールバックが存在するのはこのためです。デバッガは、True が返されるまで、後続の停止点で isOSInitialised() のコールバックを続け、最終的に OS 認識が有効になります。
非機密扱いPDF file icon PDF 版ARM DUI0446VJ
Copyright © 2010-2015 ARM.All rights reserved.