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分区:
- 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
复制代码类似的将u-boot.img、uImage、jffs2文件镜像写入相应的分区:
- 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
复制代码关于jffs2文件系统制作,下载,启动,请参考如下文档:
貌似jffs2文件系统已经被淘汰了,后面搞下UBIFS吧。。。
就到这了,感谢eeworld的chenzhufly,oschina的Cedric_Sun。。。
还是那句话:一直在模仿,从未超越过,汗。。。