リモートのパインタイムはもはや動作していません。リモートピンタイムをテストしてくれてありがとう!
Remote Pinetimeは、シンガポールのパインタイムスマートウォッチで、世界中の誰でもフラッシュしてファームウェアをリモートでテストできるように構成されています。
リモートピンタイムボット(Rustで作成)は、点滅するコマンド用の電報グループを監視し、ファームウェアをパインでフラッシュします。
ピンタイムのディスプレイはYouTubeにライブでストリーミングされているため、パインタイムでファームウェアがライブで稼働しているのを見ることができます。
独自のファームウェアをフラッシュし、ピンタイムをテストするには、「リモートピンタイム」電報グループに参加してください:https://t.me/remotepinetime
点滅ログ(OpenOCDから)とデバッグメッセージログ(アームセミホーストから)は、「リモートピンタイムログ」テレグラムチャンネルに表示されます:https://t.me/remotepinetimelog
YouTubeでデモビデオをご覧ください
ファームウェアのバイナリファイルをフラッシュするにはhttps://.../firmware.binをアドレス0x0でピンタイムにフラッシュします...
/flash 0x0 https://.../firmware.bin
これは、ログイン保護されていないすべてのURLに対して機能します。
GitHubアクションによって作成されたアーティファクトのURLを渡さないでください。ログインが必要であり、電報ボットはブロックされます。
代わりに、アーティファクトをコピーして、ログインによって保護されていない「リリース」の下にアップロードします。
ピンタイムファームウェアのフレーバーには、McBootやSoftDeviceなどのブートローダーが必要です。ブートローダーをフラッシュして最初に0x0にアドレス指定し、次にファームウェアをフラッシュします。
McAboot互換のファームウェアは、 0x8000に対応するためにフラッシュする必要があります
ピネティタイムでフラッシュブレイクアウトに...
/flash 0x0 http://tt-392.space/breakout.hex
ピンタイムでのブレイクアウトのデモビデオ
手に描くウォッチフェイスをフラッシュする...
/flash 0x0 https://github.com/lupyuen/pinetime-rust-mynewt/releases/download/v5.0.4/mynewt.elf.bin
/flash 0x8000 https://github.com/lupyuen/pinetime-rust-mynewt/releases/download/v7.0.1/my_sensor_app.img
手描きのウォッチフェイスの詳細
決して眠らないような修正された「マインドブロー」インフィニティタイムファームウェアをフラッシュするために...
/flash 0x0 https://github.com/lupyuen/pinetime-rust-mynewt/releases/download/v5.0.4/mynewt.elf.bin
/flash 0x8000 https://github.com/AntonMadness/Pinetime/releases/download/v0.1.1/pinetime-mcuboot-app-img.bin
これは、 src/DisplayApp/DisplayApp.cppを編集してすべての呼び出しを削除してcase Messages::GoToSleep:
セミホーストデバッグメッセージを発するmyNewtファームウェアでフラッシュラストに...
/flash 0x0 https://github.com/lupyuen/pinetime-rust-mynewt/releases/download/v5.0.4/mynewt.elf.bin
/flash 0x8000 https://github.com/lupyuen/pinetime-rust-mynewt/releases/download/v5.0.7/my_sensor_app.img
暴動で錆びるために...
/flash 0x0 https://github.com/lupyuen/pinetime-rust-riot/releases/download/v1.0.3/PineTime.bin
フラッシュマクブートブートローダー5.0.4 ...
/flash 0x0 https://github.com/lupyuen/pinetime-rust-mynewt/releases/download/v5.0.4/mynewt.elf.bin
ファームウェアエラーのために、ピンタイムがロックされることがあります。上記のMcAboot Booloaderをフラッシュすると、ロックが修正されるはずです。
Webブラウザで独自のファームウェアを構築するには(IDEまたはツールチェーンをインストールせずに)記事をご覧ください...
GitHubアクションを使用して、クラウドにピンタイムファームウェアを構築します
WebSassemblyを使用して、Webブラウザでパインのパインウォッチフェイスをプレビュー
テレグラムでフラッシュがどのように見えるか...
YouTubeでデモビデオをご覧ください
ピネティタイムに質問がありますか?マトリックス /ディスコード /テレグラム / IRCでピンタイムコミュニティとチャット...
https://wiki.pine64.org/index.php/pinetime#community
私のピネティタイムの記事をチェックしてください
パンデミック中に世界中に本物のハードウェアを出荷することが難しくて高価であるため、そしてリモートファームウェアテストが解決策になる可能性があります。
リモートピンタイムは、実際のスマートウォッチを持たずにスマートウォッチコーディングを学習して実験できるように作成されました。
私のビデオプレゼンテーションをチェックしてください...
Riot Summit 2020- Rust on Riotでより安全でシンプルな組み込みプログラム
ARM Semihostingを使用すると、ARM Cortex-M命令bkptを呼び出すことにより、ファームウェアがデバッグメッセージを放出できます。
pinetime-rust-mynewtからの腕のセミホーストのこの実装をチェックしてください...
/// Send an ARM Semihosting command to the debugger, e.g. to print a message.
/// To see the message you need to run opencd:
/// openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -f scripts/debug.ocd
static int __semihost ( int command , void * message ) {
// Warning: This code will trigger a breakpoint and hang unless a debugger is connected.
// That's how ARM Semihosting sends a command to the debugger to print a message.
// This code MUST be disabled on production devices.
__asm(
"mov r0, %[cmd] n"
"mov r1, %[msg] n"
"bkpt #0xAB n"
: // Output operand list: (nothing)
: // Input operand list:
[ cmd ] "r" ( command ),
[ msg ] "r" ( message )
: // Clobbered register list:
"r0" , "r1" , "memory"
);
return 0 ;
} __semihost()のように__semihost()を呼び出します: semihosting_console.c
/// ARM Semihosting Command
#define SYS_WRITE (0x5)
/// Write "length" number of bytes from "buffer" to the debugger's file handle fh.
/// We set fh=2 to write to the debugger's stderr output.
static int semihost_write ( uint32_t fh , const unsigned char * buffer , unsigned int length ) {
// If debugger is not connected, quit.
if (! debugger_connected ()) { return 0 ; }
if ( length == 0 ) { return 0 ; }
uint32_t args [ 3 ];
args [ 0 ] = ( uint32_t ) fh ;
args [ 1 ] = ( uint32_t ) buffer ;
args [ 2 ] = ( uint32_t ) length ;
return __semihost ( SYS_WRITE , args );
}
/// Return non-zero if debugger is connected. From repos/apache-mynewt-core/hw/mcu/ambiq/apollo2/src/hal_system.c
static int debugger_connected ( void ) {
return CoreDebug -> DHCSR & CoreDebug_DHCSR_C_DEBUGEN_Msk ;
}私たちが呼ぶとき...
/// Write "hellon" (6 characters) to the debugger's stderr output.
#define SEMIHOST_HANDLE 2
semihost_write ( SEMIHOST_HANDLE , ( const unsigned char * ) "hellon" , 6 ); hello Openocdとリモートのピンタイムログに表示されるメッセージが表示されます。 (メッセージは新しいラインで終了する必要があります。そうしないと、表示されません)
OpenOCDでは、アームの半測定を有効にする必要があります。リモートピンタイムがアームセミホーストを有効にする方法は次のとおりですflash-log.ocd
# Arm Semihosting is used to show debug console output and may only be enabled after the init event.
# We wait for the event and enable Arm Semihosting.
$_TARGETNAME configure -event reset-init {
echo "Enabled ARM Semihosting to show debug output"
arm semihosting enable
}
アームセミホーストは遅くなる可能性があります...マイクロコントローラー全体がフリーズしますが、デバッグメッセージは文字によってキャラクターがSWDポートを介してOpenOCDに送信されます。
静的配列を使用して、メモリ内の発信メッセージをバッファリングすることをお勧めします。
ARM Semihostingのpinetime-rust-mynewt実装では、MyNewt MBUFSを使用してメッセージを効率的にバッファリングします。
Bluetooth LE処理が進行中のときに腕のセミホーストを使用しないでください...メッセージが削除され、Bluetooth LEクライアントは自動的に切断されます。
生産ファームウェアでは、腕の半測定を無効にする必要があります。また、jlinkデバッガーが接続されているときに、腕の半測量が垂れ下がる可能性があります。 pinetime-rust-mynewtの場合、 targets/nrf52_boot/pkg.yml Bootloaderの場合)およびtargets/nrf52_my_sensor/pkg.yml (アプリケーション企業用)のGCCフラグ-DDISABLE_SEMIHOSTINGを使用して腕を無効にします。
独自の電報ボットを作成するために...
Botfatherとチャットして、 PineTime Botという名前のボットを作成します
入力/mybots 、 PineTime Botを選択します
Edit Commandsを選択し、 flash - flash 0x0 https://.../firmware.binを選択します
独自の電報ボットを実行するには:このリポジトリをクローンしてシェルスクリプトで実行します...
# Set your Telegram Bot Token
export TELEGRAM_BOT_TOKEN= ???
# This is needed to fix the h2 / indexmap build error "ids: IndexMap<StreamId, SlabIndex> expected 3 type arguments"
export CARGO_FEATURE_STD=1
# Show Rust stack trace
export RUST_BACKTRACE=1
cd ~ /remote-pinetime-bot
for (( ; ; ))
do
git pull
pkill openocd
cargo run
echo " ---------ERROR-------- "
sleep 30
doneTelegram Botは、Pinetime UpdaterとXPack OpenOCDを呼び出して、SWD経由でパイニングファームウェアをフラッシュします。
XPack OpenOCD(Mac)またはOpenOCD SPI(Raspberry Pi用)をダウンロードするには、 pinetime-updater/run.shをご覧ください
Telegram Botは現在、Xpack OpenoCD(OpenOCD SPIの代わりに)を使用してRaspberry Piで実行されています。 32ビットのRaspbian用のXpack OpenOCDがここからダウンロードされました
STリンク用のUSBドライバーは、Raspbianのように構成されていました...
# For Linux Only: Install UDEV Rules according to https://xpack.github.io/openocd/install/#udev
sudo cp xpack-openocd/contrib/60-openocd.rules /etc/udev/rules.d/
sudo udevadm control --reload-rulesラズベリーPIカメラをライブストリーミングするには、シェルスクリプトでこれを実行します...
for (( ; ; ))
do
raspivid -n -o - -t 0 -vf -hf -fps 30 -b 6000000 |
ffmpeg -re -ar 44100 -ac 2
-acodec pcm_s16le -f s16le -ac 2
-i /dev/zero -f h264 -i - -vcodec copy -acodec aac -ab 128k -g 50 -strict experimental
-f flv rtmp://a.rtmp.youtube.com/live2/YOUR_YOUTUBE_STREAM_KEY
sleep 1
donehttps://www.makeuseof.com/tag/live-stream-youtube-raspberry-pi/に基づく
WiFiの代わりに有線ネットワーク接続を使用してください...電子レンジをオンにすると、2.4 GHz WiFiネットワークが破壊され、YouTubeライブストリームが終了します。 (そしてYouTubeライブストリームURLが変更されます)
(左から右)Raspberry Pi 4、Raspberry Pi V2カメラモジュール(8 MP)、2つの虫眼鏡、Pogo Pins(Sharp Tip)、ST-Link V2 ...
粉末型のエンクロージャーで覆い、虫眼鏡(望遠鏡のような)の反射をブロックしてください...
Papier-Mâchéの囲いを作る方法...
Raspberry Pi、カメラモジュール、2つの虫眼鏡、ピンタイムを配置します
ラズベリーPI、カメラモジュール、虫眼鏡に封筒を置いて足場を構築します
折り畳まれたa4サイズの紙を敷いて足場を完成させます
足場にペーパータオルのストリップを貼り付け、必ずRaspbery Piをカバーしてください。半分の小麦粉と半カップの水を混ぜてペーストを作成しました。
張り子を一晩乾燥させて、エンクロージャーの形を形成します。ハサミで張り子をトリミングします。張り子の電子レンジを乾かします。
整然とした方法で、ペーパータオルストリップの2番目の層を貼り付けます。
張り子の電子レンジを1分間、冷ましてください。転覆したボウルを使用して構造をサポートします。 Papier-Mâchéが乾くまで3回繰り返します。
ハサミで張り子の囲いを整えます。
フラッシュとテストのために電報ボットを世界にさらしているセキュリティの問題はありますか?
セキュリティのリスクを可能な限り緩和します...
Telegram Botは、安全なシステムプログラミング言語であるRustで構築されています。
src/main.rsのRustソースコードをご覧ください
ホストへのリモートアクセスは許可されていません。 Telegram Botは/flashコマンドのみの投票のみを実行し、実行します。
tempfileライブラリで使用した後、一時ファイルは自動的に削除されます。そのため、マルウェアでファイルの露出を減らします。
しかし、1つの懸念事項があります...私たちのパインタイムは、近くの他のBluetoothデバイスを攻撃するマルウェアでフラッシュされる場合があります。
IoT教育のために...私はそれを許可します! :-)
この無料サービスを操作するとき、私はリスクを完全に認識しています。また、独自のリモートピンタイムを操作することを選択した場合は、リスクにも注意する必要があります。
セミホーストサポートに関する重大なセキュリティの問題が1つあります。半視線APIは、OpenOCDホスト(Raspberry PI)でファイルの読み取り、書き込み、実行をサポートしています。
このセキュリティの問題は解決されていません。回避策は、Debuggingメッセージも無効にするOpenOCDでのセミホーストサポートを無効にすることです。
セミホーストデバッグログを別の電報チャンネルに書き込みます
電報チャンネルにログインする半ろ過メッセージの数をスロットルします(5秒ごとに単一の電報要求としてメッセージを集計および送信)
デバッグログとファームウェアのフラッシュを共存させることを許可します(どちらもOpenOCDを使用します)