當前位置:首頁 » 編程軟體 » lds鏈接腳本

lds鏈接腳本

發布時間: 2022-08-14 16:20:24

❶ uboot pwm的時鍾怎麼配置

首先做的是執行這樣一條指令
例如:
make s3c2440_config
這條指令實際上是指向了一條更長的指令
這條指令在uboot根目錄下的makefile中自己定義的,跟你的開發板相關;
s3c2440_config:unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t s3c2440 NULL s3c24x0
這條指令指向的執行文件是MKCONFIG
通過閱讀MKCONFIG 文件源碼我們可以看出。MKCONFIG有如下作用
第一:確定開發板的名字就是BOARD_NAME
-n) shift ; BOARD_NAME =" ${1%%_config}";shift;;
第二:創建到平台/開發板的頭文件的鏈接
ln -s asm-$2 asm
$2 便是我們第一條指令傳遞出來的arm,
還有如下代碼
ln -s ${LNPREFIX}arch-$6 asm-$2/arch
這樣s3c24x0也發揮作用了。
第三:創建頂層Makefile包含的文件include/config.mk
第四:創建開發板相關的頭文件 include/config.h
在config.h這個文件里,存放的是開發板的配置信息。
只有以下兩類宏
(1)一類是選項CONFIG開頭,用來選擇CPU,SOC,開發板類型,設置系統時鍾,選擇設備驅動
(2)另一類是參數 用CFG來開頭,如設置malloc緩沖池的大小,U-boot的提示符,u-boot下載文件的默認載入地址,flash的起始地址。
開發板的第一個參數,將編譯文件分別指向了/board/$board_name and cpu/$cpu/
所以才會產生如下的編譯結果。
(1)首先編譯/board/$board_name/start.S,對於不同的CPU,還可能編譯cpu/$(CPU)下的其他文件。
(2)然後,對於平台/開發板相關的每個目錄、每個通用目錄都使用它們各自的Makefile生成相應的庫。
(3)將1,2步驟生成的.o、.a文件安裝board/$(BOARDDDIR)/U-boot.lds連接腳本進行連接。
(4)第3步得到的是ELF格式的u-boot,後面Makefile還會將它轉換為二進制格式,s_Record格式。

❷ (ARM + linux)GNU鏈接腳本中的".ARM.attributes"是什麼意思

所謂gnu鏈接腳本,其實一般都是lds腳本,或者說是elf格式的bin文件組成的腳本文件,主要是告訴你代碼是怎麼排列在elf文件終,至於為啥要燒到arm,其實一般都燒錄在flash中的,然後arm引導程序啟動就需要從flash獲取機器貓,也就是你說的那些段,常見的有data,bss,text,rely等

❸ linux 下的lds鏈接腳本有沒有什麼書籍

Linux下有兩個清屏命令: clear 這個命令將會刷新屏幕,本質上只是讓終端顯示頁向後翻了一頁,如果向上滾動屏幕還可以看到之前的操作信息。一般都會使用這個命令。 reset 這個命令將完全刷新終端屏幕,之前的終端輸入操作信息將都會被清空,這樣雖然比較清爽,但整個命令過程速度有點慢,使用較少。

❹ gcc編譯程序時怎麼連接.lds

有兩種使用方法:

1,lds作為外置腳本,參與對gcc鏈接過程的控制。使用方法為
gcc XXX.c XX.lds。
gcc能夠自動識別你的文件列中後綴不能識別的文件,作為鏈接腳本使用。這樣編譯出來的程序,還是要使用gcc默認的lds腳本,你的腳本只是一個輔助。

2,lds代替系統的腳本。
這種要先使用gcc -c參數編譯你的源程序,編譯出來的.o文件,使用命令ld -T來指定lds文件鏈接到一起。

❺ 請問arm-linux-gcc和arm-linux-ld還有arm-linux-obj之間是什麼關系

arm-linux-ld 是連接器,它把一些目標和歸檔文件結合在一起,重定位數據,並連接符號引用。通常,建立一個新編譯程序的最後一步就是調用ld。

