ระยะไกล pinetime ไม่ได้ทำงานอีกต่อไป ขอบคุณทุกคนสำหรับการทดสอบระยะไกล pinetime!
Remote Pinetime เป็นนาฬิกาอัจฉริยะ Pinetime ในสิงคโปร์ที่กำหนดค่าเพื่อให้ทุกคนในโลกแฟลชและทดสอบเฟิร์มแวร์จากระยะไกล
Pinetime Bot ระยะไกล (สร้างขึ้นใน Rust) นาฬิกากลุ่มโทรเลขสำหรับคำสั่งกะพริบและกะพริบเฟิร์มแวร์ไปยัง pinetime
การแสดงผลบน pinetime นั้นสตรีมสดไปยัง YouTube ดังนั้นคุณสามารถดูเฟิร์มแวร์ของคุณทำงานสดบน pinetime ของฉัน
หากต้องการแฟลชเฟิร์มแวร์และทดสอบ Pinetime ของคุณเองเข้าร่วมกลุ่มโทรเลข "ระยะไกล pinetime": https://t.me/remotepinetime
บันทึกการกระพริบ (จาก OpenOCD) และบันทึกการดีบักข้อความ (จาก ARM semihosting) จะแสดงในช่องทางโทรเลข "ระยะไกล pinetime" ที่นี่: https://t.me/remotepinetimelog
ดูวิดีโอสาธิตบน YouTube
หากต้องการแฟลชไฟล์ไบนารีเฟิร์มแวร์ https://.../firmware.bin ไปยัง pinetime ที่ที่อยู่ 0x0 ...
/flash 0x0 https://.../firmware.bin
สิ่งนี้ใช้ได้กับ URL ใด ๆ ที่ไม่ได้รับการป้องกันเข้าสู่ระบบ
อย่าผ่าน URL สำหรับสิ่งประดิษฐ์ที่สร้างขึ้นโดยการกระทำของ GitHub พวกเขาต้องการการเข้าสู่ระบบและบอทโทรเลขจะถูกบล็อก
ให้คัดลอกสิ่งประดิษฐ์และอัปโหลดภายใต้ "releases" ซึ่งไม่ได้รับการคุ้มครองโดยการเข้าสู่ระบบ
เฟิร์มแวร์ pinetime บางอย่างต้องใช้ bootloader เช่น McUboot หรือ SoftDevice แฟลช bootloader ไปยังที่อยู่ 0x0 ก่อนจากนั้นแฟลชเฟิร์มแวร์
เฟิร์มแวร์ที่เข้ากันได้กับ McUboot ควรถูกฉายไปที่ที่อยู่ 0x8000
เพื่อแฟลชฝ่าวงล้อมบน pinetime ...
/flash 0x0 http://tt-392.space/breakout.hex
วิดีโอสาธิตของการฝ่าวงล้อมใน pinetime
เพื่อแฟลชใบหน้าที่วาดด้วยมือ ...
/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
เพิ่มเติมเกี่ยวกับหน้านาฬิกาวาดด้วยมือ
หากต้องการแฟลชเฟิร์มแวร์ "Mind Wowlwown" ที่แก้ไขแล้วที่ไม่เคยนอนหลับ ...
/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 ที่ปล่อยข้อความการดีบัก semihosting ...
/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
เพื่อแฟลช McUboot bootloader 5.0.4 ...
/flash 0x0 https://github.com/lupyuen/pinetime-rust-mynewt/releases/download/v5.0.4/mynewt.elf.bin
บางครั้ง Pinetime จะถูกล็อคเนื่องจากข้อผิดพลาดของเฟิร์มแวร์ การกระพริบ Booloader McUboot ด้านบนควรแก้ไขการล็อค
เพื่อสร้างเฟิร์มแวร์ของคุณเองในเว็บเบราว์เซอร์ (โดยไม่ต้องติดตั้ง IDE หรือเครื่องมือใด ๆ ) ลองดูบทความ ...
สร้างเฟิร์มแวร์ pinetime ในคลาวด์ด้วยการกระทำของ GitHub
ดูตัวอย่าง Pinetime Watch ในเว็บเบราว์เซอร์ของคุณด้วย webAssembly
การกระพริบในโทรเลขอย่างไร ...
ดูวิดีโอสาธิตบน YouTube
มีคำถามเกี่ยวกับ pinetime หรือไม่? แชทกับชุมชน Pinetime บน Matrix / Discord / Telegram / IRC ...
https://wiki.pine64.org/index.php/pinetime#community
ตรวจสอบบทความ pinetime ของฉัน
เพราะมันยากและมีราคาแพงในการจัดส่งฮาร์ดแวร์จริงทั่วโลกในระหว่างการระบาดใหญ่ ... และการทดสอบเฟิร์มแวร์ระยะไกลอาจเป็นวิธีแก้ปัญหา
Pinetime ระยะไกลถูกสร้างขึ้นเพื่อให้ผู้คนเรียนรู้และทดสอบด้วยการเข้ารหัส smartwatch โดยไม่ต้องมีสมาร์ทวอทช์จริง
ตรวจสอบงานนำเสนอวิดีโอของฉัน ...
Riot Summit 2020 - โปรแกรมฝังตัวที่ปลอดภัยและง่ายขึ้นพร้อม Rust on Riot
ARM Semihosting ช่วยให้เฟิร์มแวร์ของเราสามารถปล่อยข้อความดีบั๊กโดยการเรียกใช้คำสั่ง ARM Cortex-M bkpt
ตรวจสอบการใช้งาน Semihosting ARM นี้จาก 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() เช่น 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 และบันทึก Pinetime ระยะไกล (ข้อความต้องจบลงด้วยบรรทัดใหม่หรือจะไม่ปรากฏ)
ARM semihosting จะต้องเปิดใช้งานใน OpenOCD นี่คือวิธีที่ระยะไกล pinetime เปิดใช้งาน arm semihosting: 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
}
ARM Semihosting อาจช้า ... ไมโครคอนโทรลเลอร์ทั้งหมดค้างในขณะที่ข้อความการดีบักถูกส่งอักขระโดยอักขระไปยัง OpenOCD ผ่านพอร์ต SWD
เราขอแนะนำให้ใช้อาร์เรย์แบบคงที่เพื่อบัฟเฟอร์ข้อความขาออกในหน่วยความจำ
ในการใช้งาน pinetime-rust-mynewt ของ Semihosting ARM เราใช้ MBUFs MyNewt เพื่อบัฟเฟอร์ข้อความอย่างมีประสิทธิภาพ
อย่าใช้ Semihosting ARM เมื่อการประมวลผล Bluetooth LE ดำเนินต่อไป ... ข้อความจะถูกทิ้งและไคลเอนต์ Bluetooth Le จะตัดการเชื่อมต่อโดยอัตโนมัติ
Semihosting ARM ควรปิดใช้งานในเฟิร์มแวร์การผลิต นอกจากนี้ Semihosting ARM อาจแขวนอยู่เมื่อมีการเชื่อมต่อดีบักเกอร์ JLink สำหรับ pinetime-rust-mynewt เราปิดการใช้งาน semihosting ด้วยธง GCC -DDISABLE_SEMIHOSTING ใน targets/nrf52_boot/pkg.yml (สำหรับ mcuboot bootloader) และใน targets/nrf52_my_sensor/pkg.yml
เพื่อสร้างบอทโทรเลขของคุณเอง ...
แชทกับ botfather สร้างบอทชื่อ PineTime Bot
Enter /mybots เลือก PineTime Bot
เลือก Edit Commands ป้อน flash - flash 0x0 https://.../firmware.bin
ในการเรียกใช้บอตโทรเลขของคุณเอง: โคลน repo นี้และเรียกใช้สิ่งนี้ในสคริปต์เชลล์ ...
# 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 เพื่อแฟลชเฟิร์มแวร์ไปยัง pinetime ผ่าน SWD
ในการดาวน์โหลด XPack OpenOCD (สำหรับ Mac) หรือ OpenOCD SPI (สำหรับ Raspberry Pi) ให้ดูที่ pinetime-updater/run.sh
Telegram Bot กำลังทำงานบน Raspberry Pi ด้วย Xpack OpenOCD (แทนที่จะเป็น OpenOCD SPI) ดาวน์โหลด XPack OpenOCD สำหรับ Raspbian 32 บิตจากที่นี่
ไดรเวอร์ USB สำหรับ ST-Link ได้รับการกำหนดค่าบน 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ในการสตรีมกล้อง Raspberry Pi ของคุณไปยัง YouTube: เรียกใช้ในสคริปต์เชลล์ ...
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
doneขึ้นอยู่กับ https://www.makeuseof.com/tag/live-stream-youtube-raspberry-pi/
ใช้การเชื่อมต่อเครือข่ายแบบมีสายแทน wifi ... เนื่องจากการเปิดใช้งานเตาอบไมโครเวฟของคุณจะทำให้เครือข่าย WiFi 2.4 GHz และยุติสตรีมสด YouTube ของคุณ (และ URL สตรีมสดของ YouTube จะเปลี่ยนไป)
นี่คือการตั้งค่าการสตรีมสดที่มี (ซ้ายไปขวา) Raspberry Pi 4, โมดูลกล้อง Raspberry Pi V2 (8 MP), แว่นตาแว่นตาสองแว่น
ปกคลุมด้วยกล่องหุ้มด้วยกระดาษเพื่อปิดกั้นการสะท้อนบนแว่นตาแว่นตา (เช่นกล้องโทรทรรศน์) ...
วิธีทำสิ่งที่แนบมาด้วยกระดาษ
วางตำแหน่งราสเบอร์รี่ pi โมดูลกล้องแว่นตาสองแว่นตาและ pinetime
สร้างนั่งร้านโดยการพักซองจดหมายบนราสเบอร์รี่ PI โมดูลกล้องและแว่นตาแว่นขยาย
เสร็จสมบูรณ์นั่งร้านโดยวางกระดาษขนาด A4 ที่พับได้
วางผ้าขนหนูกระดาษบนโครงนั่งร้านอย่าลืมครอบคลุม Raspbery Pi ฉันสร้างวางด้วยการผสมแป้งครึ่งถ้วยกับน้ำครึ่งถ้วย
ปล่อยให้ papier-mâchéแห้งในชั่วข้ามคืนเพื่อสร้างรูปร่างของสิ่งที่แนบมา ตัดแต่ง papier-mâchéด้วยกรรไกร ไมโครเวฟ papier-mâchéแห้ง
วางแถบกระดาษเช็ดมือที่สองในแบบที่เป็นระเบียบ
ไมโครเวฟ papier-mâchéเป็นเวลาหนึ่งนาทีปล่อยให้มันเย็น ใช้ชามที่พลิกคว่ำเพื่อรองรับโครงสร้าง ทำซ้ำ 3 ครั้งจนกระทั่ง papier-mâchéแห้ง
ตัดแต่งสิ่งที่แนบมาด้วยกรรไกร
มีปัญหาด้านความปลอดภัยที่เปิดเผยบอทโทรเลขไปทั่วโลกเพื่อการกระพริบและการทดสอบหรือไม่?
เราลดความเสี่ยงด้านความปลอดภัยให้มากที่สุด ...
บอทโทรเลขของเราถูกสร้างขึ้นด้วย Rust ซึ่งเป็นภาษาการเขียนโปรแกรมระบบที่ปลอดภัย
ตรวจสอบซอร์สโค้ดสนิมที่ src/main.rs
ไม่อนุญาตให้เข้าถึงโฮสต์จากระยะไกล Telegram Bot จะโพลเท่านั้นสำหรับคำสั่ง /flash และดำเนินการพวกเขา
ไฟล์ชั่วคราวจะถูกลบโดยอัตโนมัติหลังจากใช้กับไลบรารี tempfile ดังนั้นเราจึงลดการเปิดรับไฟล์ด้วยมัลแวร์
แต่มีข้อกังวลอย่างหนึ่ง ... pinetime ของเราอาจจะเปล่งประกายด้วยมัลแวร์ที่โจมตีอุปกรณ์บลูทู ธ อื่น ๆ ในบริเวณใกล้เคียง
เพื่อประโยชน์ของการศึกษา IoT ... ฉันจะอนุญาต! -
ฉันตระหนักถึงความเสี่ยงเมื่อฉันให้บริการฟรีนี้ และถ้าคุณเลือกที่จะใช้งาน pinetime ระยะไกลของคุณเองคุณควรตระหนักถึงความเสี่ยงเช่นกัน
มีปัญหาด้านความปลอดภัยที่ร้ายแรงอย่างหนึ่งเกี่ยวกับการสนับสนุน semihosting: Semihosting API รองรับการอ่านการเขียนและการดำเนินการไฟล์บนโฮสต์ OpenOCD (Raspberry PI)
ปัญหาด้านความปลอดภัยนี้ยังไม่ได้รับการแก้ไข วิธีแก้ปัญหาคือการปิดใช้งานการสนับสนุน semihosting ใน OpenOCD ซึ่งจะปิดใช้งานการดีบักข้อความ
เขียนบันทึกการดีบัก semihosting ไปยังช่องโทรเลขแยกต่างหาก
เค้นจำนวนข้อความ semihosting ที่จะถูกบันทึกไปยังช่องโทรเลข (มวลรวมและส่งข้อความเป็นคำขอโทรเลขเดียวทุก ๆ 5 วินาที)
อนุญาตให้บันทึกการดีบัก semihosting และเฟิร์มแวร์กระพริบไปอยู่ร่วมกัน (พวกเขาทั้งสองใช้ OpenOCD)