1. 程式人生 > >嵌入式Linux開發——(一)開發環境基礎知識

嵌入式Linux開發——(一)開發環境基礎知識

一、交叉編譯工具(編譯出能在ARM平臺上執行的程式)

1)檔案生成過程:

①預處理:事先將“#”開頭的檔案加入進去

②編譯:C/C++ ----->彙編程式碼

③彙編:彙編程式碼----->機器程式碼

④連線:將生成的目標檔案(OBJ)和系統的OBJ檔案、庫檔案 連線起來

2)編譯器各個選項

arm-linux-gcc選項

     -o  -S  -E  -v

     -Wall : 開啟所有警告資訊

arm-linux-ld選項

  -T :只用於連線Bootlodar、核心等沒有“底層軟體支援”的軟體

  -Ttext   startaddr    (程式碼段)

  -Tdata  startaddr   (資料段)

  -Tbss   startaddr    (bss段)

arm-linux-objcopy選項

用於複製一個目標檔案的內容到另一個檔案中,可以使用不同於原始檔的格式輸出目標檔案,即可以進行格式轉換。

arm-linux-objcopy      -O      binary    -S      elf_file     bin_file          【 elf格式----->二進位制格式(bin)】

arm-linux-objdump選項

(將其他檔案轉換為反彙編檔案

 arm-linux-objdump    -D   elf_file   >   dis_file                                            【elf_file----->dis_file】

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

3)Makefile用法

  ①必須以Tab鍵縮排

  ②賦值方法

   immediate    =  deferred

   immediate  ?=  deferred

   immediate  :=  deferred

   immediate  +=  deferred

   延時變數:當真正使用這個變數時,這個變數的值才真正確定  “=”“?=”

   立即變數:定義時它的值就已經確定  “:=”

  ③常用函式

  ④自動變數

   [email protected]:目標檔名

   $^:  所有依賴檔名

   $<:  第一個依賴檔名

4)常用ARM彙編指令及ATPCS規則

  ①相對跳轉命令:b、bl

   Bl 除了跳轉之外,還會將返回地址(bl的下一條指令的地址)儲存在lr暫存器中

  ②資料傳送指令:mov                   地址讀取指令:ldr

   mov  r1,  r2          (r1 = r2)              ldr   r1,  =4096

   mov  r1,  #4096  (r1=4096)

  mov傳輸的常數必須為“立即數”

③記憶體訪問指令:ldr、str、ldm、stm

ldr  r1,  [r2,  #4]     將地址為r2+4的記憶體單元的資料讀到r1中

ldr   r1,  [r2],   #4   將地址為r2的記憶體單元中資料讀到r1中,然後r2+4

str   r1,  [r2]            將r1的資料存放到r2的記憶體單元中

str   r1,  [r2],  #4    將r1的資料存放到r2的記憶體單元中,然後r2+4

ldm、stm屬於批量記憶體訪問指令,只用一條指令就可以讀/寫多個數據

ldm / stm  {cmd}  <addressing_mode>  <rn>  {!} <register  list>  {^}

                 i:increment         ia:事後遞增

                 d:decrement      ib:事前遞增

                 a:after                da:事後遞減

                 b:before            db:事前遞減

④add  sub

add  r1,  r2,  #1     ===>  r1=r2+1

sub  r1,  r2,  #1     ===>  r1=r2-1

⑤程式狀態暫存器的訪問指令:msr  mrs

msr  cpsr,  r0       ===>複製r0到cpsr中

mrs  r0,   cprs      ===>複製cprs到r0

⑥其他偽指令

.extern               外部符號

.text                    程式碼段

.global  _start   定義全域性

_start:

⑦彙編指令的執行條件

  根據cpsr暫存器中的條件標誌位決定是否執行該指令

5)ARM-THUMB子程式呼叫規則:ATPCS

  (為了使C程式和彙編程式之間能夠互相呼叫)

  ATPCS規則:

  ①暫存器使用規則:

   ARM處理器中有r0--r15一共16個暫存器

  ②資料棧使用規則:

   資料棧:

           FD : Full  Desending :        滿遞減

           FD : Emptyl  Desending :  空遞減

           FA : Full  Acending :           滿遞增

           EA : Emptyl  Acending :     空遞增

③資料傳遞規則

當引數個數不超過4個時,使用r0--r3這4個暫存器來傳遞引數

6)diff  patch命令

