Saturday, March 24, 2018

向Arduino Nano(祖国版)中上传程序

主角是Arduino Nano,淘宝买的,十几块钱一个,低价果然代表这玩意不是正品,查阅网上资料可以发现,这个Nano使用的是WCH CH340G串口芯片组,而这个芯片也就是最明显的Arduino Nano clone(山寨版)。
8382c2436dd1794f9606684604324a10.jpg
在Windows上,插入以后系统可以正确识别,不过在Debian上,稍微有点问题。可能因为系统比较旧,插入以后不识别,后来找了找,发现有这么个http://www.wch.cn/download/CH341SER_LINUX_ZIP.html驱动。下载后,root权限下 make && make load 即可。
180324175324.png
安装完成后,重新插入USB设备,dmesg可以发现有提示已经载入。再重新打开Arduino IDE,发现仍然无法写入数据,执行chmod 777 /dev/ttyUSB0后,正确配置即可上传程序。

国产芯片真的很便宜……

Saturday, March 10, 2018

常见的IoT设备文件系统类型

ext2

ext 2或第二扩展文件系统是Linux内核的文件系统。它最初是由Rémy Card作为扩展文件系统(Ext)的替代品而设计的。它是根据与BSD的伯克利快速文件系统相同的原则设计的,它是linux的第一个商业级文件系统。
ext 2的规范实现是Linux内核中的“ext2fs”文件系统驱动程序。其他实现(质量和完整性各不相同)存在于GNUHurd、Minix 3、一些BSD内核、MINT以及第三方Microsoft Windows和MacOS驱动程序中。
ext 2是几个Linux发行版中的默认文件系统,包括Debian和Red Hat Linux,直到最近被ext 3所取代,ext 3几乎完全兼容ext 2,并且是一个日志文件系统。ext 2仍然是基于闪存的存储介质(如sd卡和usb闪存驱动器)的首选文件系统,因为它缺少日志,从而提高了性能并将写入次数降到最低,而且闪存设备的写入周期也有限。

分区标志:
Apple_UNIX_SVR2 (Apple Partition Map)
0×83 (Master Boot Record)
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (GPT)

结构:
目录内容:Table
文件分配:bitmap (free space), table (metadata)
坏块:Table

限制:
最大卷大小:2–32 TiB
最大文件大小:16 GiB – 2 TiB
最大文件数量:10^18
最大文件名长度:255 bytes
文件名中允许的字符:除了 NUL ('’)和’/'之外的所有字符

特性:
会记录的日期:modification (mtime), attribute modification (ctime), access (atime)
日期区间:December 14, 1901 - January 18, 2038
时间最高精度:1 s
文件系统权限:POSIX
透明压缩:不支持 (通过补丁可用)
透明加密:不支持

YAFFS2

Yaffs(Yet Another Flash File System)是由新西兰怀特里夫的查尔斯·曼宁为Aleph One公司设计和编写的。
Yaffs 1是这个文件系统的第一个版本,它是为当前的NAND芯片设计的,芯片的页面大小为512字节(+16字节空闲(OOB,带外)空间)。工程于2002开始,并于同年晚些时候首次发布。最初的工作是由托比丘吉尔有限公司和光明之星工程公司赞助的。
这些旧的芯片通常还允许每页写2到3个周期。YAFFS利用了这一点:脏页是通过写入特定的备用区域字节来标记的。较新的NAND闪存芯片有更大的页面,第一个2K页(+64个字节OOB),后面的的4K,有更严格的写入要求。擦除块中的每个页面(128 KB)必须按顺序写入,每个页面必须只写一次。
YAFFS 2是为适应这些新芯片而设计的。它基于YAFFS 1源代码,其主要区别是内部结构不固定512字节大小,并且在每个写好的页面上放置一个块序列号。这样,旧页就可以在逻辑上被覆盖,而不会违反“写一次”规则。它于2003年底发布。

YAFFS是一个健壮的日志结构文件系统,它将数据完整性作为一项高优先级的目标。第二目标是高性能。YAFFS的性能通常会超过大多数替代产品。它也被设计成可移植的产品,并已用于Linux、WinCE、PSO、ecos、ThreadX和各种特殊用途操作系统。在没有OS、嵌入式操作系统或引导加载程序的情况下,使用了一个变体‘YAFFS/Direct’:它具有相同的核心文件系统,但与较高和较低级别的代码以及NAND闪存硬件交互的接口更简单。

YAFFS 2在概念上与YAFFS 1相似,共享大量相同的代码;YAFFS 2代码库通过向后兼容性支持YAFFS 1数据格式。主要的不同之处在于,YAFFS 2需要跨越显著的障碍,以满足现代NAND闪存的“只写一次”的要求。

YAFFS 2用一个单调递增的序列号标记每个新写的块。可以从块序号和块内的块偏移量推断块的序列。因此,当YAFFS 2扫描闪存并检测到具有相同ObjectID和SpringkNumbers的多个块时,它可以通过取最大序列号来选择使用哪个块。为了提高效率,YAFFS 2还引入了收缩头的概念。例如,当一个文件被调整到更小的大小时,YAFFS 1将把所有受影响的块标记为脏–由于“只写一次”规则,YAFFS 2不能这样做。相反,YAFFS 2写了一个“收缩标头”,这表示在这一点之前的一定数量的页面是无效的。这使YAFFS 2能够在系统重新启动时重构文件系统的最终状态。
YAFFS 2使用了NAND闪存的更抽象的定义,允许它用于具有不同几何形状、坏块处理规则的更广泛的闪存部件。
YAFFS 2后来增加了对检查点的支持,它绕过了正常的挂载扫描,可以达到非常快的挂载时间。

JFFS2

日志闪存文件系统版本2或JFFS 2是用于闪存设备的日志结构文件系统。它是JFFS的继承者。JFFS 2自2001年9月23日作为内核2.4.10版本的一部分合并到linux内核主线后就被包含到了linux内核中。JFFS 2也可用于一些引导加载程序,如DAS U-Boot、Open Firmware、Ecos RTOS和RedBoot。JFFS 2最著名的使用者是OpenWRT。

已经至少有三个文件系统作为JFFS 2的替代品:LogFS、UBIFS和YAFFS。

特性:
透明压缩:zlib, rubin、rtime

CramFS

压缩的ROM文件系统(CramFS)是一个免费的(GPL)只读Linux文件系统,旨在简化和节省空间。它主要用于嵌入式系统和小占用空间系统.。
与常规文件系统的压缩图像不同,可以按原样使用压缩图像,即无需首先解压缩它。因此,一些Linux发行版对initrd映像(特别是debian 3.1)和安装映像(特别是suse linux)使用临时内存,其中内存和映像大小都有限制。

文件系统设计:
文件系统上的文件是zlib压缩的,一次压缩一页,以允许随机读取访问。元数据不是压缩的,而是以比传统文件系统更节省空间的简洁表示形式表示的。
文件系统故意是只读的,以简化其设计;对压缩文件的随机写入访问很难实现。将文件打包到新的文件映像中的实用工具(mkcramfs)附带了一个新的文件压缩文件。
文件大小限制在16 MB以下。最大文件系统大小略低于272 MB。(文件系统上的最后一个文件必须在256 MB块之前开始,但可以扩展到超过256 MB块。)

SquashFS

squashfs是一个用于linux的压缩只读文件系统。squashfs压缩文件、inode和目录,并支持高达1MB的块大小以获得更大的压缩率。支持多种压缩算法。squashfs也是免费软件的名称,在GPL下获得许可,用于访问squashfs文件系统。
squashfs用于一般只读文件系统,并用于需要较低开销的受限块设备存储系统(例如嵌入式系统)。

Squashfs被Arch Linux、Debian、Fedora、Gentoo Linux、LinuxMint、Salix、Ubuntu的LiveCD版本以及诸如OpenWRT和DD-WRT路由器固件等嵌入式发行版使用。它还用于Chromecast和AndroidNougat的系统分区。它通常与联合挂载文件系统(如UnionFS、OverlayFS或aufs)相结合,为实时Linux发行版提供读写环境。这既利用了Squashfs的高速压缩功能,也利用了在从活动CD运行它时更改发行版的能力。DebianLive、Mandriva One、PuppyLinux、SalixLive和Slax等发行版使用这种组合。

Squashfs也被Linux终端服务器项目和Splashtop使用。工具unsquashfs和mksquashfs已经移植到WindowsNT-Windows8.1。7-Zip也支持Squashfs。

限制:
最大卷大小:16 EiB (2^64) bytes
最大文件大小:16 EiB (2^64) bytes
特性:
文件属性:POSIX以及扩展属性
透明压缩:gzip LZMA LZO LZMA2 LZ4