嵌入式linux软件平台--SPL
2019-07-12 14:40 发布
生成海报
介绍嵌入式linux软件平台相关内容,记录嵌入式linux软件平台搭建过程。
功能 SPL抽取u-boot的部分代码进行编译生成,SPL完成cpu的初始化,DDR初始化,spi接口及nor flash的初始化等内容,然后载入u-boot代码到DDR,跳转到u-boot执行.
在SPL模块实现对power,clock,ddr,uart0,spi nor flash的配置,并读取spi nor flash中的内容到ddr中,同时实现从uart启动后,通过xmodem下载spl到内存,启动后通过ymodem下载u-boot并启动,主要包括以下内容:设置外部时钟频率 配置core, mpu电源 配置core, mpu频率 配置pin mux 根据DDR3的参数配置DDR 配置spi nor flash驱动 实现从spi nor flash载入u-boot并启动 实现从ymodem下载u-boot并启动
代码流程 SPL的执行流程: reset: (start.S) lowlevel_init(lowlevel_init.S) s_init(board.c),配置引脚,UART0, DDR _main: (crt0.S) board_init_f(arch/arm/lib/spl.c) board_init_r(common/spl.c)//申请内存,初始化主板,判断启动类型 spl_board_init(common/spl.c)//初始化gpmc,mpu,musb spl_spi_load_image(spi_spl_load.c) spi_flash_probe(spi_flash.c)//配置spi总线并检测flash spi_flash_read//读取u-boot头结构 spl_parse_image_header//u-boot头结构校验处理 spi_flash_read//读取u-boot数据 jump_to_image_no_args//跳转到u-boot执行
s_init: 配置watch dog timer 配置PLL 配置RTC 配置UART 输出版本信息 配置外部引脚 初始化DDR board_init_r: 初始化u-boot载入使用的DDR空间 获取当前使用的启动类型(根据片上ROM载入SPL代码的方式决定) 根据载入模式读取u-boot文件 跳转到u-boot入口
编译 编译生成SPL文件:
make clean ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
make distclean ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- am335x_evm_spiboot_config
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
使用 下载SPL文件到spi nor flash:
通过UART的xmodem下载编译生成的u-boot-spl.bin文件
CPB启动后ROM进入UART启动模式,PC端通过xmodem发送u-boot-spl.bin文件
u-boot-spl.bin文件发送结束后会自动执行,进入ymodem接收模式,PC端可以通过ymodem发送u-boot.bin文件
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