• «
  • 1
  • 2
  • »
  • Pages: 1/2     Go
主题 : 在Linux中就不可以编译裸奔的程序吗? 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 97574
精华: 0
发帖: 22
金钱: 110 两
威望: 22 点
综合积分: 44 分
注册时间: 2013-10-27
最后登录: 2013-11-26
楼主  发表于: 2013-10-28 23:04

 在Linux中就不可以编译裸奔的程序吗?

刚买回来Tiny6410的开发板,还不是很熟悉,看到别人都用ADS或者RVDS来编译裸奔程序,但我看别的教程是在linux下编译的裸奔程序,因此我也选择了在Linux下编译裸奔程序,编写Makefile,但是经过SD启动后,然后选择[d] Download and Run an Absolute User Application,使用dnw将led.bin(我只点亮一个LED,就是核心板的LED1)下载后,总是不可以(下载demo.bin是可以正常运行的),所以现在的问题就是不知道是我的代码错了,还是哪儿错了
main.c
#include "s3c6410_addr.h"

void delay()

{

    int i=0x10000;

    while(i--);

}



int main(void)

{
    rGPKCON0|=1<<16;    /*set GPK4  to be outport*/    

    while(1)

    {

        rGPKDAT =0;         //GPK4输出0

        delay();

        rGPKDAT = 1<<4;   //GPK4输出1

        delay();

    }

}

start.s

.globl _start

_start:


ldr r0, =0x70000000

orr r0, r0,#0x13

mcr p15,0,r0,c15,c2,4            @256M(0x70000000-0x7fffffff)



ldr r0, =0x7E004000

mov r1,#0

str r1,[r0]


ldr sp,=8*1024

bl main    


makefile:
led.bin:main.o start.0
    @arm-linux-ld -Ttext 0 -o led.elf start.o main.o
    @arm-linux-objcopy -O binary led.elf led.bin
    @arm-linux-objdump -D led.elf > led.dis
start.o:start.s
    @arm-linux-gcc -o start.o  start.s -c

main.o:main.c
    @arm-linux-gcc -o main.o main.c -c
clean:
    @rm  -f *.o led.elf led.dis led.bin
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2013-10-29 14:02
Linux上肯定是可以编译裸机程序的,uboot就是个例子。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 97574
精华: 0
发帖: 22
金钱: 110 两
威望: 22 点
综合积分: 44 分
注册时间: 2013-10-27
最后登录: 2013-11-26
2楼  发表于: 2013-10-29 14:41

 回 1楼(kasim) 的帖子

你有没有再linux上编译裸机程序的程序?
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
3楼  发表于: 2013-10-29 17:53

 回 2楼(花开花落) 的帖子

有,我编译了很多次uboot:)
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 97574
精华: 0
发帖: 22
金钱: 110 两
威望: 22 点
综合积分: 44 分
注册时间: 2013-10-27
最后登录: 2013-11-26
4楼  发表于: 2013-10-29 22:42

 回 3楼(kasim) 的帖子

可不可以写一个在linux上编译4个LED闪亮的程序,然后下载测试,那样的话,我觉得真是伟大的创新呀,现在的教程上都是用什么ADS和RVDS写裸机程序
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
5楼  发表于: 2013-10-29 22:54

 回 4楼(花开花落) 的帖子

呵呵,那恐怕要等我把4412上uboot和Linux kernel的问题先搞定了。至于LED程序,我想你最好从一个确定正确的范例改写会比较快。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 97574
精华: 0
发帖: 22
金钱: 110 两
威望: 22 点
综合积分: 44 分
注册时间: 2013-10-27
最后登录: 2013-11-26
6楼  发表于: 2013-10-29 23:02

 回 5楼(kasim) 的帖子

主要是现在资料很不完整,不知道哪个是对的,哪个是适合Tiny6410的,现在完全是菜鸟一枚,跪求版主赐教
级别: 新手上路
UID: 94324
精华: 0
发帖: 21
金钱: 110 两
威望: 22 点
综合积分: 42 分
注册时间: 2013-07-14
最后登录: 2014-06-22
7楼  发表于: 2013-11-10 16:37
在linux上编译裸机非常方便,不需要专门编写启动代码,只需要设定好main函数链接地址
以你的程序为例
arm-linux-gcc  -c main.c -o main.o
这时你反汇编看下,arm-linux-objdump -d main。o
发现main函数的入口地址是班子上根本没有的,要自己手动链接
arm-linux-ld -Ttext=0x30000000 main。o  -o main
你再反汇编看下就会发现入口地址变了
然后
arm-linux-objcopy -I elf32-littlearm -O binary main main.bin(I和O是大写,32后面不空格)
然后得到的绝对可以启动
级别: 新手上路
UID: 94324
精华: 0
发帖: 21
金钱: 110 两
威望: 22 点
综合积分: 42 分
注册时间: 2013-07-14
最后登录: 2014-06-22
8楼  发表于: 2013-11-10 16:38
楼主,我有个按键LED的,要的联系我。
级别: 新手上路
UID: 97574
精华: 0
发帖: 22
金钱: 110 两
威望: 22 点
综合积分: 44 分
注册时间: 2013-10-27
最后登录: 2013-11-26
9楼  发表于: 2013-11-15 21:10

 回 7楼(她95001196) 的帖子

谢谢你的讲解
  • «
  • 1
  • 2
  • »
  • Pages: 1/2     Go