日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

嵌入式linux编程,嵌入式Linux学习笔记 - 嵌入式Linux基础知识和开发环境的构建_Linux编程_Linux公社-Linux系统门户网站...

發布時間:2023/11/27 生活经验 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 嵌入式linux编程,嵌入式Linux学习笔记 - 嵌入式Linux基础知识和开发环境的构建_Linux编程_Linux公社-Linux系统门户网站... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

注:所有內容基于友善之臂Mini2440開發板

一、嵌入式Linux開發環境的構建

嵌入式開發一般分為三個步驟:

1、編譯bootloader,燒到開發板

2、編譯嵌入式Linux內核,燒到開發板

3、編譯各類應用程序,燒入開發板

軟件環境構建

采用主機windows,虛擬機CentOS上作為開發環境,虛擬機的安裝和Linux安裝就不說了。

安裝好后Linux應該配置samba服務,掛載windows下的代碼共享目錄

安裝交叉編譯工具鏈

對于嵌入式Linux,程序都是下到開發板上運行,開發板和cpu相關的體系架構與x86系列的都不一樣,所以不能用常規的gcc來編譯,必須用專門的交叉編譯工具

對于Mini2440,采用的是arm9處理器,使用友善之臂官方提供的編譯工具在光盤中有提供,下載地址:?http://www.linuxidc.com/Linux/2011-09/43527.htm

下載以后解壓到根目錄

# tar xvf arm-linux-gcc-4.3.2.tgz -C /

也可以自行編譯交叉工具鏈,但是過程繁瑣,容易出錯,我們還是把重點放在開發上。

二、嵌入式編程基礎知識

一般的c/c++文件要變成可執行文件需要經過預處理、編譯、匯編、和連接等4個步驟

1)預處理

以#開頭的為預處理命令,如包含命令#include、宏定義#define、條件編譯#if #ifdef,預處理的目的是將所有include文件插入到源文件中、將宏定義展開、條件編譯成立的選擇使用的代碼,最后將所有代碼輸入到.i文件中等待處理,預處理需要用到arm-linux-cpp工具

2)編譯

把所有c/c++代碼(上面的.i文件)翻譯成匯編代碼,用到工具為ccl

3)匯編

將前面的匯編代碼翻譯成一定格式的機器碼,Linux上一般為ELF目標文件,用到工具為arm-linux-as

4)連接

連接就是將上面生成的obj文件和系統庫的obj文件、庫文件連接起來,最終生成在平臺上可執行文件,用到工具為arm-linux-ld

arm-linux-gcc選項

1)-c

預處理、編譯和匯編源文件,不做連接,編譯器生成obj文件,gcc通過.o替換.c .i .s等

2)-S

編譯后即停止,不進行匯編,gcc用.s替換.c .i等

3)-E

預處理后停止,不進行編譯,預處理代碼到標準輸出

4)-o file

指定輸出file文件

5)-v

顯示gcc版本,編譯細節

6)-Wall

打開警告選項

7)-g

打開調試選項,可用gdb調試

8)-llibrary

連接名為library的庫文件,真正名字為liblibrary.a

9)-static

靜態編譯

10)-shared

生成共享obj文件

11)-Idir

指定dir為頭文件搜索目錄

12)-Ldir.

指定dir為庫文件搜索目錄

arm-linux-ld選項

1)-T

指定代碼段(-Ttext),數據段(-Tdate),bss段(-Tbss)的起始地址

使用連接腳本(-Txxx.lds)

例:

SECTIONS {

. = 0x30000000;

.text?? ? ? ?:?? ? ? ?{ *(.text)}

.rodata ALIGN(4)????: ?{ *(.rodate) }

.data ALIGN(4)????????: ?{ *(.data) }

.bss ALIGN(4)?? ? ? ? : ?{ *(.bss) *(COMMON) }

}

第二行表示當前運行地址為0x30000000,第三行定義了.text段,內容為*(.text),表示所有輸入文件的代碼段,起始運行地址為0x30000000

第四行定義了.rodata段,代碼緊挨.text,ALIGN(4)表示起始地址4字節對齊如果.text為0x30000000-0x300003f1,則.rodata地址為0x300003f4

arm-linux-objcopy選項

此命令用來復制一個目標文件內容到另一個文件中,可進行格式轉換

例:將ELF格式轉換成二進制文件

arm-linux-objcopy -O binary -S elf_file bin_file

arm-linux-objdump選項

常用來查看反匯編代碼

ELF轉反匯編

arm-linux-objdump -D elf_file > dis_file

二進制轉反匯編

arm-linux-objdump -D -b binary -m arm bin_file > dis_file

Makefile介紹

1)格式:

目標 : 依賴

命令

例:

hello: hello.c

gcc -o hello hello.c

clean:

rm -f hello

2)賦值方法

延時變量:使用時才展開

var = value

var ?= value(變量未定義才有效,即定義第一次出現的延時變量)

立即變量:定義時值就確定

var := value

對于 var += value 右邊變量如果前面使用:=定義為立即變量,則它是立即變量,否則為延時變量

3)Makefile常用函數

略,太多了,用到時再介紹

總結

以上是生活随笔為你收集整理的嵌入式linux编程,嵌入式Linux学习笔记 - 嵌入式Linux基础知识和开发环境的构建_Linux编程_Linux公社-Linux系统门户网站...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。