嵌入式linux入门-常用命令介绍
使用芯片手冊的時候,會時常的看到芯片中有的位填寫的數(shù)字有保留,那是為了以后芯片升級和擴展使用的,現(xiàn)在是不使用。如GPF4占用的[9:8] 00 = Input,01 = Output, 10 = EINT, 11 = Reserved 保留位是為了以后進行擴展使用,現(xiàn)在使用不上。
使用虛擬機VMware有4種網(wǎng)絡連接方式:網(wǎng)橋網(wǎng)絡(Bridged)、網(wǎng)絡地址翻譯網(wǎng)絡(NAT)、僅為主機網(wǎng)絡(Host-only)和客戶網(wǎng)絡。常用的網(wǎng)絡連接方式是前兩種。
網(wǎng)橋網(wǎng)絡需要連上網(wǎng)線才可以使用,當主機與目標板之間需要進行網(wǎng)絡通訊的時候使用這種方式,它相當于三臺處于同一網(wǎng)段的計算機,沒有使用網(wǎng)線的時候使用NAT網(wǎng)絡在主操作系統(tǒng)Windows與客戶操作系統(tǒng)Linux間進行通訊。
UBUNTU中使用軟件維護工具:qpt-get安裝沒有安裝的軟件
何為mount
mount是Linux下的一個命令,它可以將分區(qū)掛接到Linux的一個文件夾下,從而將分區(qū)和該目錄聯(lián)系起來,因此我們只要訪問這個文件夾,就相當于訪問該分區(qū)了。 目前mount已經(jīng)不僅僅局限于Linux了。在Windows系統(tǒng)下的應用也越來越廣了,多用在虛擬光驅類軟件上
在剛學習嵌入式linux時候,盡量使用已經(jīng)制作好的工具鏈接
我使用的是韋東山制作好的嵌入式P40頁
- -C
在程序編譯器之前加上“-c”,只會進行預處理、編譯和匯編源文件,但是不作連接。GCC會忽略-c選項之后任何無法識別的輸入文件。
-S
編譯之后立即停止,不進行匯編。GCC忽略任何不需要匯編的輸入文件-E
預處理之后即停止,不進行編譯,忽略任何不需要預處理的輸入文件。-o file
指定輸出文件為file,無論是預處理、編譯、匯編還是連接,這個選項都可以使用。-v
顯示制作GCC工具時的自身配置命令;同時顯示編譯器驅動程序、預處理器、編譯器的版本號。
調試選項
- -g以操作系統(tǒng)的本地格式(stabs、COFF、XCOFF、或DWARF)、產(chǎn)生調試信息,GDB能夠使用這些調試信息。
優(yōu)化選項
- -O或-O1, 不使用 - -O或-O1的時候只有聲明了register的變量才能分配使用寄存器。
-O2多優(yōu)化一些。除了涉及空間和速度交換的優(yōu)化選項,執(zhí)行幾乎所有的優(yōu)化工作,例如不進行循環(huán)展開(loop unrolling)和函數(shù)內嵌(inling)。和-O相比增加了代碼的編譯時間,也提高了生成代碼的運行效果。
-O3優(yōu)化的更多。除了打開-O2所做的一切還打開了,“-finline-functions”選項
-O0如果指定了多個”-O”選項,不管帶不帶數(shù)字都是最后一個生效
連接器選項
- -llibrary 即使不明顯的使用-llibrarya選項,一些默認的庫也被連接進去,可以使用”-v”選項看到這點
- -nostartfiles 不連接系統(tǒng)標準啟動文件,而標準庫文件任然正常使用
- -nostdlib 不連接系統(tǒng)標準啟動文件和標準文件,只把指定的文件傳遞給連接器,這個選項常用語編譯內核、bootloader等程序,它們不需要啟動文件、標準庫文件。
- -static 在支持動態(tài)鏈接的系統(tǒng)上阻止鏈接共享庫。使用和不使用”-static”選項編譯出來的可執(zhí)行程序的大小相差很大
當不使用-static進行編譯文件時,程序執(zhí)行前還需要使用共享文件庫文件,所以還需要將共享文件庫放入文件系統(tǒng)中。
- -shared
生成一個共享OBJ文件,他可以和其他OBJ文件連接產(chǎn)生可執(zhí)行文件,只有部分系統(tǒng)支持該選項,當不想以源代碼發(fā)布程序的時候可以使用”-shared”選項生成庫文件,比如對于options程序可以如下制作成庫文件
以后要使用sub.c中的函數(shù)sub_fun時,再連接程序的時候,將sub.a加入即可,比如:
gcc -o test main.o ./sub.a可以將多個文件制作成一個庫文件,比如:
gcc -shared -o sub.o sub2.o sub3.o目錄選項
下列選項指定搜索路徑,用于查找頭文件、庫文件或編譯器的某些成員。
- -Idir
在頭文件的搜索路徑中添加dir目錄。頭文件搜索的方法為:如果以”#include <>”包含頭文件,則在標準的頭文件目錄開始搜索(包含使用-Idir選項定義的目錄),如果以”#include ” ” “包含的文件,則先從用戶的工作目錄開始搜索,在搜索標準庫目錄。 - -I-
任何在”-I-“前面使用的”-I”選項指定的搜索路徑只適用于”#include “file” “這種情況,
arm-linux-ld 選項
arm-linux-ld 用于將多個目標文件、庫文件連接成可執(zhí)行文件,本小節(jié)主要介紹”-T”選項,可以直接使用它指定代碼段、數(shù)據(jù)段、bss段的起始地址,也可以制定一個連接腳本在連接腳本中進行復雜的地址設置。
“-T”選項只用于連接Bootloader、內核等“沒有底層軟件支持”的軟件,連接運行于操作系統(tǒng)之上的應用程序,無需指定”-T”選項,它們使用默認的方式進行連接。
- 直接指定代碼段、數(shù)據(jù)段、bss段的起始地址
格式如下:
其中的”startaddr”分別代表代碼段、數(shù)據(jù)段和bss段的起始地址,它是一個十六進制的數(shù)。
在led_on的Makefile中有如下語句:
它表示的代碼段運行的地址為0x0000000,由于沒有定義數(shù)據(jù)段、bss段的起始地址,它們被依次放到代碼段的后面
- 使用鏈接腳本設置地址
在/work/source/hardware/timer的目錄下的程序為例,他的Makefile中有如下代碼:
使用鏈接腳本timer.lds來設置可執(zhí)行文件timer_elf的地址信息,timer_elf文件內容如下:
SECTIONS {. = 30000000;.text :{ *(.text) }.rodata ALLGN{4} : { *(.rodata) }.data ALIGN{4} : { *(.data) }.bss ALIGN{4} : { *(.bss) *(COMMON)} }鏈接腳本的基本命令是SECTIONS命令,他描述了輸出文件的映射圖:輸出文件中各段、各文件怎樣設置。一個SECTIONS 內部包含了一個或多個段,段(section)是鏈接腳本的基本單元,他表示輸入文件中的某個部分怎樣放置。
- arm-linux-objcopy選項
arm-linux-objcopy被用來復制一個目標文件的內容到另一個文件中,可以使用不同的源文件格式。在嵌入式中常使用arm-linux-objcopy命令將ELF格式的生成結果轉換為二進制文件,比如:
arm-linux-objdump 常用來顯示二進制文本信息,本書中常用來查看反匯編代碼
1.將ELF格式的文件轉換為反匯編文件:
2.將二進制文件轉換為反匯編文件:
arm-linux-objdump -D -b binary -m arm bin_file > dis_file總結
以上是生活随笔為你收集整理的嵌入式linux入门-常用命令介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于APMSSGA-LSTM的容器云资源
- 下一篇: JZ2440总结6