1. 程式人生 > >嵌入式Linux學習筆記(1)

嵌入式Linux學習筆記(1)

一、基本概念

1、檔案系統:對計算機資料的分類儲存。
2、檔案和目錄:對資料的一種分類。
3、/:(1)作根目錄名(處於開頭);(2)作分割符(不在開頭)。
4、路徑:
(1)絕對路徑:從”/”目錄出發的路徑;如:/home/linux/截圖軟體。
(2)相對路徑:從當前位置出發,描述檔案或者目錄的路徑,如:linux/截圖軟體。
(3)當前路徑:當前位置。

二、Linux基本操作

1、查詢當前位置:pwd
2、查詢當前目錄下的內容:ls
(1)ls -a 顯示所有檔案(包括隱藏檔案)
(2)ls -l 以列表形式顯示檔案
(3). 表示當前路徑
(4).. 表示上一級目錄
3、進入目錄:cd 目錄路徑
(1)cd . 返回上一級目錄
(2)cd 回到使用者自己的主目錄
4、拷貝檔案:cp 原始檔路徑 目標檔案路徑
5、移動檔案:mv 原始檔路徑 目標檔案路徑
6、刪除檔案:rm -f 檔案路徑
7、建立目錄:mkdir 目錄路徑
8、刪除目錄:rm -rf 目錄路徑

三、嵌入式Linux C語言程式設計環境

(1)嵌入式Linux下的編輯器vi(vim)
(2)嵌入式Linux下的編譯器GCC
(3)嵌入式Linux下的偵錯程式GDB
(4)嵌入式Linux下的工程管理器make

1、嵌入式Linux下的編輯器vi(vim)

編輯器vi(vim)有三種工作模式:命令列模式,插入模式(編輯模式),底行模式。

[1] 開啟檔案 vim test.c
[2] 編輯
(1)進入插入模式: i (左下方會有“–INSERT–”字樣)
(2) 插入:直接輸入字元
(3)移動游標:方向鍵
(4)刪除字元: backspace
(5)進入命令模式:ESC
(6)刪除單個字元:x
(7) 拷貝一行: yy
(8)貼上: p
(9)刪除一行:dd
(10) 撤銷操作: u
(11) 搜尋: :/搜尋內容
[3] 儲存退出
(1)儲存 :w
(2)另存為 :w test.c
(3)退出 :q
(4)強制退出 :q!
(5)儲存並退出 :wq

2、嵌入式Linux下的編譯器GCC

GCC的編譯流程分4個步驟:
(1)預編譯 pre-processing
(2)編譯 compiling
(3)彙編 assembling
(4)連結 linking

GCC所支援不同字尾名的處理方式:
這裡寫圖片描述

[1] 預編譯階段(test.c —> test.i)

預編譯階段的工作:
- 處理所有的註釋,以空格代替;
- 將所有的#define刪除,並且展示所有的巨集定義;
- 處理條件編譯指令#if,#else,#elif,#ifdef,#endif;
- 處理#include,展示被包含的檔案;
- 保留編譯器需要使用的#pragma指令;

預處理指令:
gcc -E [編譯檔案] -o [目標檔案]
如:gcc -E test.c -o test.i

[2] 編譯階段(test.i —> test.s)

編譯階段的工作:
- 對預處理檔案進行一系列詞法分析,語法分析和語義分析;
- ……………詞法分析主要分析關鍵字,標示符,立即數等是否合法
- ……………語法分析主要分析表示式是否遵循語法規則
- ……………語義分析在語法分析的基礎上進一步分析表示式是否合法
- 分析結束後進行程式碼優化生成相應的彙編程式碼檔案;

編譯指令:
gcc -S [編譯檔案] -o [目標檔案]
如:gcc -S test.i -o test.s

[3] 彙編階段(test.s —> test.o)

彙編階段的工作:
- 彙編器將彙編程式碼轉變為機器可以執行的指令;
- 每個彙編語句幾乎都對應一條機器指令;

彙編指令:
gcc -c [編譯檔案] -o [目標檔案]
如:gcc -c test.s -o test.o

[4] 連結階段(test.o —> a.out)

聯結器的主要作用是把各個模組之間相互引用的部分處理好,使得各個模組之間能夠正確的銜接。

GCC的整個編譯流程:

整個編譯指令:
gcc [編譯檔案] -o [編譯後的可執行檔名]
./[可執行檔名]

如:gcc test.c -o test
如:./test

test.c —> (test.i –> test.s –> test.o) —> a.out(預設可執行檔名)

3、嵌入式Linux下的偵錯程式GDB

進入偵錯程式指令:
gcc [編譯檔案] -o [編譯後的可執行檔名] -g
gdb [編譯後的可執行檔名]

如:gcc test.c -o test -g
如:gdb test

在偵錯程式GDB下的基本操作:
(1)檢視檔案(gdb):l
(2)設定斷點(gdb):b 行號
(3)執行程式碼(gdb):r (行號)
(4)列印變數或表示式的值(gdb):p 變數名
(5)檢視某個表示式的資料型別(gdb):whatis 變數
(6)退出GDB(gdb):q

如(gdb):p sizeof(型別) 列印某型別的位元組數
如(gdb):p /b 表示式 以二進位制的形式列印某個表示式

4、嵌入式Linux下的工程管理器make

(待學習理解後,繼續跟進!)