Tianfu Ma
Tianfu Ma
This project is licensed under APL, which allows commercial usage. In readme file, you put a link to Nokia HEIF library. However, that project limits the license to non-commercial usage...
市场上有一种SD NAND,深圳的芯天下、江波龙等公司有这种产品。 http://www.xtxtech.com/products.asp?sid=62 https://www.longsys.com/cn/product/t-flash/ 封装是类似SO8的LGA8封装,1.27mm pitch,直接贴在PCB上,信号是MMC接口,3.3V Only。对于低端嵌入式产品跑Linux是一个比NAND要方便很多的选择,比eMMC有显著的成本优势(容量也小很多)。 希望rkdeveloptool, upgrade_tool和idbloader能直接支持MMC烧录,这样量产、开发和省级的时候都方便很多。 谢谢。 ++++ 可能更多的工作是在idbloader里完成的,但是那个repo的issue关了,所以就写在这里了。
一些意见和建议
瑞芯提供了upgrade_tool和rkdeveloptool两个工具,用于通过rkusb下载emmc固件。 upgrade_tool实现了一个类似repl的界面,这个对于scripting很麻烦,需要动用expect或者对tty编程。 相对而言rkdeveloptool简单一点,但是仍然有这样一些问题: 1. exit code,比如ld命令即使没有枚举到设备,仍然返回0,这对scripting来说是个糟糕的设计。 2. gpt代码有bug,在rk3328上,8GB emmc,使用缺省的parameters写入的分区表,在linux内核启动后最后一个分区(rootfs分区)丢失; 3. ReadFlashInfo返回的emmc容量是MB单位的,不是以Byte为单位的; 4. 命令不接受pipe; 以上问题说明该工具设计上没有清晰分离机制和策略。仅仅针对emmc操作而言,必须的操作仅有: 1. 枚举; 2. 下载最初的bootloader; 3. 读取emmc信息,主要是容量; 4. LBA读写 5. RESET设备 应该有一个工具仅支持这几个操作的,有正确的exit code定义,支持pipe,其他的功能可以再写一层bash或其他语言脚本实现,这样使用上灵活很多。 需要支持pipe的一个原因是这样: 写入gpt是写入emmc的头部和尾部,但是rootfs的镜像,常见的情况是在某个LBA之后都是空的;对于写入的程序而言它可以先读一遍镜像文件找到最后一个非空的sector,然后只把这些pipe给rkdeveloptool即可,在使用A/B分区或者rootfs内系统较小的时候可节省不少烧录时间;当然目前也可以先把rootfs.img后面的0给trunc掉,但是这需要复制一大块文件,如果有pipe支持这个中间步骤是可以省掉的。 既然瑞芯已经提供了基于Linux平台的工具,在工具的设计上应该符合Linux命令的实现习惯,这样对社区开发者方便很多。在Linux上分区和文件系统的使用方式多种多样,只要提供机制,开发者可以自己实现烧录脚本和量产工具,对于瑞芯的BROM和boot-loader的设计来说,仅有idbloader, u-boot和trust是固定的,其他的分区和文件系统使用自由可以留给产品开发者。...
On Ubuntu 19.10 or Debian 10, where aarch64-linux-gnu-gcc version is 8.3. ``` In file included from drivers/mtd/spi/spi_flash.c:18: include/linux/log2.h:19:1: error: ignoring attribute ‘noreturn’ because it conflicts with attribute ‘const’ [-Werror=attributes] int...
![img_20171101_182436](https://user-images.githubusercontent.com/376881/32272062-73d7f200-bf37-11e7-9ff6-7bd70e408c72.jpg) For some jpg file, the `detectFile` function returns an error, such as following: ``` Error: JPEG image data, Exif standard: [TIFF image data, big-endian, direntries=13, datetime=2017:11:01 18:24:35, GPS-Data, model=Nexus...
on Ubuntu 18.04, openssl version is 1.1.0g and the source code won't compile. Furthermore, we are using node.js. tls.certEngine is not supported until node.js v10. However, node.js v10 uses openSSL...
Event
为什么需要实现Event可以写一本书; 简单的说Event x State就是程序行为的完备数学定义;两者都是程序的Nature;简化的Event是轮循外部变量的语句;简化的State就在if/while等分支语句里;他们可以简化但不会没有; Event对于FUNK意味着什么呢? FUNK并非真正的Blocking;再次调用的时候,如果在恢复运行之前做一点小小的检查工作再决定是否继续,Well,就完全等价于Event模式下的EventLoop入口的GetEvent动作; 真正的代码可能写在两个不同的地方,一个是FUNK的goto之前;另一个是goto之后、再次调用sub-FUNK之前,两者用途和形式都会有区别;很可能Event会引起这一层状态机的路径变化,但也可能只有某个subFunk阻塞时关注某个Event; 设计上也有两个原则,一个是在全局的FUNK设计里引入Event机制,但这对那些不需要Event的FUNK来说可能会带来书写代码的负担; 这里还需要仔细考虑再做定夺;