作者saveload2001 (=口="被发现了!)
看板LinuxDev
标题[问题]arm-linux-gcc s3c6410 可以开机就run程式不跑系统吗? help
时间Fri Apr 1 18:09:40 2011
你好!!
下面是我目前爬文 看到ARM9有code
可以把led.c档 转成 led.bin档 透过sd卡 烧录到IC 0x00000000 地址
这样开机过後就可以直接 驱动IO port 执行程式
http://www.dmatek.com.cn/bbs/Announce/Announce.asp?BoardID=10&ID=3285&p=12&Upflag=1&q=1&r=2083
我是参考这个
-------先SHOW出我编译最後的结果 make-------
root@rit-EELAB:/home/rit/linux_system/arm_start_test# make
/usr/local/arm/4.3.1-eabi-armv6/usr/bin/arm-linux-gcc -g -c -o crt0.o crt0.S
/usr/local/arm/4.3.1-eabi-armv6/usr/bin/arm-linux-gcc -g -c -o S0321.o S0321.c
/usr/local/arm/4.3.1-eabi-armv6/usr/bin/arm-linux-ld -Ttext 0x00000000 -g crt0.o S0321.o -o S0321_elf
S0321.o: In function `main':
/home/rit/linux_system/arm_start_test/S0321.c:48: undefined reference to `printf'
make: *** [S0321.bin] Error 1
root@rit-EELAB:/home/rit/linux_system/arm_start_test#
可以编译出 S0321.o crt0.o 然後计没了@@
-------以下是我的程式-------
<makefile>
{
CC = /usr/local/arm/4.3.1-eabi-armv6/usr/bin/arm-linux-
ARCH = arm
6410X_KERNEL_DIR = /home/rit/linux_system/dma6410L-linux-2.6.27
export PATH=/usr/local/arm/4.3.1-eabi-armv6/usr/bin/:$PATH
S0321.bin: crt0.S S0321.c
$(CC)gcc -g -c -o crt0.o crt0.S
$(CC)gcc -g -c -o S0321.o S0321.c
$(CC)ld -Ttext 0x00000000 -g crt0.o S0321.o -o S0321_elf
$(CC)objcopy -O binary -S S0321_elf S0321.bin
clean:
rm -f *.ko *.o *.bak *.mod.* *.bin *_elf
}
<S0321.c>
{
#include <common.h>
#include <exports.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("Hello, world!\n");
return 0;
}
}
<crt0.S>
{
.text
.global _start
_start:
ldr r0, =0x7E004000
mov r1, #0x0
str r1, [r0]
ldr sp, =1024*4
bl main
halt_loop:
b halt_loop
}
谢谢!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.23.55.19
1F:推 shaopin:既然弄到这麽底层, 你要在深入一点, printf之所以能print 04/01 23:33
2F:→ shaopin:也是因为有底曾function支援, UART, putchar, print_strin 04/01 23:34
3F:→ shaopin:这些library都没link到的话, 他是怎麽会自动show 字串出来 04/01 23:35
4F:推 askacis:推楼上,自己写printf函式对应到你的输出装置,UART或是LCD 04/02 14:45
5F:推 askacis:另外,你都要自己跳转到main了,应该也就没必要再include 04/02 14:51
6F:推 askacis:标准函式库的东西了... 04/02 14:57
7F:推 askacis:原po可以参考一下uboot的printf怎麽做的... 04/02 15:16
8F:推 i386:你可能要先看一下datasheet或是其他的source code,者出如何 04/05 00:24
9F:→ i386:设定你的uart...如果你知道uart是怎样运作的话,其实就算不写 04/05 00:24
10F:→ i386:printf也可以把文字印出来.. 04/05 00:26
11F:→ i386:如果要作non-OS的程式,个人建议不要include C library的东西 04/05 00:27
12F:→ i386:除非你很清楚知道你要做的是什麽... 04/05 00:27
13F:→ i386:以原PO的情况,要看到"Hello, world!"重点在於UART设定好了没 04/05 00:49
14F:→ i386:而不是printf这个function的实做.. 04/05 00:50
15F:→ opcode:libc 在你的 toolchain 里面就有了.. 找到然後设定连结.. 04/08 16:29
16F:→ opcode:原来没OS..搞错 04/08 16:32
17F:→ saveload2001:各位大大好~ 我现在把程式加在u-boot里 04/08 16:39
18F:→ saveload2001:目前是用U-BOOT改 可以做到开机直接执行的效果 04/08 16:40
19F:→ saveload2001:我觉得是原来那个档案是library都没正确link到 04/08 16:41
20F:→ saveload2001:加上编译出来的程式 没将IC初始化 也不能用 04/08 16:42
21F:→ saveload2001:总之 我把程式附加在 原本要编译u-boot的档案里 04/08 16:43
22F:→ saveload2001:感谢! 04/08 16:44
23F:推 askacis:你原先的那个程式就等於一个超小型的uboot:) 04/08 17:13
24F:→ askacis:那只组语里面 bl main帮你跳转到main取代了本来C library 04/08 17:15
25F:→ askacis:连结之後帮你跳转main的步骤,u-boot也是在start.s里帮你 04/08 17:18
26F:→ askacis:跳转到C code的入口点函式start_armboot 04/08 17:18
27F:→ askacis:原PO有兴趣的话可以研究一下标准C lib怎麽帮你转到main() 04/08 17:20
28F:→ askacis:会发现你的那个组语crt0.S 其命名是有点意义的:) 04/08 17:20
29F:→ saveload2001:感谢! 04/11 10:49