用J-LINK烧写Bootloader到ARM开发板的Nand Flash

摘要:
以下描述了J-LINK编写Nand的原理。引导加载程序。本文使用Vivi作为bin,因为不同的开发板有不同的引导程序,所以请根据实际情况进行选择。在修改或移植新的引导加载程序之后,您仍然可以以这种方式将其烧录。有了引导加载器,内核和文件系统将很容易编写。

一、起因和原理

起因:以往电脑烧写bootloader到 nand中是采用jtag以及jflash,jtag是使用并口连接的,目前电脑一般没有并口了,现今一般是使用较便宜入手的J-LINK,使用USB,就不能再使用以往的jflash烧写了。因此需要找到一个J-LINK烧写Nand的方法。

以下说明J-LINK烧写Nand的原理。

以realarm2410开发板为例子说明,该开发板要把跳线设置为Nand Flash启动模式才可以操作Nand,此时的内存映射如下图:

image

图1

如图1,内存中并没有对Nand的映射,而只能通过S3C2410A中的Nand Flash的控制器访问Nand,而访问nand的这一段程序大小,肯定会超过4KB,因此只能放在SDRAM 中执行。假设板子出厂时是完全空白的,nand中没有程序,断电情况下,SDRAM和SRAM中更不可能存储程序。那么,可按照下面思路来进行,结合图2的内存分配图来说明。

image
image

图2:SRAM和SDRAM的分配图

把SRAM用于执行初始化SDRAM的程序init.bin,该程序小于4KB;要烧写的bootloader.bin放在SDRAM最开始的1MB空间内,通常bootloader只有几十KB,留出1MB的空间已足够;从0x33df3000-0x33ef3000的1MB空间用于存放烧写的执行代码RO的段,1MB的Heap和20K的Stack也如图2所示分配,剩下的SDRAM用作RW段。

因此,烧写步骤为:

  1. 准备好init.bin,bootloader.bin,program.bin三个文件;
  2. 把init.bin加载到SRAM中,并运行;
  3. 把bootloader.bin加载到SDRAM的0x30000000-0x30100000;
  4. 把program.bin加载到SDRAM的0x33df3000-0x33ef3000中,并运行;

下面进行具体说明。

 

二、准备好init.bin,bootloader.bin,program.bin文件

init.bin是一小段在SRAM中运行的,初始化SDRAM的程序,如何通过分散加载文件来设置程序的加载段,参考我的另一篇博文Keil MDK使用J-LINK分别在Sram,Nor Flash以及Sdram中调试代码的原理和方法,该文介绍了设置RO、RW、Stack、Heap等加载位置的原理和方法。程序的实现也很简单,不再赘述。这里提供init.bin的MDK工程下载。Target需选择RunFromSram_norflash_boot,生成的bin文件改名为init.bin则可。

bootloader.bin本文采用vivi,因为不同的开发板bootloader不一样,所以请根据实际选择。

program.bin涉及到nand flash的控制器对nand的操作,以及坏块识别、ecc纠错等,具体可参照S3C2410A以及NAND FLASH的数据手册,本文主要不是论述nand驱动的,不在本文赘述;要把程序设置为在SDRAM的0x33df3000起始位置加载执行,也请参考我的另一篇博文Keil MDK使用J-LINK分别在Sram,Nor Flash以及Sdram中调试代码的原理和方法。这里提供program.bin的MDK工程下载

三、加载Init.bin到SRAM中执行

加载bin文件可以使用J-LINK进行,为方便叙述,把准备好的init.bin,vivi(就是bootloader.bin),program.bin放到JLink.exe的目录中,执行JLink.exe,进入控制台。连接开发板串口0到电脑串口,并打开电脑的串口终端(建议使用SecureCRT)。在JLink控制台按如下进行操作:

J-Link复位:

J-Link> r

加载init.bin到0x0位置(即SRAM的起始地址),设置PC为0x0,并执行:

J-Link> Loadbin InitSdram.bin 0
J-Link> setpc 0
J-Link> go

这样SDRAM就被初始化了。

四、加载bootloader.bin到0x30000000-0x30100000

这里bootloader.bin就是vivi文件。按如下操作:

暂停init.bin的运行:

J-Link> h

 

加载vivi到0x30000000起始的位置:

J-Link> Loadbin vivi 0x30000000

五、加载program到0x33df3000并执行

加载program.bin到0x33df3000并执行:

J-Link> Loadbin program.bin 0x33df3000
J-Link> setpc 0x33df3000
J-Link> go

在电脑串口终端上可以看到打印的烧写Nand Flash过程的信息,以及校验结果。烧写完成后,重新启动开发板就可以看到vivi的启动界面以及串口打印信息了。

修改或移植了新的bootloader后,仍可按照这个方式烧写。有了bootloader后,内核以及文件系统的烧写自然就不在话下了。

免责声明:文章转载自《用J-LINK烧写Bootloader到ARM开发板的Nand Flash》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Kubernetes用Helm安装Ingress并踩一下使用的坑JavaScript权威指南(第6版)[MOBI|EPUB|AZW3]下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

NEXUS S安卓4.0/4.1 【完美】 ROOT教程

原文链接:http://bbs.gfan.com/android-3517082-1-1.html 进行bootloader解锁(即使解锁,再上锁),会清除你手机上的【所有】数据(包括内部的16G SD 存储),包括但不限于应用、设置、联系人和账户等,请做好数据备份!·理论上对各种版本、各种机型的ROM都可以获取ROOT权限。·关于Busybox,麻烦各位...

NOR型flash与NAND型flash的区别

1) 闪存芯片读写的基本单位不同  应用程序对NOR芯片操作以“字”为基本单位。为了方便对大容量NOR闪存的管理,通常将NOR闪存分成大小为128KB或者64KB的逻辑块,有时候块内还分成扇区。读写时需要同时指定逻辑块号和块内偏移。应用程序对NAND芯片操作是以“块”为基本单位。NAND闪存的块比较小,一般是8KB,然后每块又分成页,页的大小一般是512字...

ArchLinux安装与配置小结

最近无意间发现一个基于ArchLinux的发行版——BlackArch,主题十分炫酷(中二)。当然渗透类的Linux 发行版已经有BackTrack和Kali了,不过都是源于Debian的,使用者众多,随波逐流无法突显我们的逼格, 要论小众,ArchLinux算是个中翘楚。呵呵开个玩笑,其实ArchLinux的亮点在于“小”,不同于其他发行版的“最小化安装...

收录 Uboot 详解

--------------------------------------------------------------------------------------------------------  我们知道,bootloader是系统上电后最初加载运行的代码。它提供了处理器上电复位后最开始需要执行的初始化代码。     在PC机上引导程序一般...

游戏破解学习1

游戏破解学习1 第一次接触游戏破解,先试一个比较简单的网页上的小游戏都要用到的flash 打开cheat engine,找到flash进程 将十进制的地址转化为十六进制 这个进程就是flash进程 用ce修改阳光的数量 一开始阳光的数量是50,收集一个阳关,阳光数量变成75,再输入75,(这些操作的目的是为了追踪,找到阳关的地址数值来更改)...

【嵌入式开发】 Bootloader 详解 ( 代码环境 | ARM 启动流程 | uboot 工作流程 | 架构设计)

作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42462795 转载请著名出处 相关资源下载 :  -- u-boot 源码 : http://download.csdn.net/detail/han1202012/8342761 -- S3C2440 文档 : ht...