arm-linux-gcc -wall -O2 -c -o $@ $<
-o 只激活預處理,編譯,和匯編,也就是他只把程序做成obj文件
-Wall 指定產生全部的警告信息
-O2 編譯器對程序提供的編譯優化選項,在編譯的時候使用該選項,可以使生成的執行文件的執行效率提高
-c 表示只要求編譯器進行編譯,而不要進行鏈接,生成以源文件的文件名命名但把其後綴由 .c 或 .cc 變成 .o 的目標文件
-S 只激活預處理和編譯,就是指把文件編譯成為匯編代碼
arm-linux-ld 直接指定代碼段,數據段,BSS段的起始地址
-Tbss ADDRESS Set address of .bss section

-Tdata ADDRESS Set address of .data section

-Ttext ADDRESS Set address of .text section
示例:
${CROSS}ld -Ttext=0x33000000 led.o -o led.elf
使用連接腳本設置地址:
arm-linux-ld -Tbeep.lds start.o beep.o -o beep.elf
其中beep.lds 為連接腳本如下:
arm-linux-obj被用來復制一個目標文件的內容到另一個文件中,可用於不同源文件的之間的格式轉換
示例:
arm-linux-obj –o binary –S elf_file bin_file
常用的選項:
input-file , outflie
輸入和輸出文件,如果沒有outfile,則輸出文件名為輸入文件名
2.-l bfdname或—input-target=bfdname
用來指明源文件的格式,bfdname是BFD庫中描述的標准格式名,如果沒指明,則arm-linux-obj自己分析
3.-O bfdname 輸出的格式
4.-F bfdname 同時指明源文件,目的文件的格式
5.-R sectionname 從輸出文件中刪除掉所有名為sectionname的段
6.-S 不從源文件中復制重定位信息和符號信息到目標文件中
7.-g 不從源文件中復制調試符號到目標文件中
arm-linux-objmp
查看目標文件(.o文件)和庫文件(.a文件)信息
arm-linux-objmp -D -m arm beep.elf > beep.dis
-D 顯示文件中所有匯編信息
-m machine

指定反匯編目標文件時使用的架構,當待反匯編文件本身沒有描述架構信息的時候(比如S-records),這個選項很有用。可以用-i選項列出這里能夠指定的架構.
[guowenxue@localhost asm_c_buzzer]$ cat beep.lds
/***********************************************************************
* File: beep.lds
* Version: 1.0.0
* Copyright: 2011 (c) Guo Wenxue <[email protected]>
* Description: Cross tool link text, refer to u-boot.lds
* ChangeLog: 1, Release initial version on "Mon Mar 21 21:09:52 CST 2011"
*
**********************************************************************/
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS{
. = 0x33000000;
.text : {

*(.text)
*(.rodata)
}

.data ALIGN(4): {

*(.data)

}
.bss ALIGN(4): {

*(.bss)

}

}

[guowenxue@localhost asm_c_buzzer]$ cat makefile

# ***********************************************************************

# * File: makefile

# * Version: 1.0.0

# * Copyright: 2011 (c) Guo Wenxue <[email protected]>

# * Description: Makefile used to cross compile the ASM and C source code

# * ChangeLog: 1, Release initial version on "Mon Mar 21 21:09:52 CST 2011"

# *
# ***********************************************************************
CROSS = /opt/buildroot-2011.02/arm920t/usr/bin/arm-linux-
CFLAGS =
beep.bin: start.S beep.c
arm-linux-gcc $(CFLAGS) -c -o start.o start.S

arm-linux-gcc $(CFLAGS) -c -o beep.o beep.c

arm-linux-ld -Tbeep.lds start.o beep.o -o beep.elf

arm-linux-obj -O binary -S beep.elf beep.bin

rm -f *.elf *.o
install:
cp beep.bin ~/winxp -f --reply=yes
clean:
rm -f *.elf *.o
rm -f beep.bin

❻ 請問後綴為.ld的文件是什麼文件

鏈接腳本通常的名字叫做*.lds *.ld,或者是ld.*

