С HTC Artemis у меня ничего путного не получилось.
После переключения в internal boot mode и в Линуксе - полная тишина.
Перепрошивать через BOOTSEL/D0 на этом телефоне теоретически можно, но технически
слишком сложно.
Перехожу на HTC Athena, там перепрошивка официально поддерживается,
пусть даже и придется поломать голову над проблемой RSA ключей
root@localhost:~# stty -F /dev/ttyS1 clocal raw speed 57600
38400
root@localhost:~# cat /dev/ttyS1
$GPGGA,000154.070,,,,,0,00,,,M,0.0,M,,0000*51
^C
root@localhost:~# echo -ne '$PSRF100',0,38400,8,1,0*3C\\r\\n > /dev/ttyS1
root@localhost:~# stty -F /dev/ttyS1 clocal raw speed 38400
57600
root@localhost:~# od -x /dev/ttyS1
0000000 a2a0 5b00 0029
^C
root@localhost:~# echo -ne "\xa0\xa2\x00\x01\x94\x00\x94\xb0\xb3" > /dev/ttyS1
root@localhost:~# od -x /dev/ttyS1
^C
root@localhost:~# strace -ff ./sirfmemdump.arm -p /dev/ttyS1 -v 6 -i ping
execve("./sirfmemdump.arm", ["./sirfmemdump.arm", "-p", "/dev/ttyS1", "-v", "6", "-i", "ping"], [/* 11 vars */]) = 0
uname({sys="Linux", node="localhost", ...}) = 0
brk(0) = 0xac000
brk(0xacd00) = 0xacd00
readlink("/proc/self/exe", "/home/root/sirfmemdump.arm", 4096) = 26
brk(0xcdd00) = 0xcdd00
brk(0xce000) = 0xce000
open("/dev/ttyS1", O_RDWR|O_NOCTTY) = 3
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 -opost -isig -icanon echo ...}) = 0
ioctl(3, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 -opost -isig -icanon -echo ...}) = 0
ioctl(3, TCFLSH, 0x2) = 0
write(2, "./sirfmemdump.arm: port set up.."..., 34./sirfmemdump.arm: port set up...
) = 34
open("sirfmemdump.bin", O_RDONLY) = 4
fstat64(4, {st_mode=S_IFREG|0755, st_size=3057, ...}) = 0
write(2, "./sirfmemdump.arm: passed sanity"..., 43./sirfmemdump.arm: passed sanity checks...
) = 43
read(4, "\0\0\240\343X\20\237\345X \237\345\370\7\260\350\370\7"..., 3057) = 3057
close(4) = 0
write(2, "./sirfmemdump.arm: loader read i"..., 37./sirfmemdump.arm: loader read in...
) = 37
write(2, "./sirfmemdump.arm: blocking sign"..., 39./sirfmemdump.arm: blocking signals...
) = 39
rt_sigprocmask(SIG_BLOCK, [HUP INT QUIT KILL STOP TSTP], NULL, 8) = 0
write(2, "./sirfmemdump.arm: Sending loade"..., 37./sirfmemdump.arm: Sending loader...
) = 37
ioctl(3, TCSBRK, 0x1) = 0
nanosleep({0, 1000000}, NULL) = 0
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 -opost -isig -icanon -echo ...}) = 0
timer_delete(0x2) = 0
write(2, "gpsflash: transferring binary..."..., 34gpsflash: transferring binary...) = 34
write(3, "S\0\0\0\v\361\0\0\240\343X\20\237\345X \237\345\370\7\260"..., 512) = 512
write(2, "-", 1-) = 1
write(2, "\10", ) = 1
write(3, "\32x0*\6\321\244J\243K\32\200\1\"\243K\32\200/\340\32x"..., 512) = 512
write(2, "-", 1-) = 1
write(2, "\10", ) = 1
write(3, "\234FbF\1\233\363\30\1\231\333y\213T\v\0\0013\1\223\20"..., 512) = 512
write(2, "-", 1-) = 1
write(2, "\10", ) = 1
write(3, "\365\321\367\347\10\0p\274\2\274\10G\300F\324/\0\0\360"..., 512) = 512
write(2, "-", 1-) = 1
write(2, "\10", ) = 1
write(3, "\377\377\252\252\0\0\30G\300F\200#p\265%M\333\5+`\20#$"..., 512) = 512
write(2, "-", 1-) = 1
write(2, "\10", ) = 1
write(3, "\32\0\30\0N2\21\210\t\6\t\16\341v\0022\22\210R0\0\210*"..., 507) = 507
write(2, "-", 1-) = 1
write(2, "\10", ) = 1
timer_delete(0x2) = 0
write(2, "...done (0.02 sec).\n", 20...done (0.02 sec).
) = 20
brk(0xcd000) = 0xcd000
write(2, "./sirfmemdump.arm: Unblocking si"..., 41./sirfmemdump.arm: Unblocking signals...
) = 41
rt_sigprocmask(SIG_UNBLOCK, [HUP INT QUIT KILL STOP TSTP], NULL, 8) = 0
write(2, "./sirfmemdump.arm: Finished.\n", 29./sirfmemdump.arm: Finished.
) = 29
timer_delete(0x2) = 0
read(3,