裸机上安装编译好的Linux,StarterWare linux下裸机实验

StarterWarelinux下裸机实验

1.下载StarterWare SDK

这里下载需要ti帐号,下载AM335X_StarterWare_02_00_01_01_Setup.bin

2.安装StarterWare SDK

./AM335X_StarterWare_02_00_01_01_Setup.bin选择默认安装即可,安装完成后,在home目录下

3.编译器gcc version 6.2.1

20161016 (Linaro GCC 6.2-2016.11)

使用ti-processor-sdk-linux-am335x-evm-04.00.00.04自带的gcc

arm-linux-gnueabihf-gcc

4.编译配置

/home/fang/AM335X_StarterWare_02_00_01_01/build/armv7a/gcc/makedef

修改3个地方

LIB_GCC=/home/fang/ti-processor-sdk-linux-am335x-evm-04.00.00.04/linux-devkit/sysroots/x86_64-arago-linux/usr/lib/gcc/arm-linux-gnueabihf/6.2.1

LIB_C=/home/fang/ext-disk/workdir/src/glibc-2.26/install/lib

PREFIX=arm-linux-gnueabihf-

4.编译libc

由于ti的gcc缺少libc,这里我自行编译了libc-2.26

cd glibc-2.26

make build install

cd build

CC=arm-linux-gnueabihf-gcc ../configure

--prefix=/home/fang/ext-disk/workdir/src/glibc-2.26/install --host=arm-linux --cache-file=arm-linux.cache

make install

5.编译uart编译链接地址

cd ~/AM335X_StarterWare_02_00_01_01/build/armv7a/gcc/am335x/evmAM335x/uart

ls

makefileuartEcho.lds

这里修改一下链接地址

修改makefile

IMG_LOAD_ADDR = 0x402f0400

修改uartEcho.ld

DDR0 :o = 0x402f0400,l = 0xFBFF/* 512MB external DDR Bank 0 */

5.编译uart

make

生成的二进制在

~/AM335X_StarterWare_02_00_01_01/binary/armv7a/gcc/am335x/evmAM335x/uart/Release下

uartEcho_ti.bin就是可以在Sdram中执行的二进制了

6.串口下载uartEcho_ti.bin

等待上电启动,打印CCC时,将uartEcho_ti.bin下载

这时发现并没有像例程说明那样,在终端输入,并没有回显字符

7.加入led调试

将led.S文件复制到~/AM335X_StarterWare_02_00_01_01/system_config/armv7a/gcc

修改 ~/AM335X_StarterWare_02_00_01_01/build/armv7a/gcc/am335x/system_config/makefile

SOURCE变量(大约在第56行)

增加led.S编译,如下

SOURCE= ${SYSCONFIG_SRC}/mmu.c\

${SYSCONFIG_SRC}/cache.c\

${SYSCONFIG_SRC}/${COMPILER}/led.S\

${SYSCONFIG_SRC}/${COMPILER}/cpu.c\

8.修改~/AM335X_StarterWare_02_00_01_01/system_config/armv7a/gcc

/init.S,在第一条指令前插入点灯指令,如下

Entry:

@

@ Set up the Stack for Undefined mode

@

BLled_init

BL     led_on

LDRr0, =_stack@ Read the stack address

MSRcpsr_c,

#MODE_UND|I_F_BIT@ switch to

undefmode

MOVsp,r0@ write the stack pointer

SUBr0, r0, #UND_STACK_SIZE@ give stack space

9.再次下载运行,发现灯可以点亮了,可以慢慢调试了============

附led.S源码(GPIO3Pin16)

.global led_init

.global led_on

.global led_off

led_init:

@@@@@@FOR

CM_PER_GPIO3_CLKCTRL_MODULEMODE_ENABLE

LDR

R1,=0x44E000B4

LDR

R3,[R1] @read CM_PER_GPIO3_CLKCTRL

ORR

R0,R3,#0x2 @R0=R3 | 0x2

STR

R0,[R1] @write to CM_PER_GPIO3_CLKCTRL

wait1:

LDR

R0,[R1] @read CM_PER_GPIO3_CLKCTRL

TST

R0,#0x2

@BNE

wait1

@@@@@@FOR

CM_PER_GPIO3_CLKCTRL_OPTFCLKEN_GPIO_1_GDBCLK

LDR

R1,=0x44E000B4;

LDR

R3,[R1] @read CM_PER_GPIO3_CLKCTRL

ORR

R0,R3,#0x00040000 @R0=R3 |

0x00040000

STR

R0,[R1] @write to CM_PER_GPIO3_CLKCTRL

wait2:

LDR

R0,[R1] @read CM_PER_GPIO3_CLKCTRL

TST

R0,#0x00040000

@BNE

wait2

@@@@@@Waiting for IDLEST field in

CM_PER_GPIO3_CLKCTRL register to attain the desired value.

LDR

R1,=0x44E000B4;

wait3:

LDR

R0,[R1] @read CM_PER_GPIO3_CLKCTRL

TST

R0,#0x00030000

@BNE

wait3

@@@@@ Waiting for CLKACTIVITY_GPIO_1_GDBCLK

bit in CM_PER_L4LS_CLKSTCTRL register to attain desired value.

LDR

R1,=0x44E00000;

wait4:

LDR

R0,[R1] @read CM_PER_L4LS_CLKSTCTRL

TST

R0,#0x00080000

@BNE

wait4

@@@GPIO3Pin16PinMuxSetup

ldr

r0, =0x481AE134 @GPIO_OE

ldr

r1, =0xfffEffff@0x00010000 set to

output mode

str

r1, [r0]

mov

pc, lr

led_on:

ldr

r0, =0x481AE194 @GPIO_SETDATAOUT

ldr

r1, =0x00010000

str

r1, [r0]

mov

pc, lr

led_off:

ldr

r0, =0x481AE190 @GPIO_CLEARDATAOUT

ldr

r1, =0x00010000

str

r1, [r0]

mov

pc, lr

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值