Bootloader,分两步:
第一步的bootloader我们称为Secondary Program Loader(SPL),或MLO。SPL完成有限的初始化工作,最重要的就是初始化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使能,外部设备初始化,PID(1)Init进程启动……
至于从什么地方加载内核到DDRRAM中,完全由U-Boot的启动参数或命令决定的。
为什么要分这么几步呢?源自网络上的一段解释:
一步Boot起来不行吗?>_< 其实任何一门技术都是让我们的生活变的简单,Bootloader也是,所以其不可能是麻烦……首先,第一步的RBL不可能太复杂,ROM大小是一个限制,最重要的还是因为其所能获取的系统信息太少,所以处理器只能使用简单的方法去寻找能完成复杂功能的代码,而后将处理器初始化工作交给它来完成。其次,SPL也不能很复杂,因为其位于处理器的内部RAM中,一般处理器的内部RAM都要小于128KB,其大小注定其不能完成很复杂的功能,是故,再寻找能力更强大一些的代码,将处理器初始化工作交给它来完成。到了在DDR RAM中执行的Bootloader(U-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。。。
还是那句话:一直在模仿,从未超越过,汗。。。