1、由于Tiny6410 2G版的Nand flash(K9GAG08U0E)的页大小是8K的,但是s3c6410芯片设置为nand flash启动时先从nand flash复制8K代码到片内内存中去,这个复制不是直接复制nand flash 的第0页的8K而是从前四页中分别取出2K代码到片内内存(这是硬件决定的,为了兼容所有nand flash)。所以友善之臂就使下载uboot到nand flash时每页只用前2K的空间而后面6K的空间装载的内容和前2K是一样的!而从nand flash 复制代码到sdram中去时只复制每页的前2K内容。(通过uboot命令读取nand flash的内容知道的)

  Tiny6410 2G版的Linux内核存放在Nand Flash的地址为:  0x400000(1G版的地址为0x80000)

  用SD卡烧写系统时会在nandflash上写一个bootargs(相当于cmdline)此地址为:0x200000(1G版的地址为0x40000)

  BootLoader将内核复制到SDRAM中的地址为 : 0x50008000

  BootLoader向内核传递的tag参数在SDRAM中的位置为:0x50000100

  S3C6410的机器码为 :2520

  BootLoader向内核传递的cmdline为:

  root=/dev/mtdblock2 rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200 lcd=S70(Yaffs文件系统)

  或root=ubi0:FriendlyARM-root ubi.mtd=2 rootfstype=ubifs init=/linuxrc console=ttySAC0,115200 lcd=S70(ubifs文件系统)

  2、Tiny6410 2G版Nand flash K9GAG08U0E适合1KBytes/12 bit 硬件ECC校验,而6410 最大支持 512 Bytes/8 bit 硬件ECC校验,

  所以S3C6410在硬件上根本就不支持K9GAG08U0E,然而为什么友善之臂的superboot为什么能成功启动系统?因为他们使用了软件和硬件结合的ECC校验算法,所以大部分情况下可以启动成功!但是这个软件算法友善之臂没有开源(理由是这个算法只有他们公司能够做到,哎,太小气了,建议初学者千万不要买这个版本),所以如果想在这块板子上跑自己的bootloader基本上是不可能成功启动整个Linux系统的,除非你够牛逼能够自己写出这个ECC算法!!

  (这是花了我几天的时间得出的教训,即使你的的bootloader是对的,但是每次复制内核到SDRAM时都会出现各种各样的错误!而在1G版的Tiny6410上能正常运行!)

  3、原来Uboot还可以通过命令读去S3C6410寄存器的值,只要用内存读取命令然后地址设为你要读的寄存器的值就行!

  (这样调试就更加方便了!今天突然想到Uboot既然能读内存数据,为什么不能读寄存器的值了,然后我就试了一下,尽然成功了,哈哈!!)

  4、Uboot 最终跳转到内存固定地址到Linux内核入口:

      void (*theKernel)(int zero, int arch, unsigned int params);  // 定义一个函数指针

      theKernel = (void (*)(int,int,unsigned int))0x50008000;     // 将函数指针赋值为内存地址 0x50008000

      theKernel(0,2520,0x50000100);//go to linux kernel           // 跳转到 0x50008000 运行

  5、当一切问题都解决后,我的Uboot终于能够启动Linux内核后,能够运行Linux的shell程序了,但是当我执行例如 cp mv 等这种需要分配内存才能执行的命令时候,会出现提示说不能分配内存,并且命令执行失败,这个问题是几个月后我在看书的时候突然知道了到底是什么原因出现这种情况的:所有需要动态分配的内存空间都是在堆中分配的,操作系统中的内存管理模块在初始化时,需要知道它所管理的内存空间的起始地址是什么,这需要通过连接脚本的配合来获取,连接脚本的__end__符号就是表示堆的开始地址,堆的结束地址是内存的剩余所有空间。

就是因为我在写连接脚本的时候没有__end__这个符号,所以操作系统不知道从哪里分配内存!

  

转载于:https://www.cnblogs.com/cxd2014/p/4369942.html