❼ linux lds 腳本是直接生成嗎

Linux中,周期執行的任務一般由cron這個守護進程來處理ps-ef|grepcroncron讀取一個或多個配置文件,這些配置文件中包含了命令行及其調用時間。cron的配置文件稱為「crontab」,是「crontable」的簡寫。一、cron在3個地方查找配置文件(設置shell腳本):1、/var/spool/cron/yanggang這個目錄下存放的是每個用戶(包括root)的crontab任務,每個任務以創建者的名字命名,比如用戶tom建的crontab任務對應的文件就是/var/spool/cron/tomyanggang@barry$sudols-l/var/spool/cron/(或有時是/var/spool/cron/crontabs/)-rw-------1rootcrontab10712011-09-1917:20root-rw-------1yanggangcrontab11762011-09-2411:07yanggang一般一個用戶最多隻有一個crontab文件(如:root,yanggang等),其對應日誌在/var/spool/mail/root(或/var/spool/mail/yanggang)文件里2、/etc/crontab這個文件負責安排由系統管理員制定的維護系統以及其他任務的crontab。SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/#.----------------minute(0-59)#|.-------------hour(0-23)#||.----------dayofmonth(1-31)#|||.-------month(1-12)ORjan,feb,mar,apr#||||.----dayofweek(0-6)(Sunday=0or7)OR#sun,mon,tue,wed,thu,fri,sat#|||||#*****commandtobeexecuted例如:*/5****root/usr/libexec/atrunminute:代表一小時內的第幾分,范圍0-59。hour:代表一天中的第幾小時,范圍0-23。mday:代表一個月中的第幾天,范圍1-31。month:代表一年中第幾個月,范圍1-12。wday:代表星期幾,范圍0-7(0及7都是星期天)。who:要使用什麼身份執行該指令,當您使用crontab-e時,不必加此欄位。command:所要執行的指令。3、/etc/cron.d/這個目錄用來存放任何要執行的crontab文件或腳本。二、許可權crontab許可權問題到/var/adm/cron/下一看,文件cron.allow和cron.deny是否存在用法如下:1、如果兩個文件都不存在,則只有root用戶才能使用crontab命令。2、如果cron.allow存在但cron.deny不存在,則只有列在cron.allow文件里的用戶才能使用crontab命令,如果root用戶也不在裡面,則root用戶也不能使用crontab。3、如果cron.allow不存在,cron.deny存在,則只有列在cron.deny文件裡面的用戶不能使用crontab命令,其它用戶都能使用。4、如果兩個文件都存在,則列在cron.allow文件中而且沒有列在cron.deny中的用戶可以使用crontab,如果兩個文件中都有同一個用戶,以cron.allow文件裡面是否有該用戶為准,如果cron.allow中有該用戶,則可以使用crontab命令。AIX中普通用戶默認都有crontab許可權,如果要限制用戶使用crontab,就需要編輯/var/adm/cron/cron.denyHP-UNIX中默認普通用戶沒得crontab許可權,要想放開普通用戶的crontab許可權可以編三、創建cron腳本第一步:寫cron腳本文件,命名為crontest.cron。15,30,45,59****echo"xgmtest..">>xgmtest.txt表示,每隔15分鍾,執行列印一次命令第二步:添加定時任務。執行命令「crontabcrontest.cron」。搞定第三步:"crontab-l"查看定時任務是否成功或者檢測/var/spool/cron下是否生成對應cron腳本四、cron服務cron是一個linux下的定時執行工具,可以在無需人工干預的情況下運行作業。/sbin/servicecrondstart//啟動服務/sbin/servicecrondstop//關閉服務/sbin/servicecrondrestart//重啟服務/sbin/servicecrondreload//重新載入配置/sbin/servicecrondstatus//查看服務狀態例如:使用sudo停止與啟動服務yanggang@barry$sudoservicecronstopcronstop/waitingyanggang@barry$sudoservicecronstartcronstart/running,process7502五、crontab用法crontab命令用於安裝、刪除或者列出用於驅動cron後台進程的表格,用戶把需要執行的命令序列放到crontab文件中以獲得執行。每個用戶都可以有自己的crontab文件,/var/spool/cron下的crontab文件不可以直接創建或者直接修改,該crontab文件是通過crontab-e命令創建的在crontab文件中如何輸入需要執行的命令和時間,該文件中每行都包括六個域,其中前五個域是指定命令被執行的時間,最後一個域是要被執行的命令。每個域之間使用空格或者製表符分隔。格式如下:minutehourday-of-monthmonth-of-yearday-of-weekcommands合法值00-5900-2301-3101-120-6(0issunday)除了數字還有幾個個特殊的符號就是"*"、"/"與"-"、",",*代表所有的取值范圍內的數字"/"代表每的意思,"/5"表示每5個單位,"-"代表從某個數字到某個數字,","分開幾個離散的數字。-l在標准輸出上顯示當前的crontab。-r刪除當前的crontab文件。-e使用VISUAL或者EDITOR環境變數所指的編輯器編輯當前的crontab文件。當結束編輯離開時,編輯後的文件將自動安裝。幾個例子:每天早上6點06***echo"Goodmorning.">>/tmp/test.txt//注意單純echo,從屏幕上看不到任何輸出,因為cron把任何輸出都email到root的信箱了。每兩個小時0*/2***echo"Haveabreaknow.">>/tmp/test.txt晚上11點到早上8點之間每兩個小時和早上八點023-7/2,8***echo"Haveagooddream">>/tmp/test.txt每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點0114*1-3commandline1月1日早上4點0411*commandlineSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=root//如果出現錯誤,或者有數據輸出,數據作為郵件發給這個帳號HOME=/每小時(第一分鍾)執行/etc/cron.hourly內的腳本01****rootrun-parts/etc/cron.hourly每天(凌晨4:02)執行/etc/cron.daily內的腳本024***rootrun-parts/etc/cron.daily每星期(周日凌晨4:22)執行/etc/cron.weekly內的腳本224**0rootrun-parts/etc/cron.weekly每月(1號凌晨4:42)去執行/etc/cron.monthly內的腳本4241**rootrun-parts/etc/cron.monthly注意:"run-parts"這個參數了,如果去掉這個參數的話,後面就可以寫要運行的某個腳本名,而不是文件夾名。每天的下午4點、5點、6點的5min、15min、25min、35min、45min、55min時執行命令。5,15,25,35,45,5516,17,18***command每周一,三,五的下午3:00系統進入維護狀態,重新啟動系統。0015**1,3,5shutdown-r+5每小時的10分,40分執行用戶目錄下的innd/bbslin這個指令:10,40****innd/bbslink每小時的1分執行用戶目錄下的bin/account這個指令:1****bin/account每天早晨三點二十分執行用戶目錄下如下所示的兩個指令(每個指令以;分隔):203***(/bin/rm-fexpire.lslogins.bad;bin/expire$#@62;expire.1st)每年的一月和四月,4號到9號的3點12分和3點55分執行/bin/rm-fexpire.1st這個指令,並把結果添加在mm.txt這個文件之後(mm.txt文件位於用戶自己的目錄位置)。12,5534-91,4*/bin/rm-fexpire.1st$#@62;$#@62;mm.txt六、幾個問題crond進程沒有運行1.啟動crond進程/etc/init.d/crondstart2.開機自啟動crond進程chkconfigcrondoncrontab編輯:輸入編輯命令:crontab-e#mhdommondowcommandSHELL=/bin/bash30****cd/home/barry/top800/top10/top10_fruits/&&./top10_all.shCtrl+O(寫入)——》enter鍵(保存文件名)——》Ctrl+X(退出)輸入查看命令:crontab-l#mhdommondowcommandSHELL=/bin/bash30****cd/home/barry/top800/top10/top10_fruits/&&./top10_all.sh(建議使用此方式)語法錯誤:Syntaxerror:"("unexpected路徑錯誤:在/var/spool/crontab/yanggang中,添加了如下命令,在日誌文件/var/spool/mail/yanggang中提示找不到xxx.sh路徑30****/home/barry/top800/top10/top10_fruits/top10_all.sh或30****bash/home/barry/top800/top10/top10_fruits/top10_all.sh這是因為在crontab中使用了絕對路徑執行腳本top10_all.sh,因此在腳本top10_all.sh中引用的其它腳本也都需要使用絕對路徑,才能被crontab找到並執行如何避免絕對路徑復雜的設置呢,如上文六、幾個問題所示,採用如下格式:30****cd/home/barry/top800/top10/top10_fruits/&&./top10_all.sh(建議使用此方式,先進入該目錄,然後在執行腳本;否則,執行腳本中的其它腳本都需要加絕對路徑)

