u-boot-2016.09移植(3)-u-boot-spl.bin

发布者:素雅之韵最新更新时间:2022-07-13 来源: csdn关键字:u-boot  移植  spl  bin 手机看文章 扫描二维码
随时随地手机看文章

从本节开始,就正式进入移植过程,首先进行u-boot-spl.bin的移植。


一、因为第一步要移植u-boot-spl.bin,所以我们需要先在头文件里添加宏CONFIG_SPL


u-boot-2016.09$ vim include/configs/tq210.h 


#define CONFIG_SPL


二、时钟初始化

由上节分析,由于我们没有定义宏CONFIG_SKIP_LOWLEVEL_INIT,所以进入board/samsung/tq210/lowlevel_init.S进行硬件初始化。


首先添加S5PV210的时钟相关寄存器


u-boot-2016.09$ vim arch/arm/mach-s5pv210/include/mach/clock.h

这里写图片描述

这里写图片描述

并在tq210.c中加入clock头文件并实现clock_init(这里也如lowlevel_init.S使用CONFIG_SPL_BUILD 来控制编译顺序):

这里写图片描述

这里写图片描述

在clock_init的实现函数中,使用了struct s5pv210_clock const clock = (struct s5pv210_clock )samsung_get_base_clock(),其中samsung_get_base_clock,在arch/arm/mach-s5pv210/include/mach/cpu.h中实现:

这里写图片描述

将其修改为

这里写图片描述

三、DDR初始化


u-boot-2016.09$ vim board/samsung/tq210/lowlevel_init.S 

这里写图片描述

添加DMC信息,参考《嵌入式Linux学习笔记(基于s5pv210、tq210)》,这里就不详细贴出来了。


在tq210.c中添加dmc的头文件并实现ddr_init。


#include

这里写图片描述

在arch/arm/mach-s5pv210/include/mach/cpu.h中添加宏


#define S5PV210_DMC0_BASE       0xF0000000

#define S5PV210_DMC1_BASE       0xF1400000   


SAMSUNG_BASE(dmc0, DMC0_BASE)

SAMSUNG_BASE(dmc1, DMC1_BASE)


S5PV210_DMC0_BASE与S5PV210_DMC1_BASE在第一节我们已经定义了,如果没有定义,这里自己定义


接着执行到_main函数,

这里写图片描述

由于u-boot-spl.bin文件比较小,使用SRAM提供栈内存就好,所以可以将栈指针屏蔽掉,修改为:

这里写图片描述

五、拷贝BL2到SDRAM

在tq210.c中实现拷贝函数,拷贝完成后,直接跳转到DDR的起始地址执行 BL2。

这里写图片描述

CONFIG_SYS_SDRAM_BASE 在 u-boot-2014.04/include/configs/smdkv210.h 中定义,我们将其修改为我们实际 DDR 的起始地址0x20000000,CopySDMMCtoMem实现从SD的34扇区复制BL2到到DDR的起始地址0x20000000。


注:

因为BL1最大只能到16K,而每个扇区的大小为512B,16K正好是32个扇区,所以为了安全起见,我们将BL2的起始扇区设置为34。这个值并不固定,只要比u-boot-spl.bin的大小大就可以了。


四、编译


u-boot-2016.09$ make tq210_defconfig

u-boot-2016.09$ make spl/u-boot-spl.bin

这里写图片描述

修改configs/tq210_defconfig,添加CONFIG_SPL=y


再次编译,发现出现mkexynosspl:Command not find。分析scripts/Makefile.spl

这里写图片描述

如果定义了CONFIG_SUMSANG,就会添加目标(obj)/$(BOARD)-spl.bin,展开即为spl/tq210-spl.bin,这里需要一个添加头文件的工具。


我这里的工具是使用的国嵌的mkv210,将其复制到tool下,将名字改为mktq210spl,修改

scripts/Makefile.spl

这里写图片描述

再次编译,发现已经产生了我们需要的spl/tq210-spl.bin。


五、烧录与测试

