买tiny210开发板之前, 真不知道连u-boot也不是提供。
superboot虽好,但只提供二进制文件,且只能用SD卡烧写,太不爽了。 从QQ2440,到Tiny6410, 再到Tiny210,  
感觉硬件越来越超值,可送的软件却越来越垃圾了。

痛定思痛,决定移植u-boot, 最早是在2011-12上面搞, 当时把USB DNW做好了(借用6410 usbd-otg-hs.c/.h,  小改了几处实现),能烧写u-boot, kernel等二进制文件,
烧写yaffs2, 却启不来,... 因为项目忙,所以就搁置了

最近看到u-boot 2012-07发布,决定直接在最新版本的u-boot上去把心愿了却。
主要方法是: 对比superboot烧写后的OOB数据, IMG原始OOB数据,以及u-boot烧写后的OOB数据。

通过不断对比发现:  
1. 要用友善的mkyaffs2image-128M, 因为它里面才包含了ECC layout相关数据。
2. nand_write_skip_bad的
if (!need_skip && !(flags & WITH_DROP_FFS)) {
        rval = nand_write (nand, offset, length, buffer);
        if (rval == 0)
            return 0;

*length = 0;
        printf ("NAND write to offset %llx failed %d\n",
            offset, rval);
        return rval;
}
这段代码要屏蔽 (这段代码在有些情况下会导致OOB没有写入)
3. nand_do_write_ops函数的

if (likely(!oob))
        memset(chip->oob_poi, 0xff, mtd->oobsize);
要把这个if判断拿掉 (经验证, 这个不是必须的)
4.  OOB mode要改为MTD_OOB_PLACE。代码如下:

int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
   u_char *buffer, int flags)