❽ arm-linux程序的鏈接地址和原先地址

連接器腳本xxx.lds文件中指定的地址,就是鏈接地址,程序運行時必須位於它的鏈接地址處,匯編文件中的各個標號或者c文件中的各個函數名(函數的入口地址)對應的鏈接地址就是由鏈接腳本中的起始鏈接地址和各個目標文件(.s或.c文件編譯但還為鏈接的文件)的排放順序有關。這些鏈接地址可以通過查看可執行文件的反匯編文件即xxx.dis文件來獲得.
如果你不使用全局變數或者靜態變數,訪問這些變數時要使用到鏈接地址,重定位完成之前不能使用這些類型的變數,adr、b和bl指令都是屬於相對跳轉指令,即在當前pc值的基礎上加減一個偏移值,跳轉去執行。如果只使用adr、b或者bl指令,並且不訪問全局變數或者靜態變數,這類代碼被稱為「位置無關碼」,即代碼的存儲位置可以不在其鏈接地址處。如果當使用全局跳轉指令ldr時就只能使用鏈接地址了,如ldr pc,_reset。程序運行時,pc指針的內容是不區分原本地址(存儲地址)或鏈接地址的,只要是」位置無關碼「,存儲地址可以與鏈接地址不同,不是位置無關碼就要使用到鏈接地址,即存儲地址與鏈接地址必須相同。即使用之前必須完成代碼的重定位。