製作補丁:

$  diff  -urNwB  linux-2.6.22.6  linux-2.6.22.6_ok  >  linux_2.6.22.6_ok.diff

打補丁:

cd  linux-2.6.22.6

Patch  -p1  <  ../linux-2.6.22.6_ok.diff

二、GPIO介面

   (S3C2440 : 130個I/O埠,分為A---J共9組)

1)通過暫存器來控制GPIO引腳

GPxCON:用於選擇引腳功能

GPxDAT:   用於讀/寫引腳資料

GPxUP:   用於確定是否使用內部上拉電阻

(x = A、B、C、.....J)

相關推薦

嵌入式LINUX學習-基於4412-LIUNX基礎知識總結筆記

硬碟主分割槽、擴充套件分割槽和邏輯分割槽是什麼? 硬碟分割槽是針對一個硬碟進行操作的,它可以分為:主分割槽、擴充套件分割槽、邏輯分割槽。其中主分割槽就是包含 作業系統啟動所必需的檔案和資料的硬碟分割槽,要在硬碟上安裝作業系統,則該硬碟必須要有一個主分割槽, 而且其主分割槽的數

ASP.NET C#學習環境基礎知識

什麼是.NET? 是微軟推出的開發動態WEB應用程式的開發平臺 什麼是ASP.NET? 是.NET的一部分,通過.NET平臺來開發ASP.NET 什麼是IIS? 是微軟的WEB伺服器,開發人員可以通過

嵌入式Linux開發——()開發環境基礎知識

一、交叉編譯工具(編譯出能在ARM平臺上執行的程式) 1)檔案生成過程: ①預處理:事先將“#”開頭的檔案加入進去 ②編譯:C/C++ ----->彙編程式碼 ③彙編:彙編程式碼----->機器程式碼 ④連線:將生成的目標檔案(OBJ)和系統的OBJ檔案

Linux 下wifi 驅動開發)—— WiFi基礎知識解析

 一、WiFi相關基礎概念 1、什麼是wifi        我們看一下百度百科是如何定義的:       Wi-Fi是一種可以將個人電腦、手持裝置(如pad、手機)等終端以無線方式互相連線的技術,事實上它是一個高頻無線電訊號。[1]  無線保真是一個無線網路通訊技術的品牌

嵌入式Linux應用開發① | 嵌入式LInux介紹及開發環境搭建

1.嵌入式Linux 嵌入式Linux是對執行在嵌入式裝置上的Linux的統稱,它們都是經過高度裁剪、具備特定功能的嵌入式Linux作業系統。 嵌入式裝置效能、資源有限,所以不能將標準的Linux應用到嵌入式和裝置上,所以對標準的Linux進行核心裁剪,針對某一個特定的功能進行完善,就可

