CubieBoard博客-HomeCubieTech公司网站

cubie.cc CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 10255|回复: 8

不加载操作系统,直接在U-boot上执行自己的代码[转载两篇]

[复制链接]

19

主题

9

好友

2497

积分

版主

Rank: 7Rank: 7Rank: 7

贡献
391
金钱
1061
威望
387
买家信用
卖家信用
积分
2497
发表于 2013-4-17 15:29:53 |显示全部楼层
本帖最后由 WindLand 于 2013-4-18 11:39 编辑

虽说硬件不同,但是原理一样


I.本文转自:http://blog.csdn.net/wfq0624/article/details/8605164

1     Cortex A8 LED点亮程序分析
1.1     环境搭建准备工作
软件环境:            1.下载eclipse软件(绿色软件)
                             2.安装“yagarto-bu-2.22_gcc-4.7.1-c-c++_nl-1.20.0_gdb-7.4.1_eabi_20120616.exe”
                             3. tftpd32.exe
硬件平台:           FS_S5PC100

搭建硬件环境:     1.PC UART-->开发板串口COM1(通过串口线)
                             2.电脑网卡-->开发板网卡(通过网线)

1.2     启动Eclipse软件,导入已有LED project
1.3     Makefile文件分析红色字体必须根据实际安装路径和项目路径细微修改
# CORTEX-A8 PERI DRIVER CODE
# VERSION 1.0
# ATHUOR lapset (klapset@gmail.com)
# MODIFY DATE
#   2012.2.22 by lapset ,to change the format of Makefile
#NOTE :please fix the following info to adpat to your environment
CROSS_COMPILE=arm-none-eabi-
LDPATH="C:\Program Files\yagarto\lib\gcc\arm-none-eabi\4.7.1\include"
OUTPATH="G:\tftp"
NAME=led
COMMONPATH = "G:\ARM\example modify\led_FS_S5PC100\common\include"
#=============================================================================#
#DO NOT TO CHANG THE CODE AFTER THIS !!!
export CFLAGS LD CC STRIP OBJCOPY OBJDUMP COMMONPATH
CFLAGS +=   -g   -O0 -fno-strict-aliasing   -mabi=apcs-gnu -mfpu=vfpv3 -mfloat-abi=softfp  -fno-builtin -nostdinc   -isystem$(LDPATH) -I$(COMMONPATH)                                          
LD  = $(CROSS_COMPILE)ld
CC  = $(CROSS_COMPILE)gcc
STRIP  = $(CROSS_COMPILE)strip
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump

OBJS := start/start.o common/src/printf.o common/src/uart.o common/src/_udivsi3.o common/src/_umodsi3.o$(NAME).o
SUBDIRS := common/src/ start/
all:$(SUBDIRS)$(OBJS)
    $(LD) $(OBJS) -Tmap.lds -o$(NAME).elf
    $(OBJCOPY) -O binary $(NAME).elf$(NAME).bin
    $(OBJDUMP) -D$(NAME).elf >$(NAME).dis
    cp ./$(NAME).bin$(OUTPATH)
$(SUBDIRS):
    $(MAKE) -C $@
%.o: %.S
    $(CC)$(CFLAGS) -c -o $@ $<
%.o: %.c
    $(CC)$(CFLAGS) -c -o $@ $<
clean:
rm -rf $(OBJS) *.elf *.bin *.dis$(OUTPATH)/$(NAME).bin
1.4     Build project生成led.bin文件1.    鼠标右击project name,选择“Build Project


2.    成功后,会在该目录下【OUTPATH="G:\tftp"】生成led.bin文件,
如下所示,将tftpd32.exe和led.bin放在同一个目录下

1.5     配置ip地址1.    让开发板上电,进入uboot
2.    输入pri 打印环境变量,使用setenv命令来修改参数,让ipPC ip地址保持一致
3.    Ping ip地址,显示alive字样,表示网络连接OK

4.     打开PC上的tftpd32.exe软件,设置好对应的ip地址


              5.执行tftp下载led.bin到内存0x20008000地址处,然后运行该程序”go 20008000”
      




很久没玩这个了,也没上过线了。如果有需要交流的,欢迎来邮件: leapmusic@QQ邮箱
回复

使用道具 举报

19

主题

9

好友

2497

积分

版主

Rank: 7Rank: 7Rank: 7

贡献
391
金钱
1061
威望
387
买家信用
卖家信用
积分
2497
发表于 2013-4-17 15:30:36 |显示全部楼层
II.本文转自:http://blog.csdn.net/joans123/article/details/7380906

使用gcc编译出二进制文件给uboot中go的命令执行.

test.c 文件如下
================ Start of test.c =======================================
#include <stdio.h>

typedef void (*pr)(const char *fmt, ...);

int main(int argc, char **argv)
{
    // 0x80e96d8c 是uboot中 printf的地址, 查看uboot下面的 System.map可知.
    pr print = (pr)0x80e96d8c;

    print("hello wolrd");
    while (1);
    return 0;
}
================ End of test.c =======================================


Makefile 文件如下:
1. 使用gcc的-c选项声场.o文件
2. 使用ld并指定lds文件生成elf文件
3. 使用objcopy去掉符号表, 生成二进制文件
================ Start of Makefile =======================================
CROSS_COMPILE ?= /opt/toolchain/arm-eabi-4.4.0/bin/arm-eabi-

CC := ${CROSS_COMPILE}gcc
LD  := ${CROSS_COMPILE}ld
NM  := ${CROSS_COMPILE}nm
OBJCOPY := ${CROSS_COMPILE}objcopy
OBJDUMP := ${CROSS_COMPILE}objdump

CFLAGS := -fno-builtin -Wall -Wstrict-prototypes -fno-stack-protector -fno-common -nostdinc -static -fPIC
CFLAGS += -isystem /opt/toolchain/arm-eabi-4.4.0/bin/../lib/gcc/arm-eabi/4.4.0/include  
CFLAGS +=  -marm -mabi=aapcs-linux -mno-thumb-interwork -march=armv5

#LDFLAGS := -Ttext 0x82000000 -e main --oformat binary
LDFLAGS :=  -Bstatic -T test.lds -v

# output map file
LDFLAGS += -Map test.map

LDFLAGS += -L /opt/toolchain/arm-eabi-4.4.0/bin/../lib/gcc/arm-eabi/4.4.0 -lgcc

all:
    $(CC) ${CFLAGS} -c go_test.c -o go_test.o
    $(LD) ${LDFLAGS} go_test.o -o go_test.elf
    $(NM) -n go_test.elf > go_test.map
    $(OBJCOPY) -S -O binary go_test.elf go_test.bin
    cp go_test.bin /tftpboot/

================ End of Makefile =======================================


test.lds 文件如下:
OUTPUT_FORMAT : 输出的文件格式
OUTPUT_ARCH   : 输出文件的cpu类型
ENTRY         : 输出文件的入口, 与ld中的-e选项等效
指定其实地址为 : 0x82000000, 根据uboot中加载地址而定
================ Start of test.lds =======================================
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(main)
SECTIONS
{
. = 0x82000000;
.text : { *(.text) }
.data : { *(.data) }
.bss  : { *(.bss)  }
}
================ End of test.lds =======================================



使用上面3个文件便可编译出 go_test.bin的二进制文件, 然后拷贝到 /tftpboot目录下, 并在uboot中输入:
#tftp 82000000 go_test.bin
#go 82000000
执行这条命令后输出如下:
## Starting application at 0x82000000 ...
hello wolrd
可见go_test.bin正常执行.



错误解决:
1. go_test.o:(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr1'  : 更换一个gcc工具链即可, 原来使用arm-2010q1 出现这个错误. 后来更换成arm-eabi-4.4.0就可以了. 不过arm-eabi-4.4.0不能生成linux可执行的elf文件.

2. go_test.o:could not read symbols: File in wrong format    :  由于Makefile编写错误造成的, 没个CC变量赋值,而使用i386 gcc编译. 使用file命令可查看go_test.o文件的格式.

很久没玩这个了,也没上过线了。如果有需要交流的,欢迎来邮件: leapmusic@QQ邮箱
回复

使用道具 举报

109

主题

10

好友

9043

积分

版主

Rank: 7Rank: 7Rank: 7

贡献
1762
金钱
2699
威望
1786
买家信用
卖家信用
积分
9043
发表于 2013-5-12 18:49:41 |显示全部楼层
cubie的网络没驱动啊~提示Net: Net Initialization Skipped No ethernet found.
我可能一年内都无法再登录这个论坛了
回复

使用道具 举报

4

主题

0

好友

1856

积分

金牌会员

Rank: 6Rank: 6

贡献
351
金钱
712
威望
351
买家信用
卖家信用
积分
1856
发表于 2013-10-29 22:08:43 |显示全部楼层
有人成功过吗?
入手Cubieboard来当ARM嵌入式学习板,注定苦逼了
回复

使用道具 举报

2

主题

0

好友

478

积分

中级会员

Rank: 3Rank: 3

贡献
99
金钱
171
威望
99
买家信用
卖家信用
积分
478
发表于 2014-2-9 21:14:04 |显示全部楼层
mark one mark
回复

使用道具 举报

0

主题

2

好友

584

积分

高级会员

Rank: 4

贡献
77
金钱
129
威望
177
买家信用
卖家信用
积分
584
发表于 2014-8-11 15:45:57 |显示全部楼层
还没什么头绪,先做个记号
回复

使用道具 举报

2

主题

0

好友

394

积分

中级会员

Rank: 3Rank: 3

贡献
86
金钱
127
威望
86
买家信用
卖家信用
积分
394
发表于 2015-10-23 18:12:28 |显示全部楼层
mark

谢谢


回复

使用道具 举报

3

主题

0

好友

429

积分

中级会员

Rank: 3Rank: 3

贡献
88
金钱
143
威望
88
买家信用
卖家信用
积分
429
发表于 2015-11-29 15:14:34 |显示全部楼层
请问cubietruck如何让uboot不加载操作系统啊,怎么让他从SD卡启动呢
回复

使用道具 举报

0

主题

0

好友

211

积分

中级会员

Rank: 3Rank: 3

贡献
45
金钱
72
威望
45
买家信用
卖家信用
积分
211
发表于 2016-6-18 11:29:14 |显示全部楼层
先記錄, 之後有時間回來嘗試
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

QQ|Archiver|手机版|邮件群发|cubie.cc---深刻的嵌入式技术和应用讨论中文社区 ( 粤ICP备13051116号-1  

GMT+8, 2019-8-22 03:03 , Processed in 0.029007 second(s), 13 queries , Apc On.

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc. | Style by Coxxs

回顶部