单独的.bin文件启动看不到现象,这里我在board/samsung/tq210/lowlevel_init.S中添加了蜂鸣器鸣叫的片段。


.globl lowlevel_init

lowlevel_init:

mov r9, lr


#ifdef CONFIG_SPL_BUILD 


    bl clock_init      /* 时钟初始化 */


    bl beep_asm_init    

    bl delay

    bl beep_asm_off


    bl ddr_init        /* DDR初始化 */


    bl uart_asm_init

#endif


mov pc, r9


/*

     * beep_asm_init: 初始化蜂鸣器,并让其发声 

     */

    beep_asm_init: 

        ldr r0, = 0xE02000A0

        ldr r1, = 0x00000010

        str r1, [r0]


        ldr r0, = 0xE02000A4

            ldr r1, = 0x2

        str r1, [r0]


        mov pc, lr


    /*

     * delay: 延时

     */   

    delay:

        mov r0, #0x2000000


    delay_loop:

        sub r0, r0, #1

        cmp r0, #0

        bne delay_loop


        mov pc, lr


    /*

     * beep_asm_off: 关闭蜂鸣器

     */

    beep_asm_off:

        ldr r0, = 0xE02000A4

        ldr r1, = 0x0

        str r1, [r0]


        mov pc, lr


为了偷懒,我直接使用了网上搜索的TQ210的裸机LED程序,编译得到led.bin。


烧录测试:

使用DD_for_win7.exe将tq210-spl.bin与led.bin分别烧入1和34扇区

这里写图片描述

这里写图片描述

然后将SD卡插入开发板,打开电源,发现蜂鸣器鸣叫一声,并且LED不停闪烁,表示我们tq210-spl.bin移植成功。


注:

DD_for_win7.exe有添加头字节选项,如果我们使用tq210-spl.bin就不需要选择这个选项,如果使用u-boot-spl.bin就必须将这个选项勾上。

关键字:u-boot  移植  spl  bin 引用地址:u-boot-2016.09移植(3)-u-boot-spl.bin

上一篇:u-boot-2016.09移植(2)-uboot启动简易分析
下一篇:ARMv7-A,ARMv7-R和ARMv7-M之间有什么区别?

推荐阅读最新更新时间:2024-11-09 12:53

