注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
黑非拉的个人空间 https://home.eeworld.com.cn/space-uid-487146.html [收藏] [复制] [分享] [RSS]
日志

从NAND FLASH启动BeagleBone

已有 1622 次阅读2013-11-11 11:50

时隔半年多,重拾BeagleBone,看了下BeagleBone的启动,本贴总结如何从NAND FLASH启动BeagleBone。一直看前辈们的帖子一步一步学BeagleBone,这次也发个帖子玩玩。

一、BeagleBone Linux启动过程了解
1、上电,处理器PoR(Power-on Reset)后就会跳到复位向量所指的程序段去运行,这段程序位于处理器的ROM中,由处理器生产厂商提供,我们称其为ROM BootLoaderRBL)。RBL在初始化固定存储设备(NANDFlashMMCEtc.)后,根据CPU的跳线选择,从持久性存储设备(Beaglebone默认是从MMC)中将第二部要用到的bootloader读入内存(至于是内部还是外部,要根据ROM中的程序来定,Beaglebone是内部ram),而后将控制权转交。

2、Bootloader,分两步:
第一步的bootloader我们称为Secondary Program LoaderSPL),或MLOSPL完成有限的初始化工作,最重要的就是初始化DDR RAM(或是其他大一点的外部RAM),因为下一步的U-Boot将要进驻其中。在这之后,SPL从持久性存储设备中将U-Boot(其他bootloader也行,我们这里以U-Boot为例)读入DDR RAM中,随后转交CPU控制权。
第二步终于到了万众瞩目的U-Boot阶段,使能大部分的处理器功能,将操作系统内核读入DDR RAM中,而后配置启动参数启动Linux内核。当然U-Boot的功能可不止这些,U-Boot中提供了很多应用程序,可以使用tftp下载文件,或是格式化存储设备等等。

3、Linux内核启动……内核初始化,MMU使能,外部设备初始化,PID1Init进程启动……
至于从什么地方加载内核到DDRRAM中,完全由U-Boot的启动参数或命令决定的。

为什么要分这么几步呢?源自网络上的一段解释:
一步Boot起来不行吗?>_< 其实任何一门技术都是让我们的生活变的简单,Bootloader也是,所以其不可能是麻烦……首先,第一步的RBL不可能太复杂,ROM大小是一个限制,最重要的还是因为其所能获取的系统信息太少,所以处理器只能使用简单的方法去寻找能完成复杂功能的代码,而后将处理器初始化工作交给它来完成。其次,SPL也不能很复杂,因为其位于处理器的内部RAM中,一般处理器的内部RAM都要小于128KB,其大小注定其不能完成很复杂的功能,是故,再寻找能力更强大一些的代码,将处理器初始化工作交给它来完成。到了在DDR RAM中执行的BootloaderU-Boot算一个),其功能就比较完善了,此时就可以启动操作系统了。

张图:
1.png
2.png 硬件跳线提示SPL
3.png AM335x Technical Reference Manual.pdf


二、第一部分是对BeagleBone启动过程简单的介绍,了解到BeagleBone默认是从MMC SD Card读取SPL的,看下板子上焊接了R80-R95,R100-R115电阻哪些焊接了,哪些没焊接,然后再对照AM335x Technical Reference Manual看下,就知道啦!如何改成从NAND FLASH读取SPL呢?改下部分引脚的电平就行了,直接接地或接+3.3V就行了,0402的电阻手工不好焊接。

SD 卡启动配置SYSBOOT[7:0]00010111/SYSBOOT[15:8]01000000。
NAND启动配置SYSBOOT[7:0]00010010/SYSBOOT[15:8]01000010

BeagleBone板子上没有NAND FLASH,连saveenv都搞不了,怎么板办?
扩展吧…

借鉴下这篇帖子吧,chenzhufly,神人神贴,一直模仿,从未超越,哈哈:
上扩展原理图:

4.png
5.png