{

......

#ifdef CONFIG_CMD_NAND_YAFFS
  if (flags & WITH_YAFFS_OOB) {
   int page, pages;
   size_t pagesize = nand->writesize;
   size_t pagesize_oob = pagesize + nand->oobsize;
   struct mtd_oob_ops ops;

ops.len = pagesize;
   ops.ooblen = nand->oobsize;
   ops.mode = MTD_OOB_PLACE; //MTD_OOB_AUTO;
   ops.ooboffs = 0;

........

5. u-boot要关闭8bit hw ecc, 打开 CONFIG_NAND_4BIT_ECC。 这个很关键

在tiny210.h文件中

#define CONFIG_NAND_4BIT_ECC  1

/*
#define CONFIG_NAND_BL1_8BIT_ECC
#define CONFIG_8BIT_HW_ECC_SLC      1

*/

6. 修改nand 驱动

int board_nand_init(struct nand_chip *nand)

{

.....

if (!type->pagesize) {
  if (((nand->cellinfo >> 2) & 0x3) == 0) {
   nand_type = S3C_NAND_TYPE_SLC;
   nand->ecc.size = 512;
   nand->ecc.bytes = 4;

.......

if ((1024 << (tmp & 0x3)) > 512) {
#if !defined(CONFIG_NAND_BL1_8BIT_ECC)   
    nand->ecc.read_page = s3c_nand_read_page_1bit;
    nand->ecc.write_page = s3c_nand_write_page_1bit;
    nand->ecc.read_oob = s3c_nand_read_oob_1bit;
    nand->ecc.write_oob = s3c_nand_write_oob_1bit;
    nand->ecc.layout = &s3c_nand_oob_64;
    nand->ecc.hwctl = s3c_nand_enable_hwecc;
                nand->ecc.calculate = s3c_nand_calculate_ecc;
                nand->ecc.correct = s3c_nand_correct_data;
                nand->options |= NAND_NO_SUBPAGE_WRITE;
#else
    nand->ecc.read_page = s3c_nand_read_page_8bit;
    nand->ecc.write_page = s3c_nand_write_page_8bit;
    nand->ecc.read_oob = s3c_nand_read_oob_8bit;
    nand->ecc.write_oob = s3c_nand_write_oob_8bit;
    nand->ecc.layout = &s3c_nand_oob_64_8bit;
    nand->ecc.hwctl = s3c_nand_enable_hwecc_8bit;
    nand->ecc.calculate = s3c_nand_calculate_ecc_8bit;
    nand->ecc.correct = s3c_nand_correct_data_8bit;
    nand->ecc.size = 512;
    nand->ecc.bytes = 13;
    nand->options |= NAND_NO_SUBPAGE_WRITE;
#endif

....

7. kernel也要关闭8 bit hw ecc

差不多完成以上几步后, 用u-boot烧写rootfs_android.img就与superboot完全一致了。
android系统也就可以跑了。

u-boot-2012-07 for tiny210, 支持USB DNW, 支持YAFFS2烧写, 彻底抛弃superboot相关推荐

  1. 修改MfgTool 工具并通过 USB OTG 口来烧写自己制作的uboot\rootfs\.dtb\zImage文件

    一.改造烧写环境 MfgTool 是通过 USB OTG 接口将系统烧写进 EMMC 中,用usb连接电脑和USB OTG 接口 把拨码开关拨到 USB 下载模式,需要弹出tf或sd卡 打开" ...

  2. 移植uboot第九步:支持yaffs映像烧写

    写在前面: 我的博客已迁移至自建服务器:博客传送门,CSDN博客暂时停止,如有机器学习方面的兴趣,欢迎来看一看. 此外目前我在gitHub上准备一些李航的<统计学习方法>的实现算法,目标将 ...

  3. 如何让老Mac机支持USB安装Windows

    一些老Mac机的用户想装Windows,却发现自己的系统上的Boot Camp Assistant(以下简称BCA)没有USB安装Windows的选项. 下面以我的MacBook Pro (13-in ...

  4. OpenBSD 现已支持 USB 3.0

    从 OpenBSD 简短的发行说明可以知道,OpenBSD 现在已经支持 USB 3.0 设备! 这个声明还表示 USB 3.0 控制器支持 USB1.x 设备,将会继续改进 USB 3.0 端口. ...

  5. 嵌入式linux 系统支持usb wifi BL-R8723BT1

    目前,在消费电子或商业电子领域,许多产品跑的是Android系统;而在工控等行业,应用linux,Ubuntu系统,也是十分普遍;当前很多主流的开发平台,如全志,瑞星微,三星,官方提供的多是Andro ...

  6. linux板卡支持USB键盘,让linux2.6.24内核在开发板支持usb鼠标

    让linux2.6.24内核在开发板支持usb鼠标 发布时间:2008-03-27 16:06:22来源:红联作者:Inwind 今天下午,对以前移植的linux2.6.24内核不能检测USB鼠标进行 ...

  7. 2012 RDS Remote App 对于win7的支持问题

    2012 RDS Remote App 对于win7客户端支持不是很好,后端如果有两个会话主机或者多个会话主机,在remote app  网页形式下,先打开A机上的程序后,无法打开B机上的程序.对于w ...

  8. 启明云端分享|ESP32-S3 的 USB 支持 USB Host 吗?

    提示:作为Espressif(乐鑫科技)大中华区合作伙伴及sigmastar(厦门星宸)VAD合作伙伴,我们不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程供开发小伙伴参考.同时也用 ...

  9. 转usb驱动cmw500 ni_支持USB Type-C接口的外置蓝光驱动器IO Data BRP-UT6 / MC2本月发售...

    IO Data以其非正统的数据设备闻名,最近IO Data新推出了一款支持USB Type-C接口的外置超薄蓝光驱动器设备 BRP-UT6 / MC2,除了支持USB-C接口,其配置是非常标准的超薄外 ...

  10. sata接口测试软件,如何查看电脑是否支持USB 3.0?Hwinfo32检测SATA端口的方法

    Hwinfo32检测SATA端口有很多效用,其中我们查看该SATA是否支持USB 3.0就是一个判断,更多的信息是为了了解SATA目前已经可使用的和在使用的端口情况,具体方法可以查看下文中的方法进行判 ...

最新文章

  1. 关于 RMAN 备份 数据块 一致性的讨论
  2. [转]PHP用mysql数据库存储session
  3. xutils使用手册(二)——数据库
  4. linux【报错】userdel: user xiaoming is currently used by process 4713解决
  5. es6 ie不兼容 函数_ES6:什么是块级作用域?
  6. IDEA Maven项目左边栏只能看到pom文件
  7. 【Java】用for循环实现1+2+3......+100 =
  8. 渗透专用linux镜像,安装DVWA渗透环境到CentOS7系统中(附百度云ova镜像下载)-Go语言中文社区...
  9. ionic 配置java_Ionic 项目配置环境
  10. 谈谈Virtual DOM
  11. 苹果M1芯片:如何开启一个时代
  12. 应用HTMLParser解释操作HTML内容
  13. 基于vue的html编辑器,基于vue富文本编辑器的慢慢人生路
  14. js不同地图坐标系经纬度转换(同一经纬度,硬件/谷歌转高德地图;经纬度查询)
  15. vscode 未使用变量置灰
  16. 我的计算机老师500,我的老师_作文500字_描写人物的作文_第一范文网
  17. 微擎跳过云平台_2018年10月微擎安装之阿里云懒人教程篇
  18. 《Unsupervised Vision-and-Language Pre-training Without Parallel Images and Captions》论文阅读
  19. 【JS】Proxy(代理)
  20. 二维码的20种商业应用模式

热门文章

  1. DocFetcher CMD 启动脚本
  2. 【软件工程】第一章 软件工程概述 考试重点 复习记录
  3. aurelia_Aurelia历险记:创建自定义PDF查看器
  4. OOP编程思想(面对对象编程)
  5. 【控制】动力学建模举例 --> 拉格朗日法
  6. c盘python27文件夹可以删除嘛_c盘哪些目录可以删除
  7. 新书推荐 | Java核心技术卷Ⅰ:基础知识(原书第11版)
  8. python - jpg图片转pdf
  9. C语言函数库之字符串连接函数(string.h)
  10. C语言函数库之字符串拷贝函数(string.h)