自己写Tiny6410的Bootloader总结!

发布者:悠闲之旅最新更新时间:2024-10-08 来源: cnblogs关键字:Tiny6410  Bootloader  nandflash 手机看文章 扫描二维码
随时随地手机看文章

  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__这个符号,所以操作系统不知道从哪里分配内存!


关键字:Tiny6410  Bootloader  nandflash 引用地址:自己写Tiny6410的Bootloader总结!

上一篇:ok6410如何从sdram中启动uboot 调试 这是一个猜想还没有验证
下一篇:Ubuntu14.04和Tiny6410挂载NFS服务!

推荐阅读最新更新时间:2024-11-19 13:48

STM32F745 USART1 Bootloader失败原因分析与解决
1. 概述 STM32 的 Bootloader 可以支持多种协议的,比如 USART,I2C,DFU 等等,USARTBootloader 是客户使用 STM32 的时候常常会用到的协议。客户在使用 STM32F745 进行产品开发的时候,出现了使用 STM32CubeProgramer 无法通过 USART1 Bootloader 进行程序升级的问题。为了解决客户的问题,我在 NUCLEO-F746ZG 开发板上,复现了同样的现象,本文针对这个现象,分析了该问题的原因和解决方法,作为一个记录。 2. 问题分析 STM32F745/6 USART1 Bootloader 使用的 TX 和 RX 分别是 PA9 和 PA10。
[单片机]
STM32F745 USART1 <font color='red'>Bootloader</font>失败原因分析与解决
UBOOT和bootloader的关系
uboot是一个通用的免费开放源码的boot程序,支持很多的处理器。 以下是现在网上下载一个u-boot-1.1.1版本,用于at91rm9200系统的修改的例子。最后在redhat8.0上,用gcc2.95编译通过。 在网上下载了uboot-1.1.1版本。要用于自己的at91rm9200的系统,这个系统的情况是: SDRAM: 32Mbytes NCS1 FLASH: 8Mbytes NCS0 涉及到的文件有四个: common.h flash.c flash.h ./board/at91rm9200dk/config.mk 以下简单的说说。 一、首先读读uboot自带的readme文件,了解了一个大概。
[单片机]
记录tiny6410 使用linux-2.6.28.6内核遇到starting kernel...的问题
1\问题的解决主要是参考了tiny210相同的问题 2\/home/suxuandong/Documents/computer/linux_kernel/tiny6410/linux-2.6.28.6/arch/arm/mach-s3c6400/include/mach/uncompress.h 修改这个文件
[单片机]
记录<font color='red'>tiny6410</font> 使用linux-2.6.28.6内核遇到starting kernel...的问题
移植u-boot-2010.03 --- 内核烧写到NandFlash
在成功编译u-boot后,可以把uboot烧写到NandFlash中,这样在每次开机后u-boot会自动运行,接下来就是要完成它的主要使命了---启动linux内核。可以使用tftp服务下载内核,并直接在内存中运行,但最重要的流程还是要烧写到NandFlash中,以免掉电后丢失。 这里我移植的u-boot还有个bug,就是nand erase 100000 500000 命令总是提示完成90%,导致我写入内核时,无法从NandFlash启动内核。这里做一个标记,日后发现解决方法后补充。先用ok6410自带的sd卡uboot烧写我编译的uboot和uImage实现。 1,通过SD卡启动方式,启动u-boot(飞凌公司提供的m
[单片机]
tiny6410烧录
#烧录 参考: 03- Tiny6410刷机指南.pdf 假设拿到的Tiny6410开发板没有提前下载任何程序,包括Bootloader. ##Bootloader - Superboot Superboot是FriendlyARM公司提供的Bootloader(非开源),提供USB下载功能。 只要烧写了Superboot, 就可以通过USB下载内核、文件系统到板子的Flash中。 因为Nand Flash现在还没有内容,现在只有通过SD卡启动。 完全空白的 SD 卡是不能直接启动 6410 开发板的,必须先在 PC 上使用特殊的烧写软 件把 BIOS(也可以称为 bootloader)写入 SD 卡才可以,并且写入的这
[单片机]
在PIC18单片机中使用BootLoader
摘要:介绍在PIC18系列单片机中使用BootLoader的原理、方法及优点;介绍HI-TECH公司使用C语言实现BootLoader的程序,给出详细的使用方法和参数配置方法;针对程序中存在的问题进行探讨和修改,使修改后的程序实用、可靠。另外,探讨对程序数据进行加密、加快下载速度、在RS485/RS422中使用BootLoader的方法和思路。根据此方法,读者可以编写出适合自己使用的BootLoader程序。 关键词:BootLoader PIC18 IAP 在线升级 引 言   PIC单片机的BootLoader属于需要自己写程序的那种,可以根据自己的需要写出各种功能的BootLoader程序来。目前,比较常见的BootLo
[单片机]
tiny6410的启动参数
bootargs=root=/dev/mtdblock2 rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200 bootcmd=nand led-start;nand erase ;fatload mmc 0:1 0x50008000 u-boot.bin;nand write.uboot 0x50008000 0 0x200000;fatload mmc 0:1 0x50008000 zImage;nand wri te.e 0x50008000 0x200000 0x500000; fatload mmc 0:1 0x50008000 rootfs.yaffs2; nan
[单片机]
S3C2440裸机------NandFlash编程_数据读取
1.NandFlash结构介绍 一个page是由2028的page data和64字节的OOB(out of bank)组成的, 位反转:NandFlash在读一页数据或者写一页数据的时候有可能会发生位反转,就是在读某一页数据的时候,里面有某一位可能是错误的,为了解决这个问题引入了oob区,写页数据的时候,把数据写进去,同时会生成一个校验码,把校验码写到oob区里面,读数据的时候,读出一页数据,使用oob里面的校验码对数据进行修正,oob的存在是为了解决NandFlash的缺点。 2.读数据 我们想读取NandFlash的时候,所谓的行地址是指在哪一个page上面,所谓的列地址是指在这个page上的哪一个地址(
[单片机]
S3C2440裸机------<font color='red'>NandFlash</font>编程_数据读取
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved