新聞中心
深入探索 linux arm hex 編碼技術(shù)

創(chuàng)新互聯(lián)主營漳浦網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,成都App制作,漳浦h5小程序設計搭建,漳浦網(wǎng)站營銷推廣歡迎漳浦等地區(qū)企業(yè)咨詢
在嵌入式系統(tǒng)和移動設備中,Linux ARM 微處理器是一種非常常見的處理器架構(gòu)。為了運行在這種處理器上的軟件和應用程序,需要將其編譯成適合的二進制代碼。而 HEX 編碼就是最常見的二進制表示方法之一。在本文中,我們將深入探索 Linux ARM HEX 編碼技術(shù),并著重講解其在嵌入式系統(tǒng)中的應用。
什么是 HEX 編碼?
十六進制(HEX)編碼是一種計算機科學中常用的進位制表示法,使用數(shù)字 0-9 和字母 A-F 來表示數(shù)字 0-15。在計算領(lǐng)域,十六進制表示法尤其流行,因為它更加緊湊而且易于轉(zhuǎn)換成二進制。例如,在十六進制中,數(shù)字 “E” 表示二進制中的 “1110”。
而將十六進制表示法用于編碼二進制程序,則稱之為 HEX 編碼。將十六進制表示法用于編碼二進制程序,是因為這種形式可以運用于不易識別和處理二進制碼的設備,例如嵌入式設備和 ARM 處理器。
在 Linux ARM 系統(tǒng)中,用戶需要將自己的程序源代碼編譯成適合 ARM 處理器的二進制程序,然后將其寫入 FLASH 存儲器。由于使用十六進制表示法可以精簡文件大小并方便傳輸,因此 HEX 編碼成為了當今 ARM 設備上的主流二進制格式之一。HEX 編碼會把二進制程序的 instructions 作為十六進制值進行編解碼,并在十六進制文件中按順序存儲。
做好 HEX 格式的準備
要在 Linux ARM 系統(tǒng)中編譯和使用 HEY 編碼程序,需要進行必要的準備。需要將編譯器設置為適合 ARM 處理器的編譯器。ARM GNU 工具鏈是一套非常受歡迎的 ARM 處理器編譯成鏈工具。它提供有包括 C 編譯器、匯編器、鏈接器等多種工具,用于編譯和調(diào)試 ARM 處理器所用的程序。
還需要了解一些程序調(diào)試相關(guān)的工具,以免因為工具的問題而無法調(diào)試程序。例如,使用 gdb 和 xxd 工具可以幫助我們調(diào)試和驗證程序的功能。
理解 HEX 文件格式
當使用 HEX 編碼程序時,輸出文件將成為一個包含所有 instructions 的文本文件,并且該文件可以分為幾個行。每行通常包含一個地址和一個或多個數(shù)據(jù)字節(jié)。而每個數(shù)據(jù)字節(jié)都為一個十六進制數(shù)值,或一個到兩個 ASCII 字符表示的種類(例如,與字節(jié)相對應的字符)。
HEX 文件通常是純文本格式的,其之一個字符為冒號 “:”。在該字符后面的 2 個字符指定該行中字節(jié)數(shù)。在這之后,16 個字符將指定地址。緊隨地址指定的字符是最多 16 個字節(jié)的數(shù)據(jù)。除開頭和結(jié)束的行以外,其他行的最后兩個字符通常是一個校驗和值。這個校驗和是對地址和數(shù)據(jù)字節(jié)進行計算得到的。
HEX 文件的格式如下:
: LL AAAA TT DD DD DD DD DD DD DD DD DD DD DD DD DD CC
其中:
– LL:該行數(shù)據(jù)字節(jié)數(shù)量,為 16 進制文本。
– AAAA:此行數(shù)據(jù)距離頭部的地址偏移,為 16 進制文本。
– TT:數(shù)據(jù)類型,其可以是 00、01、02、03、04、05、06、07、08、09、以及 0A。如果 TT 值為 00,表示這是數(shù)據(jù)行;如果 TT 值為 01,表示這是文件結(jié)束行。
– DD:該行數(shù)據(jù),可以包含多個數(shù)據(jù)字節(jié)。
– CC:校驗和字段。
在 Linux ARM 中,HEX 文件格式的使用使得程序的傳輸和調(diào)試更加方便。使用這種格式,可以將程序以文本文件的形式傳輸,并在運行時將其解析為一組 instructions 執(zhí)行。
結(jié)語
Linux ARM HEX 編碼在嵌入式設備和 ARM 處理器中的應用非常廣泛。它在編碼的過程中更大化了空間利用率和傳輸效率,并且并不要求使用額外的轉(zhuǎn)換工具。本文介紹了使用 HEX 編碼來編譯和調(diào)試 ARM 處理器程序的流程,以及其主要的文件格式形式。使用 HEX 編碼的好處在于,在進行調(diào)試階段和傳輸程序的過程中,可以輕松地將程序以文本形式傳輸和處理,從而大大簡化了整個過程。
相關(guān)問題拓展閱讀:
- linux源碼中ARM外設寄存器地址在哪定義?
- arm linux 應用程序 如何內(nèi)嵌匯編
linux源碼中ARM外設寄存器地址在哪定義?
芯片不同定義不同
這個要看你使用的是哪種平臺(samsung還是ti等)和編寫哪種類型的程序(一般含虛陪情況下都是驅(qū)動程序),如果是平臺相關(guān),則一般在arch/arm下,以三星為例,譽亮一般放在arch\arm\plat-s3c\include中,談蠢如果是驅(qū)動程序中用到的寄存器,會在相應驅(qū)動程序的頭文件中
硬件的外設地址在數(shù)據(jù)手冊里定義,不在操作系統(tǒng)里定義
arm linux 應用程序 如何內(nèi)嵌匯編
在linux源代碼中會有一部分c語言與匯編語言相交融的部分。
其中l(wèi)inux中匯編語言采用的不是我們通用的intel的匯編語言,而是采用的是AT&T格式的匯
編語言,它們之間有一些差別:
目標與源的方向不大一樣
mov
ax,
bx
mov
%bx,
%ax
AT&T寄存器前要加入%
ax
%ax
AT&T立即數(shù)前面要加上$
add
ax,
add
%ax,$4
對于訪問指令的操作數(shù)大小
intel的格式是在操作數(shù)前加上BYTE
PTR、DWORD
PTR等等
AT&T格式:在操作數(shù)后面加上b、l、w等
MOV
AL,
BYTE
PTR
FOO(intel)
movb
FOO,
%al
(AT&T)
間接尋址:
SECTION:
Section:disp(base,
index,
scale)
C語言中插入?yún)R編代碼比純粹的匯編要難,因為要設計到“培桐如何分配使用寄存器、怎樣與C語
言中變量相結(jié)合”
下面“=”代表只讀,“+”代表讀寫
每個輸嫌宴出部分均以=開始
比如我想配者坦定義一個char型的變量,放入ax中
register
char
_temp
a
(“ax”);
register
char
_temp
__a__
(“ax”);
以上兩種方式均正確
在這里我們通常看到普通的寄存器前面有兩個%,代表下面的意思:之一寄存器前要有一個%
第二對于一個模板前要加入一個%
下面以一個在內(nèi)核中常見的目的為了實現(xiàn)原子操作的一個函數(shù)為例子atomic_add來介紹
static
__inline__
void
atomic_add(int
i,
atomic_t
*v)
{
__a__
__volatile__(
LOCK
“addl
%1,
%0″
:”=m”(v->counter)
:”ir”(i),
“m”(v->counter)
);
}
ir代表一個寄存器中的直接操作數(shù)
首先一個頭部:__a__
__volatile__();
a();
__a__();告訴編譯器里面是匯編語言
:之一個冒號是輸出部分:第二個冒號是輸入部分
其實還有第三個冒號:代表著損壞部分
a(”匯編語句”
:輸出部分
:輸入部分
:損壞部分)
%0、%1
等等代表著一種模板操作數(shù),其中數(shù)字到幾取決于cpu寄存器數(shù)量
“m”,
“v”,
“o”
–內(nèi)存單元
“r”
任意寄存器
“q”
表示eax、ebx、ecx、edx之一
“i”,
“h”
表示立即數(shù)
“a”,
“b”,
“c”,
“d”表示eax、ebx、ecx、edx
關(guān)鍵字LOCK表示在執(zhí)行的時候把系統(tǒng)總線鎖住,不讓其他
關(guān)于linux arm hex的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都網(wǎng)站推廣找創(chuàng)新互聯(lián),老牌網(wǎng)站營銷公司
成都網(wǎng)站建設公司創(chuàng)新互聯(lián)(www.cdcxhl.com)專注高端網(wǎng)站建設,網(wǎng)頁設計制作,網(wǎng)站維護,網(wǎng)絡營銷,SEO優(yōu)化推廣,快速提升企業(yè)網(wǎng)站排名等一站式服務。IDC基礎(chǔ)服務:云服務器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗、服務器租用、服務器托管提供四川、成都、綿陽、雅安、重慶、貴州、昆明、鄭州、湖北十堰機房互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務。
新聞標題:「深入探索 Linux ARM Hex 編碼技術(shù)」 (linux arm hex)
瀏覽地址:http://fisionsoft.com.cn/article/djsjdhs.html


咨詢
建站咨詢