嵌入式Linux裝置驅動開發筆記(

一、Linux裝置的分類 字元裝置、塊裝置、網路裝置,三種裝置之間的區別是資料的互動模式,分別為: 位元組流、資料塊、資料包。 二、VFS核心結構體 VFS核心結構體定義在”linux/fs.h”標頭檔案中。 1、struct inode結構體 記

嵌入式Linux USB驅動開發之教你步步編寫USB驅動程式

編寫與一個USB裝置驅動程式的方法和其他匯流排驅動方式類似,驅動程式把驅動程式物件註冊到USB子系統中,稍後再使用製造商和裝置標識來判斷是否安裝了硬體。當然,這些製造商和裝置標識需要我們編寫進USB 驅動程式中。 USB 驅動程式依然遵循裝置模型 —— 匯流排、裝置、驅動

嵌入式初學者學習嵌入式必看必看書籍列表,有電子檔的同學可以共享出來,謝謝 Linux基礎 1、《Linux與Unix Shell 程式設計指南》 2、《嵌入式Linux應用程式開發詳解》

嵌入式初學者參考書目 無論學習哪方面的程式設計,都需要掌握基礎知識和程式語言,其中《深入理解計算機作業系統》是比較重要的。下面是一些計算機關於嵌入式方面的推薦,有些是借鑑他人的歸納。 Linux基礎 1、《Linux與Unix Shell 程式設計指南》 2、《嵌入式Linux應用程式開發詳

嵌入式Linux裝置驅動開發

裝置驅動開發是Linux開發領域一個非常重要的部分,在Linux原始碼的85%都是驅動程式的程式碼。裝置驅動開發不僅需要了解硬體底層的知識,還需要擁有作業系統的背景。驅動程式追求的是高效,穩定,驅動程式發生的問題有可能直接導致整個系統的崩潰。 驅動程式不主動執

用Swing開發GUI程序(基礎知識

java基礎 GUI(Graphics User Interface)圖形用戶界面,可以讓用戶看著界面操作,所以要比控制臺程序更加直觀,可以提供更加豐富的功能。 在Java中,GUI操作的支持API,一般保存在java.awt和javax.swing包中,但一般情況我們選擇javax.swin

Kotlin開發 kotlin程式設計基礎

1 kotlin資料型別 1 數字型別 kotlin中數字的表示方式和java一樣 kotlin中Float,Double,十六進位制,二進位制,10進位制的表示和java一樣,區別是kotlin中無八進位制表示 kotlin中數字型別沒有隱式轉換,必須顯示轉換 每個數

軟體開發架構、網路基礎知識、osi七層模型

一、軟體開發的架構 涉及到兩個程式之間通訊的應用大致可以分為兩種: 第一種是應用類:qq、微信、網盤、優酷這一類是屬於需要安裝的桌面應用 第二種是web類:比如百度、知乎、部落格園等使用瀏覽器訪問就可以直接使用的應用 這些應用的本質其實都是兩個程式之間的通訊。而這兩個分類又對應了兩個軟體開發的架構

嵌入式Linux基於QML開發QtMultimedia應用

ByToradex秦海 1). 簡介 使用QML語言進行QT應用程式開發可以將介面開發和邏輯控制分開,提高應用的開發週期和靈活性;另外對於多媒體應用非常重要的一點是,基於QML/QT Quick 的應用程式可以直接呼叫GPU進行加速,這大大提高了多媒體應用在嵌入式系

開發所需向量基礎知識

向量的叉積 向量積,也被稱為叉積(即交叉乘積)、外積,是一種在向量空間中向量的二元運算。與點積不同,它的運算結果是一個偽向量而不是一個標量。並且兩個向量的叉積與這兩個向量都垂直。 定義: 兩個向量a和b的叉積寫作a × b(有時也被寫成a ∧ b,

[嵌入式Linux專案實戰開發]基於QT4.7.4的音樂播放器實現與設計【2018年給力專案】

[嵌入式Linux專案實戰開發]基於QT4.7.4的音樂播放器實現與設計【2018年給力專案】是【創科之龍】團隊aiku嵌入式視訊教程系列製作的現有的音樂播放器。 主要功能實現: 1.新建工程,基類選擇Qwidget。雙擊開啟介面檔案,在介面檔案中建立label顯示時間、若干個tool

嵌入式Linux】ARM開發板通過NFS掛載Linux主機實現檔案共享

一般在Linux主機上arm-linux-gcc編譯程式,然後將該生成的可執行檔案傳送給ARM開發板,ARM開發板再執行該檔案。 (主機Linux系統)--->(ARM開發板Linux系統)  傳送檔案的過程可以採用NFS,FTP等多種方法 採用NFS實現遠端掛載,ARM

嵌入式Linux裝置驅動開發——selec/poll

應用程式呼叫select,select系統呼叫的原型: int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout); fd_set資料

NodeMcu開發()---開發環境搭建

今天nodemcu的板子終於到了, 等了足足五天吶, 這快遞真是醉了, 迫不及待的搭建環境了 新的板子是沒有nodemcu庫的, 需要我們自己來移植, 首先移植nodemcu的庫吧 一 移植nodemcu庫 首先先講一下怎麼刷韌體,首先你需要安裝ch340串列埠驅動(有

11、iOS開發詳解(基礎知識

iOS開發詳解 本章節針對如何開發基於iOS系統的外掛進行介紹,在此之前,請閱讀Plugin Development Guide(外掛開發指南)對外掛的結構和JavaScript介面有一個大概的瞭解。 iOS外掛是以繼承至CDVPlugin類Object

java開發()JDK環境變數配置 持續更新...

(一)JDK環境變數配置 先下載相應的JDK壓縮包,官網下載,或者CSDN下載都可以本人這有JDK1.7的版本提供給大家點選下載JDK1.7 ,文章結尾會給大家奉上大牛整理的各項資料的下載地址彙總! 1.右擊"我的電腦",點選"屬性" 進入系統頁面 2.點選"高階系統設定" 進入系