arm linux gcc 乙個相當低階的錯誤

2022-04-05 18:20:46 字數 1747 閱讀 6698

今天將以前在windows ads上寫好的一些裸機程式用linux + arm-linux tools 移植到 tq2440上,剛弄第乙個 led,就卡住了,

main.c 不加任何修改

#define rgpbcon    (*(volatile unsigned *)0x56000010)    //port b control

#define rgpbdat    (*(volatile unsigned *)0x56000014)    //port b data

#define rgpbup     (*(volatile unsigned *)0x56000018)    //pull-up control b

static 

void led_conf (void)

static

void led_opt (int led_nr,int val)

else

} void delay (int dl) }

int main (void) }

ads 上的 start.s

/ * start.s */

area init,code,readonly

entry

import main

bl       main

b        .

end

linux 下 start.s

/* start.s for linux */

.global _start

.extern  main

.text

_start:

bl      main

b       .

/* makefile */

all:

arm-linux-gcc -g -c -nostdlib start.s -o start.o

arm-linux-gcc -g -c -nostdlib main.c -o main.o

arm-linux-ld  -ttext 0x00 -g start.o main.o -o led.o

arm-linux-objcopy -o binary -s led.o led.bin

sudo dnw -a 0x0 led.bin

@echo download compelete !

clean:

rm -f *.o *.bin

# sudo minicom casey

# make all

原以為是小菜,可是tq2440死活不幹活

我做了以下努力 :

2. 將 windows 下的bin和arm-linux 弄出的bin分別dump ,看他們的bl 位址,一直follow ,可是,對比仍舊無問題

4.ld 0x30000000的前提下,加上  ldr sp,=4096,反而g掉了

5.後來我再繼續dump,用沒有strip 的 elf 檔案dump,總算發現了,原來是ld 0x00 的時候 ldr sp,=4096,sdram 改變了sp 的位址,板子當然罷工,嘿嘿

然後將start.s 改成如下:

/* start.s for linux */

.global _start

.extern  main

.text

_start:

ldr     sp,=4096

bl      main

b       .

# 後面一切順利 !

乙個有趣的測試,相當神奇!

沒人逃得過的超準思維定向測試 切記要慢慢,請不要第一次就看完了全部!一定要慢慢的往下看!這樣你才能真 的體會到真的很很詭異的喔!請第一次看到這個測試的朋友,首先靜下心來,認真的,快速的用自己的心算來 坐下面這個測試,看清楚要求,真實的說出當時的第乙個腦子裡面的答案,才能看出這 個測試的最有效的結果!...

在LINUX下編譯乙個模組 相當於乙個簡單的驅動

假設在 root code下建乙個hello.c的原始檔 如下 以下原始碼 include include static int hello init void static int hello exit void module init hello init module exit hello e...

ubuntu 9 04源 相當快的乙個源

備份源sudo cp etc apt sources.list etc apt sources.list backup 然後執行 sudo gedit etc apt sources.list 命令 然後加入下面的源 儲存後執行 sudo apt get update 你會發現速度快的驚人 更多請參...