关于Blob的介绍及其在S3C44B0上的移植
Bootloader对于嵌入式设备来说至关重要,它涉及到许多硬件相关的知识。对于自制的嵌入式开发板,它又是不可跳过的步骤,所以很多人对于它感到很头痛。本文将以一款优秀的Bootloader Blob为例,详细讲解它的运行原理以及在S3C44B0通用处理器上的移植过程,为在嵌入式设备上的后续软件开发打下基础 。 1 Blob简介 Blob是Boot Loader Object的缩写,是一款功能强大的Bootloader。它遵循GPL,源代码完全开放。Blob既可以用来简单的调试,也可以启动Linux kernel。Blob最初是Jan-Derk Bakker和Erik Mouw为一块名为LART(Linux Advanced Ra
[单片机]
关于Blob的介绍及其在S3C44B0上的<font color='red'>移植</font>
Ubuntu 11.10 下移植 madplay 到 mini2440
今天为了学习移植madplay 花了半天时间,多亏了有丰富的网络资源才让我在一个又一个问题中得到解决的方法。 逛街回来后,马上在 Ubuntu 11.10 下进行madplay 对mini2440的移植,由于有了早上移植madplay的经验之后,晚上的移植工作做得还是比较顺手。 1、解压源代码包 # cd tarball # for f in $(ls *.tar.gz); do tar -zxvf $f –C ../src-arm; done 2、编译madplay及其所依赖的库文件 (1)设定编译器环境变量 在ubuntu命令行下输入 # export CC=arm-linux-gcc (2)编译zlib,因为libid3ta
[单片机]
Windows下u-boot-2011.03在Mini2440移植详解(6)
Nor Flash启动 Nor Flash:SST39VF1601 ---2MB SDRAM: HY57V561620FTP-H,容量:256Mb(16M×16bit)=32MB,频率:133MHZ,开发板带2片* 32MB=64MB 前记: 关于这一步的移植花费了很大的时间。我们知道,在gdb调试时,是直接load代码到CONFIG_SYS_TEXT_BASE 所对应的SDRAM地址处,CONFIG_SYS_TEXT_BASE 在文件u-boot-2011.03boardsamsungmini2440config.mk中定义。假设CONFIG_SYS_TEXT_BASE=0x33000000,那么调试时就将ubo
[单片机]
Windows下u-boot-2011.03在Mini2440<font color='red'>移植</font>详解(6)
linux-2.6.32在mini2440开发板上移植 LCD背光控制
编者:lcd的背光控制,其实就是一个I/O口的驱动,其和led控制如出一辙,甚至更是简单,因为一般都是同时控制几个LED,这里就这是一个。标准的入门级驱动。这个不多说,按照手册来。这里的I/O端口是GPG4. 1 LCD 背光控制原理 在mini2440/micro2440 开发板中,LCD 背光是通过CPU 的LCD_PWR 引脚来控制的,从原理图中可以看出,它对应于GPG4,当LCD_PWR 输出为高电平“1”时,将打开背光;当输出为低电平“0”时,将关闭背光(注意:这里只是打开和关闭背光,而并没有背光亮度的调节作用)。 2 在内核中添加背光驱动程序 现在,我们需要增加一个简单的背光驱动,以便能够通过软件便可简单的控制背光
[单片机]
linux-2.6.32在mini2440开发板上<font color='red'>移植</font> LCD背光控制
Linux3.4.2移植CS8900网卡驱动到优龙FS2410开发板
一、S3C2410和CS8900的硬件连接 FS2410开发板的原理图我没有找到,但可看参考资料2,里面写的非常详细 二、移植过程 a) 配置内核支持S3C2410 选好Samsung S3C24XX SoCs后,会自动返回到上一级菜单(即前一张图),然后选择: b) 配置内核支持CS89x0网卡 Device Drivers-- Network device support-- Ethernet driver support— c) 修改drivers/net/ethenet/cirrus/cs89x0.c: (1)在文件开头增加以下几行,它们在宏CONFIG_ARCH_S3C24XX
[单片机]
Linux3.4.2<font color='red'>移植</font>CS8900网卡驱动到优龙FS2410开发板
Linux-2.6.39在Tiny6410上的移植 - 外设驱动移植
Linux内核版本号:linux 2.6.39 交叉编译工具:arm-linux-gcc 4.5.1 Linux内核下载:www.kernel.org 开发板:友善之臂Tiny6410 LCD:友善之臂S70 一、移植LED驱动 打开arch/arm/mach-s3c64xx/mach-mini6410.c添加下列代码: 1 static struct gpio_led tiny6410_gpio_led = { 2 = { 3 .name = led1 , //设备名 4 .gpio = S3C64XX_GPK(4), //GPK4 5 .act
[单片机]
linux内核移植和网卡驱动(二)
一,内核移植步骤: 1, 修改顶层目录下的 Makefile ARCH ?= $(SUBARCH) CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE: % =%) 修改为: ARCH :=arm CROSS_COMPILE :=/usr/local/arm/4.4.3/bin/arm-linux- 2, 拷贝配置文件 这里用的是 FS2410 开发板,拷贝相应的板文件到顶层目录下 cp arch/arm/configs/s3c2410_defconfig ./ 编译配置文件,生成 .config 文件: Make s3c2410_defconfig 内核配置的目的: .config
[单片机]
minigui1.6移植到mini2440
系统环境: Crosstool: arm-linux-gcc-4.4.3硬件环境: Host:X86PC Target:SMDK2416 软件环境: Host:debian5 Target:arm-linux kernel:linux-2.6.38.8 Email:hebu007@163.com by 厦门 湖里 Make install 如有提示 “Permission denied”则表明需要用root权限 需要准备的源文件包: libminigui-1.6.10.tar------MiniGui库 minigui-res-1.6.10.tar-----资源文件 mg-samples-1.6.10.tar---例子
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved