鏈接腳本arm
Ⅰ .text .global 這是什麼意思arm linux 匯編
.text
.global
是arm-gcc編譯器的關鍵詞。
.text
指定了後續編譯出來的內容放在代碼段【可執行】;
.global
告訴編譯器後續跟的是一個全局可見的名字【可能是變數,也可以是函數名】;
在本例中,_start是一個函數的起始地址,也是編譯、鏈接後程序的起始地址。由於程序是通過載入器來載入的,必須要找到
_start名字的函數,因此_start必須定義成全局的,以便存在於編譯後的全局符合表中,供其它程序【如載入器】尋找到。
Ⅱ arm-linux程序的鏈接地址和原先地址
連接器腳本xxx.lds文件中指定的地址,就是鏈接地址,程序運行時必須位於它的鏈接地址處,匯編文件中的各個標號或者c文件中的各個函數名(函數的入口地址)對應的鏈接地址就是由鏈接腳本中的起始鏈接地址和各個目標文件(.s或.c文件編譯但還為鏈接的文件)的排放順序有關。這些鏈接地址可以通過查看可執行文件的反匯編文件即xxx.dis文件來獲得.
如果你不使用全局變數或者靜態變數,訪問這些變數時要使用到鏈接地址,重定位完成之前不能使用這些類型的變數,adr、b和bl指令都是屬於相對跳轉指令,即在當前pc值的基礎上加減一個偏移值,跳轉去執行。如果只使用adr、b或者bl指令,並且不訪問全局變數或者靜態變數,這類代碼被稱為「位置無關碼」,即代碼的存儲位置可以不在其鏈接地址處。如果當使用全局跳轉指令ldr時就只能使用鏈接地址了,如ldr pc,_reset。程序運行時,pc指針的內容是不區分原本地址(存儲地址)或鏈接地址的,只要是」位置無關碼「,存儲地址可以與鏈接地址不同,不是位置無關碼就要使用到鏈接地址,即存儲地址與鏈接地址必須相同。即使用之前必須完成代碼的重定位。
ps:望採納!
Ⅲ 我要在ARM LINUX下,編寫一個腳本,讓它隨著系統的啟動也自啟動起來,應該如何弄
按這個辦法試試
按一般的方法,寫一腳本放在/etc/init.d中,然後在/etc/rcx.d中建立軟連接,為了省事我們直接用:
update-rc.d scriptname defaults
這個命令來做,如果有誤撤消這次操作,
update-rc.d -f scriptname remove
另一種如果方法也是將角本放入/etc/init.d/,然後用rcconf進行選擇,不過別忘了要先chmod a+x scriptname來更改許可權。
Ⅳ 請教arm+linux rcS腳本問題
mode=${1:-start}
的含義是,如果位置參數$1為空的話,就取「start」賦值給mode,如果不為空,就用$1賦值給mode
cfg_services和cfg_services_r的區別要結合板子的硬體,功能這些來看有什麼實際意義,僅憑順序相反看不出什麼實際意義呢
Ⅳ (ARM + Linux)GNU鏈接腳本中的".ARM.attributes"是什麼意思
所謂gnu鏈接腳本,其實一般都是lds腳本,或者說是elf格式的bin文件組成的腳本文件,主要是告訴你代碼是怎麼排列在elf文件終,至於為啥要燒到arm,其實一般都燒錄在flash中的,然後arm引導程序啟動就需要從flash獲取機器貓,也就是你說的那些段,常見的有data,bss,text,rely等