嵌入式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.點選"高階系統設定" 進入系