admin管理员组

文章数量:1567028

以下内容源于学习过程中的相关记录,欢迎互相交流与共同进步。

参考内容

(1)友善之臂FriendlyARM Mini2440用MiniTools通过USB烧写系统失败解决方案 

(2)Mini2440开发板串口连接_mini2440串口是公口还是母口-CSDN博客

(3)http://news.eeworld/mcu/ic496433.html

(4)s3c2440笔记1(启动)_str r0, [sp,#4]-CSDN博客

(5)广州友善电子计算机科技有限公司(Mini2440开发板官方相关网址)

(6)友善之家 嵌入式开发板技术交流社区(Mini2440开饭官方论坛)

(7)S3C2440全套中文手册(1-27章) - 道客巴巴

目录

前言

一、解决USB转串口线的问题

二、解决电源插口断裂问题

三、宏观认识Mini2440开发板

3.1 相关的用户手册

3.1.1 Mini2440用户手册

3.1.2 S3C2440芯片手册 

3.2 Mini2440开发板概况 

3.2.1 内存地址范围

3.2.2 地址空间范围

3.2.3 存储器资源

3.2.4 屏幕参数

3.2.5 启动方式

四、如何将镜像文件烧写至开发板

4.1 利用Jlink烧写BootLoader到NorFlash 中

步骤1:安装Jlink配套软件

步骤2:连接Jlink硬件

步骤3:进行配置与烧写

4.2 为何选择Minitools软件

4.2.1 使用DNW软件(无效)

4.2.2 使用SuperVivi Transfer Tool 软件(无效)

4.2.3 使用MiniTools工具(有效)

4.3 利用USB下载线+Minitools工具烧写WinCe系统到NandFlash中

4.4 利用USB下载线+Minitools工具烧写Linux+QT系统到NandFlash中

4.4.1 烧写过程

4.4.2 QT的简述

4.5 利用USB下载线+Minitools工具烧写裸机程序到内存中

4.6 利用SD卡烧写WinCE系统、Linux+QT系统

4.6.1  利用SD卡烧写WinCE系统

4.6.2  利用SD卡烧写Linux+QT系统

五、内容总结

5.1 不同烧写方式下的BootLoader文件 

5.1.1 利用SD卡烧写Linux+QT系统(可以使用vboot、uboot、Superboot2440)

5.1.2 利用USB下载线烧写Linux+QT系统(可以使用vboot或者uboot)

5.1.3 利用USB下载线 / SD卡烧写WinCe系统(只能使用nboot?)

5.1.4 关于vboot的简介

5.2 关于NorFlash中的Superboot2440.bin的作用

5.3  如何移植uboot并烧写在NorFlash中

5.4 为何一般都以NandFlash方式启动 

5.5 Mini2440的NorFlash ≈ X210中的IROM

5.6 各个镜像烧写在NandFlash的什么位置

六、在Mini2440上移植uboot与Linux内核

前言

在鱼塘买了一块二手的友善之臂的Mini2440开发板,方便和九鼎的X210开发板进行对比学习。但是因为没有系统与细致的视频教程,上手的过程中遇到了许多问题,但好在有X210开发板的学习经验而得以顺利解决,这里记录下来。

一、解决USB转串口线的问题

mini2440教程里提示要有一条母转母的直连串口线,但我手头上没有(毕竟以前没用过)。考虑到它引出的串口DB9是公头的,于是我去某宝买了一根母头的USB转串口(你问我为何不按照教程说的直接买一条母转母直连串口线?因为我觉得以后很少用到它)。

但买回来后发现串口没有输出,由于是二手的板子,我一度怀疑硬件上有问题。但经过网络查询,我意识到可能是我对串口的针脚定义了解不深,买错USB转串口线了。于是根据参考(2)顺利解决了这个问题,话说这个博主的历程真是和我一模一样的!

经过一番折腾之后,SCRT有输出时,串口连接情况如下图所示:

另外mini2440开发板所引出的DB9公头的针脚线序真是怪异!你说它是公头吧,但是(以公头的编号标准来说)它的针脚2是发送引脚,针脚3是接收引脚,针脚5是地线,这有点像母头的线序。

再后来我遵照教程买了一条母转母的串口线(其实是母转母直连转换头),强迫症看起来就舒服多了,串口也有输出。

 

二、解决电源插口断裂问题

二手的东西果然问题多,电源插口买来时就已经松动了,某个操作时不小心扯动了一下电源线,电源插口居然就完全断开了。原本打算拿去电路板维修店的,但维修费用偏高,于是在网上买了一条电源母插座转接线。

mini2440的电源适配器是5V2A的,而这条电源母插座转接线的规格参数是DDC-022B、3.5X1.3针、开孔8MM、PH2.0mm。使用这条电源母插座转接线时,开发板正常工作,这说明电路板正常工作时电流没有超过1A(听店主说最高承受电流1A)。

三、宏观认识Mini2440开发板

3.1 相关的用户手册

3.1.1 Mini2440用户手册

Mini2440用户手册,根据发布时间分为以下三个版本(见链接):

(1)Min2440用户手册-20110421(使用supervivi-128.bin、DNW 、USB下载线烧写镜像)

(2)Mini2440用户手册-20130517(改用Superboot2440.bin、MiniTools、USB下载线烧写镜像)

(3)Mini2440用户手册-20140103(这应该是最新版本,与20130517相差不大)

3.1.2 S3C2440芯片手册 

Mini2440 开发板采用的主芯片是 S3C2440,其英文用户手册见链接(位于光盘“其他参考资料/三星原官方网站S3C2440资料”目录),中文用户手册见参考(7)或者 链接。

3.2 Mini2440开发板概况 

由Mini2440用户手册-20130517版本可知,我购买的这款开发板的情况如下:

3.2.1 内存地址范围

DDR SDRAM 的地址范围是0x3000_0000 ~ 0x3400_0000,大小为 64MB。

3.2.2 地址空间范围

Mini2440的主芯片是S3C2440,而S3C2440是32bit的,按理可以寻址4GB空间;内存、端口(各种特殊寄存器的集合)以及各个SROM,都映射到同一个4G空间里(准确来说,对于mini2440是1G的空间)。(这段话待求证)

3.2.3 存储器资源

板载256MB的NandFlash、2MB的NorFlash、4KB的内部SRAM。

3.2.4 屏幕参数

我购买的这款开发板,其屏幕采用TD3.5,即统宝的3.5寸的屏幕。

3.2.5 启动方式

S3C2440的启动方式,是通过模式引脚 OM[1:0] 进行配置的,如下表所示:

  • OM[1:0] = 00时,处理器从NandFlash启动
  • OM[1:0] = 01时,处理器从16位宽度的ROM启动(NorFlash?)
  • OM[1:0] = 10时,处理器从32位宽度的ROM启动(NorFlash?)
  • OM[1:0] = 11时,处理器从Test Mode启动

由此可知S3C2440支持两种启动模式,NandFlash启动 和 NorFlash启动。对于mini2440开发板,拨动开关朝向屏幕一侧是NandFlash方式启动,朝外一侧是NorFlash方式启动。 

不管以哪种方式启动,CPU都是从0x0000_0000地址处开始执行,只是不同的启动方式下,0x0000_0000地址对应的启动介质不同。

以NandFlash方式启动时,4KB的内部SRAM被映射到0x0000_0000开始的地址空间。

以NorFlash方式启动时,2MB的NorFlash被映射到0x0000_0000开始的地址空间,而4KB的内部SRAM的开始地址是0x4000_0000。

这里侧重说明一下NandFlash方式启动:

如上面3.2.3所示,NandFlash接在NandFlash控制器上而非系统总线上,这表明NandFlash没有直接的地址线,所以它在S3C2440的8个Bank中没有对应的地址空间,因此不能直接把NandFlash映射到地址0x0000_0000处,需要将内部的SRAM作为一个载体。

如果以NandFlash方式启动,在S3C2440上电后,NandFlash控制器会自动将 NandFlash 的前4KB数据拷贝到内部SRAM中(即所谓的”Steppingstone”),同时把内部SRAM映射到nGCS0片选的空间(即0x0000_0000),系统会从内部SRAM中启动。

程序员需要编写一个 ≤4KB 的启动程序,并将它烧写到NandFlash的前4KB中。当然,这个启动程序也可以大于4KB,但它的前4KB必须完成以下工作:初始化SDRAM,将启动程序拷贝到SDRAM中继续运行。

以NandFlash方式启动时,系统是“看不见”NorFlash的。因为NorFlash原本挂接在nGCS0片选的地址空间上,当我们以NandFlash方式启动时,这部份地址空间会被内部的SRAM占用,因此系统无法“看见”NorFlash。

四、如何将镜像文件烧写至开发板

这里涉及以下两方面内容:

(1)如何将 BootLoader(或者叫BIOS)到烧写 NorFlash 中?

(2)如何利用BootLoader将其他镜像文件(Linux内核、根文件系统)烧写到NandFlash?

示意图如下所示: 

4.1 利用Jlink烧写BootLoader到NorFlash 中

注意下面4.1节的内容,是我按照Min2440用户手册-20110421(当时不知道它是旧版本)第二章的教程,利用Jlink将Bootloader文件烧写到NorFlash中的一些记录,而这个Bootloader文件叫supervivi-128.bin。supervivi-128.bin需要搭配DNW软件来使用,但DNW软件无法使用(见4.2.1) ,因此按照Mini2440用户手册-20130517那样,改用Minitools软件来烧写文件,此时需要将supervivi-128.bin更改为Supperboot2440.bin。由于将这两个文件烧写到NorFlash中的方法相同,这里只讲述如何烧写supervivi-128.bin到NorFlash中。

在出货前,官方已在mini2440开发板的NorFlash中烧录了一个名为“supervivi”的BootLoader。根据实际情况,我购买的这款开发板的supervivi是一个名为supervivi-128M.bin的文件,其大小为240多KB,适用于128MB/256MB~1GB大小的NandFlash的开发板。

虽然出货前 NorFlash 中已经烧录这个BootLoader,而且文档中也提到“NorFlash中的BootLoader一般不会被破坏”,但是这里为了熟悉操作,我还是使用Jlink(因为开发板配送有这个东西)重新将这个BootLoader烧写至NorFlash。示意图如下:

步骤1:安装Jlink配套软件

首先下载Jlink配套软件(见链接,包括Setup_JLinkARM_V402d文件、mini2440.jflash文件)。

然后点击Setup_JLinkARM_V402d.exe文件进行安装,完成后桌面会显示下面两个快捷方式,我们打开箭头所指的软件。

步骤2:连接Jlink硬件

按照下图所示,将Jlink相关硬件与PC机、Mini2440开发板进行连接。

步骤3:进行配置与烧写

选择NorFlash启动方式(否则进行连接时提示无法找到 flash devices),然后进行下面操作。

(1)首先打开工程文件。即选择File->Open Project…,选中mini2440.jflash文件。

(2)然后进行连接。即启动开发版,然后选择Target->Connect,连接成功会显示下面的内容:

(3)接着擦除NorFlash,即选择Target->Erase chip,擦除成功会显示下面的内容:

完成这步操作之后,以NorFlash启动方式重启开发板,串口上不会再有内容输出,因为NorFlash中的BootLoader已经被擦除。 

(4)然后设置烧写哪个文件以及烧写地址。选择File->Open…,选中supervivi-128M.bin文件,然后在弹出的框中将开始地址设置为0(因为CPU上电时默认执行地址0处的指令)。

(5)最后进行烧写。即选择Target->Program & Verify,烧写成功会提示如下:

(6)以NorFlash启动方式重启开发板,通过SCRT观察到串口有内容输出,这说明烧写成功。

4.2 为何选择Minitools软件

将BootLoader烧至NorFlash后,后续可以在NorFlash启动方式下,通过USB下载线和某些软件,将其他镜像文件烧写到NandFlash中。

我尝试过三款烧写软件,包括 DNW、SuperVivi Transfer Tool、Minitools,经过一番折腾之后选择Minitools软件(因为只有它有效,另外它也是最新的Mini2440用户手册推荐使用的)。

4.2.1 使用DNW软件(无效)

使用DNW软件配合USB下载线,这是20110421版本用户手册提到的方法,也是国嵌2440相关教程里的方法。

但在64位win11系统上死活安装不了教程里提到的、友善之臂提供的USB下载线驱动(兴许在XP系统可以),于是放弃使用。

4.2.2 使用SuperVivi Transfer Tool 软件(无效)

首先下载软件与解压以得到下图:

然后点击安装LibUsbDotNet_Setup.2.2.7.exe。

接着使用USB下载线连接mini2440开发板与PC机,此时在设备管理器中会显示如下:

选择并右键“SEC S3C2410X Test B/D”,单击“更新驱动程序”,单击“浏览计算机以查找驱动程序软件”,然后选择解压出来的Driver目录进行安装。如果提示数字签名问题,参考win10禁止数字签名进行解决。正确安装之后出现下面提示:

然后运行Program目录下的SuperVivi-USB-Transfer-Tool.exe程序,如果程序没有反应,拔出USB下载线再运行程序。如果显示“Mini2440 connected.”则说明连接成功。注意,后续都是使用这个工具来下载,而不是DNW。

接着,可以在这款软件界面的右上角选择串口对应的端口,以显示串口输出的内容。因为这款软件既有DNW的下载作用,也有SCRT显示串口信息作用(不过建议使用SCRT来显示串口信息,不要使用这个软件来显示串口信息,因为一大堆信息挤在一起怪凌乱的)。

最后配合串口终端进行其他镜像的烧写。也就是先在SCRT中输入某个操作所对应的字母,然后点击Upload按键(注意不是Download)选择相应文件,选择文件之后则会自动进行烧写(各个镜像烧写到NandFlash哪个位置应该是由supervivi内部代码决定)。

但是使用这款软件烧写某些镜像文件时老出错(见4.3.1),另外使用该软件经常导致PC机蓝屏,所以放弃使用。

4.2.3 使用MiniTools工具(有效)

首先在设备管理器中通过“卸载设备”来卸载(2)中安装的驱动,然后将USB下载线连接开发板与PC机,此时设备管器显示如下:

然后安装MiniTool工具,该工具位于开发板光盘的“windows平台工具/MiniTools-USB下载工具”中。

然后以NorFlash方式启动开发板,此时64位的win11系统无法识别开发板(如上图设备管理器所示),而且MiniTool工具显示“未连接开发板”(如下图所示)。上面是根据最新的用户手册来进行操作的,但却显示“未连接开发板”,因此我怀疑该软件是无效的。

但是仔细翻阅文档(如下图所示),得知之前烧写的supervivi-128M.bin不支持Minitools,需要改用Superboot2440.bin。

因此需要参考4.1节的内容,将Superboot2440.bin文件(大小约256KB,位于光盘目录/images目录下)重新烧写到 NorFlash 中。

然后将USB下载线连接开发板与PC机,并重新启动开发板,此时SCRT的串口输出如下(没有插入SD卡的显示情形):

MiniTool工具显示如下(已连接开发板): 

设备管理器显示如下(已经识别开发板): 

烧写Superboot2440.bin之后,后续可以配合Minitool工具,来烧写WinCe系统、linux+QT系统、裸机程序,非常方便与高效。

总结:后续 “利用USB下载线配合Minitool工具将各个镜像文件烧写到NandFlash中” 的前提,是已经把Superboot2440.bin文件烧写到NorFlash中,并且烧录其他镜像文件时,必须以NorFlash方式启动。NorFlash中的Superboot2440.bin文件一般不会被其他烧录操作破坏,所以这个文件烧录好后一般就不需要改动了。

4.3 利用USB下载线+Minitools工具烧写WinCe系统到NandFlash中

由于Mini2440开发板出货前烧录了linux+QT系统,为了突出对比,这里先烧写WinCe系统。

4.3.1、使用 SuperVivi Transfer Tool 软件来烧写WinCe系统(试错过程,可跳过不看

注意,这里的BootLoader是4.1节提到的superviv-128.bin文件,而下面的操作是试错过程的记录。

相关镜像文件见下载链接(这些文件由国嵌课程提供,是与WinCE5有关的镜像文件)。

(1)格式化NandFlash。首先正确连接USB下载线与串口线,打开SuperVivi Transfer Tool 软件,打开SCRT软件;然后以NorFlash方式启动开发板,在SuperVivi Transfer Tool 软件中输入“f”,以格式化NandFlash。 

(2)安装Bootloader。即在SuperVivi Transfer Tool 软件中输入字母“n”,表示要烧录WinCe系统对应的Bootloader;然后点击Upload,根据实际情况选择Bootloader,我的是nboot_T35.bin:

(3)下载烧写bootlogo。即在SuperVivi Transfer Tool 软件中输入字母“l”(小写的L),表示要烧录WinCe系统的logo。

(4)安装WinCE内核镜像。即在SuperVivi Transfer Tool 软件中输入字母“w”,表示要烧录WinCe系统对应的内核镜像。但不知道为何,此步骤总是报错而无法成功烧录镜像;搁置一段时间之后再重新实验时,打开SuperVivi Transfer Tool 软件又会导致PC机蓝屏,因此接下来都使用 Minitool 软件来进行烧写。

注意此时NorFlash中的BootLoader是Superboot2440.bin。 

(1)首先以NorFlash启动方式启动开发板,此时开发板将进入USB下载模式,SCRT输出如下(无SD卡插入情形):

(2)接着用USB下载线连接PC机与开发板。此时 MiniTools左下角将显示“已连接开发板”,串口会显示“USB Mode: Connected”:

(3)在Minitool主界面的左侧选择WinCE系统,将出现对应的配置界面。

注意这里要烧录Mini2440官方提供的WinCE6系统,而非国嵌提供的WinCE5(我试过烧录国嵌提供的WinCE5系统,无法启动)。

WinCE6.0系统资源,位于开发板光盘的/images/wince6.0目录中,其中bootlogo.bmp是启动画面,nboot_TD35.bin(大小约4KB)是适用于TD3.5寸屏幕的Bootloader文件,而NK_TD35.bin是适用于TD3.5寸屏幕的WinCE内核。

(4)顺利烧录之后开机是正常的,但不知为何会卡在下面这个画面:

另外可能是我个人笔记本的问题,Minitool软件的界面挺怪异的,后来参考下面解决了这个问题。

4.4 利用USB下载线+Minitools工具烧写Linux+QT系统到NandFlash中

4.4.1 烧写过程

注意这里的BootLoader是Superboot2440.bin,假设已经烧写到NorFlash中。 

(1)烧写 Linux+QT 系统的示意图如下。

 

(2)待烧写文件见链接(位于光盘目录/images/linux目录中),如下图箭头所示。其中zImage_TD35是内核镜像,vboot.bin是BootLoader,rootfs_qtopia_qt4是文件系统。关于QT的相关简介,见4.4.2小节。

(3)烧录过程和烧写WinCE系统一样,这里不再赘述。 

(4)烧录完成后,开发板完全启动后(校准过后)界面如下所示。

4.4.2 QT的简述

“Qtopia 2.2.0”是Qt公司基于“Qt/Embedded 2.3 库”开发的PDA版(即掌上电脑版)图形界面系统。

自从“Qtopia 2.2.0”之后,Qt公司就再也没有提供PDA版的图形系统了,最新版的Qtopia只有手机版本,而且Qt公司自从2009.3开始已经停止了所有Qtopia PDA 版和手机版图形系统的授权,但依然继续开发着“Qt/Embedded 库”(简称 QtE 库)。

QtE库的最新版本请到http://qt.nokia/查看,本开发板所移植的版本为QtE-4.8.5。

出货前Mini2440开发板一般都预装了“ Linux(内核)+ Qtopia 2.2.0(图形界面系统) + QtE-4.8.5(QtE库)”。

4.5 利用USB下载线+Minitools工具烧写裸机程序到内存中

这部分对应着Mini2440用户手册-20130517的2.4节内容,即把2440tes_TD35t.bin这个裸机文件烧写到内存中以测试各项硬件的功能。

回顾一下X210开发板,我们当时通过USB下载线利用DNW将裸机程序烧写在0xd002_0010这个地址处,该地址是主芯片内部SRAM的一个地址。而IROM的首地址(0xd000_0000)应该被映射为0地址了,因此开发板上电时执行的是IROM中的代码BL0。BL0这部份的代码从iNand或者SD卡中拷贝BL1到SRAM的0xd002_0010处,然后BL0跳转到0xd002_0010处继续执行。

而上图所示的设置,表示将2440test_TD35.bin这个裸机程序烧写到内存地址0x3000_0000处,此时能正常进入裸机程序提供的各项测试菜单界面。当我将2440test_TD35.bin烧写到0x3000_0008或者其他内存地址处时,无法进入裸机程序提供的各项测试菜单界面,这表明Superboot2440.bin这个BootLoader最后语句应该是跳转到内存地址0x3000_0000处的——就好比X210中BL0最后一定是跳转到0xd002_0010处继续执行那样。

mini2440的NorFlash(Superboot2440.bin)类似于X210的IROM(BL0),或者说IROM其实是一种NorFlash。

不同的是,X210的BL0已经写死在IROM中,也就是说BL0最后一定是跳转到0xd002_0010处;而这里的跳转位置由Superboot2440.bin决定,它是可以修改的。这里的Superboot2440.bin选择跳转到0x3000_0000,但我们可以修改Superboot2440.bin的源码,来修改跳转的位置。比如让它最后跳转到内存地址0x3000_0008处,这样的话,我就可以修改上图步骤3的地址为0x3000_0008。

遗憾的是,Superboot2440.bin并没有提供源码,因此如果使用“Superboot2440.bin+minitool工具”来将裸机程序烧写到内存时,步骤3中所填的内存地址一定是0x3000_0000。

另外从Superboot2440.bin的作用来看,它只是将另外一个Bootloader、内核镜像、文件系统烧写到NandFlash中而已,作用有点类似于fastboot工具。也就是说,Superboot2440.bin不像uboot那样用以启动内核,利用它烧写到NandFlash中的那个Bootloader(比如4.4.1中的vboot)才是用以启动内核的Bootloader——这个Bootloader的前4KB会被加载到内部的SRAM中运行。

4.6 利用SD卡烧写WinCE系统、Linux+QT系统

此部分对应着Mini2440用户手册的2.3节内容,根据手册内容进行操作即可。

利用SD卡烧写系统时,需要在NorFlash中提前烧录superboot2440.bin,并以NorFlash方式启动。

另外我使用8G的金士顿SD卡时会提示找不到SD卡,用4G的金士顿SD卡却可以,不知道为何。

4.6.1  利用SD卡烧写WinCE系统

以下是利用SD卡烧写WinCE系统时,串口输出的内容:

4.6.2  利用SD卡烧写Linux+QT系统

以下是利用SD卡烧写Linux+QT系统时,串口输出的内容:

五、内容总结

5.1 不同烧写方式下的BootLoader文件 

这里讨论一下不同烧写方式下,应该选择哪些BootLoader文件。 

5.1.1 利用SD卡烧写Linux+QT系统时(可以使用vboot、uboot、Superboot2440)

利用SD卡烧写Linux+QT系统时,由/imgaes/FriendlyARM.ini文件(如下所示)可知,用到的Bootloader文件是大小为256KB的Superboot2440.bin。

#This line cannot be removed. by FriendlyARM(www.arm9)

USBMode = No
Action = Install
OS = Linux
#OS = CE
VerifyNandWrite = Yes

LowFormat = No
Status Type = Beeper| LED

# Linux part
# vboot.bin、u-boot.bin、Superboot2440.bin要放在FriendlyARM.ini文件所在目录中
Linux-BootLoader = Superboot2440.bin  #测试可行,可以启动内核
#Linux-BootLoader = vboot.bin           #测试可行,可以启动内核
#Linux-BootLoader = u-boot.bin          #测试可行,但无法启动内容

Linux-Kernel = Linux/zImage_TD35 #这里是大写的Linux也没事?应该为linux/zImage_TD35
Linux-CommandLine = noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0 
Linux-RootFs-InstallImage = Linux/rootfs_qtopia_qt4.img

# Windows CE 6 part
#WindowsCE6-Bootloader = wince6/nboot_TD35.bin
#WindowsCE6-BootLogo = wince6/bootlogo.bmp
#WindowsCE6-InstallImage = wince6/NK_TD35.bin

#User Bin part
#UserBin-Bootloader = Superboot2440.bin
#UserBin-Image = 2440test/2440test_W35.bin
#userBinStartAddress=30000000

这里为何不是4.4节中的vboot.bin文件(即mini2440光盘\images\linux\vboot.bin文件)?

这里应该可以使用vboot.bin文件,或mini2440光盘\images\u-boot.bin文件,因为用户手册写到:

经过测试,这里的确可以使用 vboot.bin文件,或者u-boot.bin文件。使用 vboot.bin 文件时可以正常启动内核;使用u-boot.bin文件时只能进入uboot的shell界面而无法启动内核,如下所示:

U-Boot 2010.03 (Jul 03 2012 - 10:18:03)

 modified by tekkamanninja (tekkamanninja@163)
 Love Linux forever!!

I2C:   ready
DRAM:  64 MB
Flash:  2 MB
NAND:  256 MiB
*** Warning - bad CRC or NAND, using default environment

In:    serial
Out:   serial
Err:   serial
USB slave is enable!
Net:   dm9000
Hit any key to stop autoboot:  0  #这里打断uboot的启动,来看看uboot的shell界面
##### FriendlyARM U-Boot(2012-07) for 2440 #####
[f] Format the nand flash
[v] Download u-boot.bin
[k] Download Linux kernel
[y] Download root yaffs2 image
[a] Download Absolute User Application
[s] Set the boot parameter of Linux
[b] Boot Linux
[r] Reboot
[q] Quit to shell
Enter your Selection:q
[u-boot@MINI2440]# bdinfo  #这里打印一下板子的参数
arch_number = 0x000007CF   #板子的机器码
env_t       = 0x00000000
boot_params = 0x30000100   #启动参数的存放地址
DRAM bank   = 0x00000000
-> start    = 0x30000000   # 内存的起始物理地址
-> size     = 0x04000000
ethaddr     = 08:08:11:18:12:27
ip_addr     = 192.168.0.230
baudrate    = 115200 bps
[u-boot@MINI2440]# print  #这里打印一下环境变量
bootargs=noinitrd root=/dev/mtdblock3 console=ttySAC0 init=/linuxrc
bootcmd=nand read.i 0x30008000 60000 500000;bootm   
bootdelay=1   #这里不是3000_0000(防止覆盖uboot,裸机时没有uboot而可以是3000_0000)
baudrate=115200
ethaddr=08:08:11:18:12:27
ipaddr=192.168.0.230
serverip=192.168.0.1
gatewayip=192.168.0.1
netmask=255.255.255.0
stdin=serial
stdout=serial
stderr=serial
ethact=dm9000

Environment size: 313/131068 bytes
[u-boot@MINI2440]# set ipaddr 192.168.1.88   #更改内存中的那份uboot的环境变量
[u-boot@MINI2440]# set serverip 192.168.1.141
[u-boot@MINI2440]# set gatewayip 192.168.1.1 
[u-boot@MINI2440]# set bootdelay 3 
[u-boot@MINI2440]# save  #保存到NandFlash的环境变量分区
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x4000000000002 --   0% complete.
Writing to Nand... done
[u-boot@MINI2440]# reset  #重启开发板
resetting ...



U-Boot 2010.03 (Jul 03 2012 - 10:18:03)

 modified by tekkamanninja (tekkamanninja@163)
 Love Linux forever!!

I2C:   ready
DRAM:  64 MB
Flash:  2 MB
NAND:  256 MiB
In:    serial
Out:   serial
Err:   serial
USB slave is enable!
Net:   dm9000
Hit any key to stop autoboot:  0 #这里不打断uboot的启动

#----------情形1-------------
NAND read: device 0 offset 0x60000, size 0x500000
NAND read from offset 6000033fbb914 failed 0
 5242880 bytes read: ERROR    #显示读取错误

Starting kernel ... #卡死,为何

#----------情形2-------------
NAND read: device 0 offset 0x60000, size 0x500000
 5242880 bytes read: OK

Starting kernel ...

undefined instruction
pc : [<30508064>]          lr : [<33fa6960>]
sp : 33f3ddf4  ip : 30008000     fp : 30000100
r10: 000007cf  r9 : 33fcb4a8     r8 : 33f3ffe0
r7 : 30008000  r6 : 33fbcb18     r5 : 00000000  r4 : 33f3ffc4
r3 : 30008003  r2 : 30000100     r1 : 00008000  r0 : 00000000
Flags: nzCv  IRQs off  FIQs off  Mode SVC_32
Resetting CPU ...

resetting ...

5.1.2 利用USB下载线烧写Linux+QT系统时(可以使用vboot或者uboot)

由4.4.1节可知,此时用到的Bootloader文件,是大小为4KB的/images/linux/vboot文件。

这里是否可以使用 mini2440光盘\images\u-boot.bin文件,或者 mini2440光盘\images\Supperboot2440.bin文件?

经验证,这里无法使用Supperboot2440.bin文件,烧写该文件启动时SCRT输出如下:

Superboot-2440 V1.5(20150414) by FriendlyARM

Booting from NAND
M ECC Err
M ECC Err
M ECC Err
No OS found

经验证,这里可以使用u-boot.bin文件:

U-Boot 2010.03 (Jul 03 2012 - 10:18:03)

 modified by tekkamanninja (tekkamanninja@163)
 Love Linux forever!!

I2C:   ready
DRAM:  64 MB
Flash:  2 MB
NAND:  256 MiB
In:    serial
Out:   serial
Err:   serial
USB slave is enable!
Net:   dm9000
Hit any key to stop autoboot:  0 
##### FriendlyARM U-Boot(2012-07) for 2440 #####
[f] Format the nand flash
[v] Download u-boot.bin
[k] Download Linux kernel
[y] Download root yaffs2 image
[a] Download Absolute User Application
[s] Set the boot parameter of Linux
[b] Boot Linux
[r] Reboot
[q] Quit to shell
Enter your Selection:

5.1.3 利用USB下载线 / SD卡烧写WinCe系统时(只能使用nboot?)

利用SD卡烧写或者USB下载线烧写WinCe系统时,用到的BootLoader都是4KB大小的nboot_TD35.bin文件。

5.1.4 关于vboot的简介

《mini2440之U-boot移植详细手册-20100419.pdf》中有下面一段话:

另外在Min2440用户手册-20110421中有下面的文字:

这表明vboot是友善之臂公司提供的一款开源bootloader,它仅适用于启动Linux系统。

其代码位于“mini2440光盘\linux\vboot-src-20100727.tar”。 

5.2 关于NorFlash中的Superboot2440.bin的作用

由上面可知,mini2440中的NorFlash的作用,好像都是借助于烧录在它上面的Bootloader(这里是Superboot2440.bin)来将其他镜像文件(比如vboot、zImage、rootfs)烧写到NandFlash中,烧录好之后都是以NandFlash方式启动的。

从这个角度来看,烧录在NorFlash中的Bootloader,与其说它是一个Bootloader,不如说它是一个需要与Minitool软件配合使用的、单纯用来下载镜像文件的程序(类似于fastboot工具)。因为我对Bootloader的理解,是以X210开发板中的uboot为对标的,而X210开发板的uboot既可以用来初始化硬件,也可以配合fastboot工具用来下载其他镜像文件。对于superboot2440.bin,因为没有其源码,因此我只体会到它的下载作用,没有看到它对硬件的初始化工作。

另外,MiniToolS软件也明确地表示自己是一款USB烧写工具。

5.3  移植uboot并烧写在NorFlash中

是否可以移植uboot,并把它烧写到NorFlash中,然后完全从NorFlash中启动?这肯定可以的,因为NorFlash有2MB这么大,足够烧录uboot了。移植的uboot,必须初始化 NandFlash 控制器与内存,然后把NandFlash中的内核镜像文件加载到内存中。

另外还要考虑uboot是否重定位的问题:可以重定位,将NorFlash中的uboot重定位到内存中;也可以不重定位,直接运行NorFlash中的uboot即可。有时间参考下面博客进行移植:

uboot的移植——移植uboot官方的uboot到x210开发板(1)

uboot的移植——移植uboot官方的uboot到x210开发板(2)

5.4 为何一般都以NandFlash方式启动? 

Mini2440用户手册-20130517中有下面这一段话:

Mini2440具备两种Flash,一种是 Nor Flash,型号为 SST39VF1601(AMD29LV160DB与此引脚兼容),大小为 2Mbyte;另一种是 Nand Flash,型号为 K9F1G08,大小为 128M(旧版本为 K9F1208,大小为 64Mbyte)。S3C2440 支持这两种 Flash 启动系统,通过拨动开关 S2,你可以选择从 NOR 或者从 NAND 启动系统。实际的产品中大都使用一片 Nand Flash 就够了,因为我们为了方便用户开发学习,因此还保留了 Nor Flash。

也就是说,实际产品一般会采用三星的SteppingStone技术因而只配置NandFlash,而Mini2440开发板配置的2MB的NorFlash只不过是为了方便而已。因此为了贴近实际,除了下载BootLoader时用到NorFlash之外,一般不建议使用NorFlash空间(尽量不要将一个完整的Bootloader部署在NorFlash中并以NorFlash方式启动)。

另外,在《Mini2440 Linux移植开发实战指南.pdf》中也有下面一段话:

因为 S3C2440 可以支持 NAND Flash 启动,如果把开发板的 S2 开关拨到 NAND 一侧,这时就相当于完全摘除了 NOR Flash,这也是为什么有的开发板只提供了 Nand Flash 的原因。但为了开发方便,我们特意保留了 NOR Flash,把不经常更改的 Bootloader 烧写到 NOR Flash中,并借助它来管理 Nand Flash(主要是烧写或者备份)可以大大提升开发的效率。因为开发中难免会不小心破坏了 Nand Flash 里面的全部内容,这就不得不借助 JTAG 工具来恢复 Nand Flash 里面的 Bootloader,一般 JTAG 操作的步骤是很麻烦的,而且速度也不快。而通过 NOR Flash 里面的 bootloader,则可以根据自己的意图把它设计得很强大,在这里,我们的 supervivi主要是利用了 USB 快速下载的特性,实现了对 Nand Flash 的各种简洁的烧写功能。

5.5 Mini2440的NorFlash ≈ X210中的IROM

我觉得 Mini2440的NorFlash 类似于 X210中的IROM;不同之处在于,X210中的IROM里的代码是写死的,而Mini2440的NorFlash中的代码可以修改与重新烧写的(见4.1、4.5节内容)。

5.6 各个镜像烧写在NandFlash的什么位置?

这个应该是由Superboot2440.bin的源码来规定的,但可惜没有这个文件的源码。

不过 Superboot2440.bin 肯定知道各个镜像在NandFlash的位置,毕竟之前都是通过它来将镜像烧写到NandFlash中的。我们唯一能确定的是,内核镜像最后是被加载到内存0x3000_0000处的,因为Superboot2440.bin最后会跳转到这个地址处(见4.5的描述)。(删除线的内容待求证,因为根据uboot,内核好像又是被加载到0x3000_8000的;又或者说,uboot和Supperboot2440.bin,两者将内核拷贝到内存的地址不一样,前者是0x3000_8000,后者是0x3000_0000?)

由下面第六节的移植文档 《Mini2440 Linux移植开发实战指南.pdf》(如下图),可知各个镜像在NandFlash中的位置,即Superboot2440.bin划分的分区表(移植文档说的是supervivi这个BootLoader对应的分区表,但我觉得友善之臂公司的提供其他BootLoader,比如vboot、uboot应该也采用这个分区表,因为应该都是同一个人开发的。这个分区表也写入了Linux内核源文件/arch/arm/mach-s3c2440/mach-mini2440.c文件中)。

即友善之臂移植的内核、BootLoader对NandFlash的存储空间是这样规划的(两者必须相同):

由此可知,BootLoader是被烧写到NandFlash中的Block0的(X210好像是烧写在Block1)。 

在《Mini2440 Linux移植开发实战指南.pdf》2.1.5节内容中也有下面一段话:

根据上面的 supervivi 功能一览表,我们可以知道,使用其中的[a]功能,就可以方便的把其他 bootloader 烧写到 Nand Flash 的起始地址 Block 0,如果其他的 bootloader 并不大,比如一般常见的开源 U-boot,或者我们提供的 vboot 或者 nboot 等,也可以使用[v]功能项来烧写,它们的结果都是一样的:把程序烧写到 Nand Flash 的 Block 0 起始的位置。

六、在Mini2440上移植uboot与Linux内核

前面的所有内容,都是为了在Mini2440开发板上移植uboot与Linux内核做准备,因为我买这款开发板的目的,就是为了和X210开发板的移植工作进行对比。

Mini2440开发板的uboot、Linux内核的移植工作文档说明,在该开发板光盘的“友善之臂编写或整理的参考文档”目录中,包括以下两个说明文档:

  • 《mini2440之U-boot移植详细手册-20100419.pdf》
  • 《Mini2440 Linux移植开发实战指南.pdf》

有时间可以参考这两个文档进行移植开发。

本文标签: 操作开发板