热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

u-boot-2012-07fortiny210,支持USBDNW,支持YAFFS2烧写,彻底抛弃superboot

买tiny210开发板之前,真不知道连u-boot也不是提供。superboot虽好,但只提供二进制文件,且只能用SD卡烧写,太不爽了。从QQ2440,到Tiny6410,再到Tiny21

买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系统也就可以跑了。


推荐阅读
  • 掌握DSP必备的56个核心问题,我已经将其收藏以备不时之需! ... [详细]
  • 从零起步:使用IntelliJ IDEA搭建Spring Boot应用的详细指南
    从零起步:使用IntelliJ IDEA搭建Spring Boot应用的详细指南 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • MySQL性能优化与调参指南【数据库管理】
    本文详细探讨了MySQL数据库的性能优化与参数调整技巧,旨在帮助数据库管理员和开发人员提升系统的运行效率。内容涵盖索引优化、查询优化、配置参数调整等方面,结合实际案例进行深入分析,提供实用的操作建议。此外,还介绍了常见的性能监控工具和方法,助力读者全面掌握MySQL性能优化的核心技能。 ... [详细]
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
  • 深入解析零拷贝技术(Zerocopy)及其应用优势
    零拷贝技术(Zero-copy)是Netty框架中的一个关键特性,其核心在于减少数据在操作系统内核与用户空间之间的传输次数。通过避免不必要的内存复制操作,零拷贝显著提高了数据传输的效率和性能。本文将深入探讨零拷贝的工作原理及其在实际应用中的优势,包括降低CPU负载、减少内存带宽消耗以及提高系统吞吐量等方面。 ... [详细]
  • Windows环境下详细教程:如何搭建Git服务
    Windows环境下详细教程:如何搭建Git服务 ... [详细]
  • 多种实现 Windows 定时自动执行任务的专业技巧与方案
    在Windows系统中,实现定时自动执行任务有多种专业技巧和方案。常见的方法包括:使用Windows任务计划程序、开发Windows服务以及利用SQL Server Agent作业。这些方法被广泛应用于各种自动化场景,多数技术人员对此都有所了解。 ... [详细]
  • 本文探讨了将PEBuilder转换为DIBooter.sh的方法,重点介绍了如何将DI工具集成到启动层,实现离线镜像引导安装。通过使用DD命令替代传统的grub-install工具,实现了GRUB的离线安装。此外,还详细解析了bootice工具的工作原理及其在该过程中的应用,确保系统在无网络环境下也能顺利引导和安装。 ... [详细]
  • Spring Boot 实战(一):基础的CRUD操作详解
    在《Spring Boot 实战(一)》中,详细介绍了基础的CRUD操作,涵盖创建、读取、更新和删除等核心功能,适合初学者快速掌握Spring Boot框架的应用开发技巧。 ... [详细]
  • 利用Swiss数据集进行多元线性回归分析,首先通过散点图矩阵(pairs plot)初步探索各变量之间的关系。接着,绘制残差图以评估模型的拟合效果和假设条件的合理性,进一步诊断和验证模型的有效性。通过这些图形工具,可以更深入地理解模型的性能和潜在问题。 ... [详细]
  • 利用PaddleSharp模块在C#中实现图像文字识别功能测试
    PaddleSharp 是 PaddleInferenceCAPI 的 C# 封装库,适用于 Windows (x64)、NVIDIA GPU 和 Linux (Ubuntu 20.04) 等平台。本文详细介绍了如何使用 PaddleSharp 在 C# 环境中实现图像文字识别功能,并进行了全面的功能测试,验证了其在多种硬件配置下的稳定性和准确性。 ... [详细]
  • MVVM架构~mvc,mvp,mvvm大话开篇
    返回目录百度百科的定义:MVP是从经典的模式MVC演变而来,它们的基本思想有相通的地方:ControllerPresenter负责逻辑的处理,Model提供数据,View负责显示。作为一种新的模 ... [详细]
  • 本文深入探讨了IO复用技术的原理与实现,重点分析了其在解决C10K问题中的关键作用。IO复用技术允许单个进程同时管理多个IO对象,如文件、套接字和管道等,通过系统调用如`select`、`poll`和`epoll`,高效地处理大量并发连接。文章详细介绍了这些技术的工作机制,并结合实际案例,展示了它们在高并发场景下的应用效果。 ... [详细]
  • 如何构建和部署C# Windows服务应用程序
    本文介绍了如何从零开始构建和部署C# Windows服务应用程序。通过详细步骤和代码示例,帮助读者掌握创建、配置和部署Windows服务的关键技术点,适合初学者和有经验的开发人员参考。 ... [详细]
author-avatar
qlb
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有