三、硬件准备完成,下面就是软件了:
从SD卡启动,U-BOOT界面下通过TFTP将MLO下载到内存,再从内存写入NAND的SPL分区:
[code]U-Boot# dcache off(tftp一直没反应,加了这个就可以了)
Data (writethrough) Cache is OFF
U-Boot# tftp 0x80007fc0 MLO
link up on port 0, speed 100, full duplex
Using cpsw device
TFTP from server 192.168.1.1; our IP address is 192.168.1.2
Filename \'MLO\'.
Load address: 0x80007fc0
Loading: ########
done
Bytes transferred = 37143 (9117 hex)
U-Boot# nand erase 0x00000000 0x9117

NAND erase: device 0 offset 0x0, size 0x9117
Erasing at 0x0 -- 100% complete.
OK
U-Boot# nand write 0x80007fc0 0x00000000 0x9117

NAND write: device 0 offset 0x0, size 0x9117
37143 bytes written: OK
[/code]
类似的将u-boot.img、uImage、jffs2文件镜像写入相应的分区:
[code]U-Boot# dcache off
Data (writethrough) Cache is OFF
U-Boot# tftp 0x80007fc0 u-boot.img  
link up on port 0, speed 100, full duplex
Using cpsw device
TFTP from server 192.168.1.1; our IP address is 192.168.1.2
Filename \'u-boot.img\'.
Load address: 0x80007fc0
Loading: #############################################
done
Bytes transferred = 230316 (383ac hex)
U-Boot# nand erase 0x00080000 0x383ac

NAND erase: offset is not a number
U-Boot# nand erase 0x00080000 0x383ac

NAND erase: device 0 offset 0x80000, size 0x383ac
Erasing at 0xa0000 -- 100% complete.
OK
U-Boot# nand write 0x80007fc0 0x00080000 0x383ac

NAND write: device 0 offset 0x80000, size 0x383ac
230316 bytes written: OK


U-Boot# dcache off
Data (writethrough) Cache is OFF
U-Boot# tftp 0x82000000 jffs2.img  
link up on port 0, speed 100, full duplex
Using cpsw device
TFTP from server 192.168.1.1; our IP address is 192.168.1.2
Filename \'jffs2.img\'.
Load address: 0x82000000
Loading: #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ################################
done
Bytes transferred = 14138752 (d7bd80 hex)
U-Boot# nandecc hw 0
HW ECC Hamming Code selected
U-Boot# nand erase 0x00780000 0xd7c000

NAND erase: device 0 offset 0x780000, size 0xd7c000
Erasing at 0x14e0000 -- 100% complete.
OK
U-Boot# nand write 0x82000000 0x00780000 0xd7c000

NAND write: device 0 offset 0x780000, size 0xd7c000
14139392 bytes written: OK


U-Boot# dcache off
Data (writethrough) Cache is OFF
U-Boot# tftp 0x82000000 jffs2.img
link up on port 0, speed 100, full duplex
Using cpsw device
TFTP from server 192.168.1.1; our IP address is 192.168.1.2
Filename \'jffs2.img\'.
Load address: 0x82000000
Loading: #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ################################
done
Bytes transferred = 14138752 (d7bd80 hex)
U-Boot# nandecc hw 0
HW ECC Hamming Code selected

U-Boot# nand erase clean 0x00780000 0x0f880000

NAND erase: device 0 offset 0x780000, size 0xf880000
Skipping bad block at  0x081a0000                                          
Skipping bad block at  0x081e0000                                          
Skipping bad block at  0x09980000                                          
Skipping bad block at  0x0a100000                                          
Skipping bad block at  0x0b700000                                          
Skipping bad block at  0x0b940000                                          
Skipping bad block at  0x0dea0000                                          
Skipping bad block at  0x0e620000                                          
Skipping bad block at  0x0f460000                                          
Erasing at 0xffe0000 -- 100% complete. Cleanmarker written at 0xffe0000.
OK
U-Boot# nand write 0x82000000 0x00780000 0xd80000

NAND write: device 0 offset 0x780000, size 0xd80000
14155776 bytes written: OK
[/code]
关于jffs2文件系统制作,下载,启动,请参考如下文档:

貌似jffs2文件系统已经被淘汰了,后面搞下UBIFS吧。。。
就到这了,感谢eeworld的chenzhufly,oschina的Cedric_Sun。。。
还是那句话:一直在模仿,从未超越过,汗。。。


[ 本帖最后由 黑非拉 于 2013-11-11 11:50 编辑 ]

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章