自己写Tiny6410的Bootloader总结!相关推荐

  1. 自己用C语言写RL78 serial bootloader

    自己用C语言写RL78 serial bootloader 了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制b ...

  2. Pixhawk---烧写FMU/IO bootloader

    Pixhawk-FMU/IO烧写Bootloader 1 说明   用J-link来烧写Bootloader,Pixhawk板FMU/IO接口说明:      J-link接口说明:      Pix ...

  3. Arduino Mega2560 作为烧录器烧写Mega2560的bootloader

    本文参考自:http://www.51hei.com/bbs/dpj-48026-1.html 打开arduino IDE 软件,菜单栏 文件-->示例-->ArduinoISP,这个就是 ...

  4. 使用UsbAsp给UNO烧写bootloader ATMEGA16U2、ATMEGA328P固件烧写教程

    arduino板由于操作不发导致固件损坏,或者想更新固件怎么办?今天给大家介绍一下如何使用UsbAsp烧写bootloader.个人认为,此种方法比使用TinyIsp要方便并且成本更低. 首先确保手上 ...

  5. 自己用C语言写NXP S32K116 serial bootloader

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader) 欢迎咨询或定制bootloader(在线升级程序). 到目前为止," ...

  6. 烧写APM板的bootloader

    所需工具材料: 1.一个AVRusbasp编程器以及相应的烧写软件,推荐progisp1.72下载链接https://download.csdn.net/download/sky7723/124776 ...

  7. 使用USBASP给Arduino烧写bootloader教程

    源:使用UsbAsp给UNO烧写bootloader ATMEGA16U2.ATMEGA328P固件烧写教程 arduino板由于操作不发导致固件损坏,或者想更新固件怎么办?今天给大家介绍一下如何使用 ...

  8. tiny4412u-boot烧写及根文件系统制作(不进入终端问题)

    http://m.blog.csdn.net/article/details?id=51400196(转) VMware12 环境:ubuntu12.4 开发板:tiny4412 首先烧写bootlo ...

  9. Bootloader之BareBox 之路(1)--安装

    之前跑一块低端的ARM板子时,由于没上操作系统,所以自己写了个bootloader,通过usb更新应用程序.新的这块要跑Linux,Ethernet,USB,SD卡一应俱全,虽然改了一下能够启动Lin ...

  10. ARM上的Bootloader的具体实现1071098736

    BootLoader简介: 当完成用户程序的编译并下载到目标板上运行时,总是要首 先进行存储器的映射,然后通过 ADS(或 SDT)调试环境下载,显然,这个过程对 普通用户来说显得特别烦琐,然而,要在 ...

最新文章

  1. 阿里员工哀叹不读书已经没有出路,招聘简历基本都是985
  2. pytorch下载时出现错误:EOFError: Compressed file ended before the end-of-stream marker was reached
  3. AI研究员收集NLP数据的四种创意方法(大牛分享)
  4. c# 线程间操作无效: 从不是创建控件“”的线程访问它,用托管来解决
  5. python 函数练习集锦
  6. SAP 动态设置 GUI STATUS 灰色不可用 或者隐藏
  7. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1079:计算分数加减表达式的值
  8. 源码分析系列1:HashMap源码分析(基于JDK1.8)
  9. _attribute_((packed))
  10. 高等组合学笔记(四): 生成函数应用, Catalan问题
  11. Java线程之间的协作
  12. SSIS连接-左外连接
  13. supersocket缓冲区_关于supersocker的数据传输中遇到的问题
  14. 修改保留注释_Kraken2:宏基因组快速物种注释神器
  15. ubuntu16.04下怎么安装flash player
  16. 前端页面调试、抓包工具——spy-debugger
  17. 国内供应链金融模式梳理及思考
  18. R 18切割替换练习
  19. Internet选项 添加信任站点
  20. 波动率曲面(完整版)

热门文章

  1. UIButton的resizableImageWithCapInsets使用解析
  2. View如何设置16进制颜色值
  3. Web前端开发规范文档(转)
  4. FOSCommentBundle功能包:添加Symfony2内建的ACL安全
  5. winform datagridview 自定义tooltip
  6. Internet Explorer更改MIME处理方式以提高安全性
  7. “拯救网站运维经理赵明”已近尾声
  8. 波形分析--串口数据
  9. P3371 单源最短路径【模板】 洛谷
  10. 乘法器的Verilog HDL实现