ps:望採納!

❾ uboot進行重定位是為什麼

首先你要明白代碼要執行必須先放到內存中,而bin文件中的各個函數和變數的存放位置關系是與鏈接腳本文件和編譯器決定的,程序運行時必須位於它的鏈接地址處,匯編文件中的各個標號或者c文件中的各個函數名(函數的入口地址)對應的鏈接地址就是由鏈接腳本中的起始鏈接地址和各個目標文件(.s或.c文件編譯但還為鏈接的文件)的排放順序有關。這些鏈接地址可以通過查看可執行文件的反匯編文件即xxx.dis文件來獲得.
重地位就是將uboot的bin文件復制到內存中它對應的鏈接地址處,而這個鏈接地址就是鏈接腳本xx.lds中的起始鏈接地址,這樣在使用全局跳轉指令(ARM中的ldr xxx指令)或中C語言中的函數調用時,pc寄存器才能被賦予正確的值,即才能到內存中
正確的位置處取出代碼並執行。

ps:望採納!

熱點內容
免費加密隱身俠 發布:2024-05-05 05:07:54 瀏覽:613
我的世界模組伺服器推薦手機版 發布:2024-05-05 05:02:49 瀏覽:818
pr默認存儲 發布:2024-05-05 04:29:31 瀏覽:553
roblox跑酷腳本怎麼做 發布:2024-05-05 03:57:35 瀏覽:702
捷徑清理緩存 發布:2024-05-05 03:57:35 瀏覽:479
ftputility哪裡下載 發布:2024-05-05 03:47:13 瀏覽:1001
雷凌運動版如何連接安卓手機導航 發布:2024-05-05 03:42:48 瀏覽:268
自動鬼使黑腳本 發布:2024-05-05 03:10:49 瀏覽:880
游戲腳本編程書籍推薦 發布:2024-05-05 02:59:13 瀏覽:72
編譯器書籍推薦 發布:2024-05-05 02:57:02 瀏覽:56