问题: 通过Android应用,可以以编程方式验证arduino Flash内容,以确保未更改(恶意)
我可以使用android adb shell中的以下命令使用avrdude来做到这一点
avrdude -C/data/data/com.myapp.avrdude/local/etc/avrdude.conf -v -patmega2560 -cstk500v2 -P/dev/ttyACM0 -b115200 -D -Uflash:v:firmware.hex:i
这在arduino上效果很好,但是当我想对使用FTDI芯片的电路板做同样的操作时,就会出现问题。当它连接到android设备时,它不会显示在/ dev /位置。
在Linux机器上,arduino设备显示为/ dev / ttyACM0,而FTDI设备显示为/ dev / ttyUSB0。问题是FTDI设备没有出现在android上,因此上面的avrdude命令变得无用。
我不想为here指定的FTDI构建内核驱动程序
我想采用的最可行的方法是为avrdude找到/构建一个简单的Java包装器,该包装器可以与USB设备进行更高级别的交互,这样我就可以利用{{3} }执行命令以验证闪存。
这种方法可行吗?如果没有,解决此问题的最佳方法是什么?
答案 0 :(得分:1)
看一下FTDI网站,似乎某些FTDI IC可能有驱动力:FTDI Android Driver 然后您可能会再次在java ha中构建avrdude。
在使用arduino时,我经常使用avrdude ...主要是从raspberrypi远程重新格式化/升级3D打印机上的固件...
我要去
1)查看Arduino驱动程序...
2)如果失败...也许尝试在Java中运行C程序的途径?这样您就可以将avrdude与您的应用打包?
3)XY问题->为什么不看看其他途径...真正弹出恶意固件的唯一方法是对设备的物理访问以及具有先前源代码的用户(可以设置锁定位)以防止读取EEPROM)。甚至在启动时也可以使用带有时间戳的UUID 1024位AES令牌/ JWT之类的东西来验证构建?
https://en.wikipedia.org/wiki/Java_Native_Interface
答案 1 :(得分:1)
JNI
的构建并没有avrdude
的支持,而FTDI
的构建却无济于事。
我已经下载了avrdude-6.3.tar.gz并运行了./configure --enable-linuxgpio
:
Configuration summary:
----------------------
...
DON'T HAVE libftdi1
DON'T HAVE libftdi
...
寻找时:
$ sudo yum whatprovides */libftdi1
它给了我
libftdi-devel-1.1-4.el7.x86_64 : Header files and static libraries for libftdi
Filename : /usr/include/libftdi1
sudo yum install libftdi-devel
也将安装libconfuse
。它还需要flex
和bison
。
请参见AN_357 Android D2XX Demo Application for FT4222H。
并且有针对ARM libft4222-linux-1.4.1.231.tgz
的构建 ...,它将进入jniLibs/armeabi
目录。
这取决于它是哪个芯片组,但是TN 134 FTDI Android D2XX Driver指出:
为与本机D2XX库一起, FTDI提供了Java类和JNI包装器,它们可以 轻松包含在应用程序中。该类提供对所有经典D2XX功能的访问,包括 EEPROM功能。
它甚至带有video install guide。
还为avrdude
找到了Arduino build-script。