linanwy 发表于 2016-5-11 13:55:23

cubieboard 2 如何运行自己的裸板代码?需要u-boot吗?

我现在有一个类似于ucos的操作系统的代码,是其他arm芯片的,我需要在cubieboard 2上面运行该系统。

我想问一下各位大神大概的方向是什么,因为我没有什么基础,不太清楚该如何做。。

我了解一下cubieboard 2的启动过程,过程是通过先启动TF卡的8KB处的spl-u-boot,然后启动了接下来的系统,我想问一下我是不是需要自己编译链接自己的系统,然后把这个镜像作为u-boot的启动对象??还是直接烧写到TF卡的8KB处直接运行??

不好意思因为我实在是缺少太多知识,还请各位大神指明方向:)

蓝天-彭 发表于 2016-5-12 15:39:00



要移植ucos系统到cubieboard比较困难;cubieboard的启动流程可以参考:http://www.cubie.cc/forum.php?mod=viewthread&tid=1171

razer 发表于 2016-5-21 17:23:47

我手上的是Cubieboard 2雙卡版。
從A20的開機流程,當加載SD卡和NAND失敗時,最後會使用USB boot, 請問怎樣使用這個USB boot?
為免過多燒寫SD卡和拔插SD卡, 縮短壽命, 我想把編繹好的裸機代碼, 經過USB接口, 直接下載到板上的DDR 內存運行, 開發完成後才把代碼燒入SD卡。
請問可以有方法在不使用SD卡的情況下,把代碼經USB下載到內存運行嗎?

linanwy 发表于 2016-6-1 16:10:55

已经搞明白了,都可以的.
如果用u-boot启动,用fatload加载二进制镜像到mmc中运行.
如果直接启动,使用boot make工具来启动二进制镜像,当然镜像要放在8Kb处

@allen 发表于 2016-6-2 10:29:49

razer 发表于 2016-5-21 17:23 static/image/common/back.gif
我手上的是Cubieboard 2雙卡版。
從A20的開機流程,當加載SD卡和NAND失敗時,最後會使用USB boot, 請問怎樣 ...

http://docs.cubieboard.org/tutorials/cb2/development/booting_from_usb_in_fel_mode

razer 发表于 2016-6-9 17:12:32

謝謝版主,在試用那個USB-boot前, 我想先用SD卡運行一遍自己的代碼, 再用USB-boot工具下載並運行自己的代碼,來檢查一下運行結果是否相同, 來判斷自己是否使用USB-boot正確。
測試代碼是點亮Cubieboard 2雙卡版上的LED1 和LED2。然而,從SD卡啟動時, 未能點亮兩個LED。代碼應該沒問題, 但反編繹時, 內容出現問題。
r1應該是儲存設定PH20和PH21引腳(控制LED1和LED2開關)的暫存器地址, 但反編內容顯示, 它把PC加上offset輸入進r1, PC加上offset的數值不等於設定引腳的暫存器地址。
請問那個地方出現問題? 我把代碼start.S, 反編內容和Makefile列出來,望高手指點,謝謝

start.S.globl _start

//        I/O register base address 0x01C20800
_start:
        // 设置PH_CFG2的bit,配置PH20,PH21引脚为输出功能

        ldr r1, =0x01C20904                                        
        ldr r0, =0x00110000
        str r0,

        mov r2, #0x1000
led_blink:
        // 设置PH_DAT的bit,使PH20,PH21引脚输出低电平,LED亮
        ldr r1, =0x01C2090C                                        
        mov r0, #0
        str r0,

        // 延时
        bl delay                                                       

        // 设置PH_DAT的bit,使PH20,PH21引脚输出高电平,LED灭
        ldr r1, =0x01C2090C                                       
        mov r0, #0x00f00000
        str r0,

        // 延时
        bl delay       

        sub r2, r2, #1
        cmp r2,#0
        bne led_blink


halt:
        b halt


delay:
        mov r0, #0x100000
delay_loop:
        cmp r0, #0
        sub r0, r0, #1
        bne delay_loop
        mov pc, lr反編繹內容
