uboot移植三:添加开发板电源制锁与串口打印'o'

一、在lowlevel_init.S中添加电源制锁与串口打印'o'

电源制锁的代码:

/* added by lwl; PS_HOLDER_CONTROL */
ldr r0, =0xE010E81C
ldr r1, [r0]
ldr r2, =0x301
orr r1, r1, r2
str r1, [r0]

/* end added */

查看s5pv210芯片手册寄存器0xE010E81C,写相应的位即可,主要用作软启动。

串口打印'o'的代码:

/* added by lwl; uart print "o" */
ldr r1, =0x4f4f4f4f
ldr r0, =S5PC110_UART_BASE
str r1, [r0, #0x820] @'O'
/* end added */

这里使用的是串口2,该uboot中串口初始化程序是不完全的,由于s5pv210内部的iRom中有串口初始化的程序,在这里其实串口是可以不用再次初始化的,只用把待发送的数据写到相应串口的数据寄存器中即可。

二、修改连接脚本u-boot.lds

lowlevel_init.S是在start.S中调用的,为uboot启动的第一个阶段,该阶阶段发生在重定位之前,是在s5pv210内部的iRam中运行的,iRam中运行的是整个uboot前8k的代码,所以必须保证start.S与lowlevel_init.S在整个uboot中的前8k代码中,这就要在连接脚本的代码段进行指明,将这两个文件对应的目标文件连接到uboot的开头为止。该uboot本身将start.S连接在了最开头的位置,我只用加lowlevel_init.S就ok了,如下:

.text :
{
*(.__image_copy_start)
CPUDIR/start.o (.text*)
board/samsung/goni/lowlevel_init.o (.text*)
*(.text*)

}

三、修改lowlevel_init.S目录下的Makefile防止lowlevel_init函数重定义

include $(TOPDIR)/config.mk


LIB = $(obj)lib$(BOARD).o


COBJS-y := goni.o onenand.o
#SOBJS := lowlevel_init.o
# added by lwl; make but not link
LOWLEVEL_INIT := lowlevel_init.o


SRCS    := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
OBJS := $(addprefix $(obj),$(COBJS-y))
SOBJS := $(addprefix $(obj),$(SOBJS))


all: $(obj).depend $(LOWLEVEL_INIT) $(LIB)


$(LIB): $(obj).depend $(SOBJS) $(OBJS)

$(call cmd_link_o_target, $(SOBJS) $(OBJS))

单独定义LOWLEVEL_INIT变量,不让其作为$(LIB)的依赖,也就是在此处的Makefile中不进行链接。而是作为默认目标all的依赖,只编译,然后依据连接脚本uboot.lds在顶层Makefile中进行链接。

猜你喜欢

转载自blog.csdn.net/wenlong_l/article/details/80875284