led.elf:   file format elf32-littlearm


Disassembly of section .text:

00000000 <_start>:
   0:        e59f104c         ldr        r1,         ; 54 <delay_loop+0x10>
   4:        e3a00811         mov        r0, #1114112        ; 0x110000
   8:        e5810000         str        r0,
   c:        e3a02a01         mov        r2, #4096        ; 0x1000

00000010 <led_blink>:
10:        e59f1040         ldr        r1,         ; 58 <delay_loop+0x14>
14:        e3a00000         mov        r0, #0
18:        e5810000         str        r0,
1c:        eb000007         bl        40 <delay>
20:        e59f1030         ldr        r1,         ; 58 <delay_loop+0x14>
24:        e3a0060f         mov        r0, #15728640        ; 0xf00000
28:        e5810000         str        r0,
2c:        eb000003         bl        40 <delay>
30:        e2422001         sub        r2, r2, #1
34:        e3520000         cmp        r2, #0
38:        1afffff4         bne        10 <led_blink>

0000003c <halt>:
3c:        eafffffe         b        3c <halt>

00000040 <delay>:
40:        e3a00601         mov        r0, #1048576        ; 0x100000

00000044 <delay_loop>:
44:        e3500000         cmp        r0, #0
48:        e2400001         sub        r0, r0, #1
4c:        1afffffc         bne        44 <delay_loop>
50:        e1a0f00e         mov        pc, lr
54:        01c20904         biceq        r0, r2, r4, lsl #18
58:        01c2090c         biceq        r0, r2, ip, lsl #18

Disassembly of section .ARM.attributes:

00000000 <.ARM.attributes>:
   0:        00001e41         andeq        r1, r0, r1, asr #28
   4:        61656100         cmnvs        r5, r0, lsl #2
   8:        01006962         tsteq        r0, r2, ror #18
   c:        00000014         andeq        r0, r0, r4, lsl r0
10:        412d3705         teqmi        sp, r5, lsl #14
14:        070a0600         streq        r0,
18:        09010841         stmdbeq        r1, {r0, r6, fp}
1c:        Address 0x0000001c is out of bounds.
MakefileCROSS_COMPILE=arm-linux-gnueabihf-
AS                = $(CROSS_COMPILE)as
LD                = $(CROSS_COMPILE)ld
CC                = $(CROSS_COMPILE)gcc
OBJCOPY                = $(CROSS_COMPILE)objcopy
OBJDUMP                = $(CROSS_COMPILE)objdump

led.bin: start.o
        $(LD) -Ttext 0x0 -o led.elf $^
        $(OBJCOPY) -O binary led.elf led.bin
        $(OBJDUMP) -D led.elf > led_elf.dis

       
%.o : %.S
        $(CC) -o $@ $< -c


razer 发表于 2016-6-18 17:59:19

本帖最后由 razer 于 2016-6-18 18:16 编辑

參考過jiangdou的貼, 原來要給編繹好的bin增加頭文件
http://www.cubie.cc/forum.php?mod=viewthread&tid=3099&extra=page%3D2

編譯好貼內12樓的mksunxiboot.c後使用,

或根據u-boot-sunxi (branch: mirror\next) 路徑arch/arm/include/asm/arch-sunxi內的spl.h, 增加(branch: wip\a20) 內的mksunxiboot.c內的頭文件boot_file_head長度, 之後再編譯使用
https://github.com/linux-sunxi/u-boot-sunxi


終於可以進入下一步了

對於反編譯的內容也了解了, 原來把PH_CFG2和PH_DAT的地址放在bin檔的最後, 所以(PC+0x54)指示的儲存位置就是PH_CFG2的地址
   0:        e59f104c         ldr        r1,         ; 54 <delay_loop+0x10>
.............
54:        01c20904         biceq        r0, r2, r4, lsl #18
58:        01c2090c         biceq        r0, r2, ip, lsl #18

页: [1]
查看完整版本: cubieboard 2 如何运行自己的裸板代码?需要u-boot吗?