對(duì)于希望學(xué)習(xí) ARM 匯編的同學(xué)而言, 購(gòu)買 ARM 開發(fā)板進(jìn)行板上實(shí)測(cè)無(wú)疑是一個(gè)有效的方法,不過(guò)購(gòu)買 ARM 開發(fā)板需要一筆費(fèi)用,而且每次測(cè)試都需要連接開發(fā)板,比較麻煩。這里介紹一個(gè) ARM 模擬器——SkyEye,通過(guò) SkyEye 我們可以直接在一臺(tái) PC 上完成 ARM 匯編程序的開發(fā)和調(diào)試了,擺脫了 ARM 開發(fā)板的限制,真是不錯(cuò)!
下面介紹如何使用:
1、下載 SkyEye 的最新版(https://sourceforge.net/projects/skyeye/),本文用的是 skyeye-1.3.4_rc1.tar.gz,同時(shí)為了后面的實(shí)驗(yàn),還要下載 testsuite,它是 skyeye 的測(cè)試文件,這里的版本是 skyeye-testsuite-1.3.4,里面有 ArmLinux。
2、安裝 SkyEye。
$ tar zxvf skyeye-1.3.4_rc1.tar.gz
$ cd skyeye12
根據(jù) INSTALL 文件里說(shuō)的步驟:
./configure
make lib
make
sudo make install
sudo make install_lib12345
注意,在 make 時(shí)可能會(huì)缺各種文件,apt-get install 就可以了,比如我們這里所遇到的兩個(gè)問(wèn)題是:python-dev 和 llvm 沒(méi)有安裝。解決方法很簡(jiǎn)單:
$ sudo apt-get install python-dev
$ sudo apt-get install llvm12
這樣 SkyEye 就算安裝好了。
3、添加環(huán)境變量。
默認(rèn) SkyEye 是安裝在 /opt/ 下的,因此為了方便,我們?cè)诃h(huán)境變量里把它的路徑加入,我們寫到 .bashrc 文件中,打開它:
$ vi ~/.bashrc1
輸入:
#SkyEye 1.3.4
export PATH=/opt/skyeye/bin:$PATH12
之后注銷再登錄或執(zhí)行 source .bashrc 就可以使環(huán)境變量生效了。
4、運(yùn)行 arm_hello 測(cè)試程序。
SkyEye 安裝好后會(huì)在 /opt/skyeye/testsuite 下有一個(gè) arm_hello 的測(cè)試程序,按如下方式運(yùn)行:
$ cd /opt/skyeye/testsuite/arm_hello
$ skyeye -e arm_hello12
注意:skyeye 要運(yùn)行一個(gè)程序時(shí)必須要在這個(gè)程序的目錄里,因?yàn)?skyeye 要讀取這個(gè)程序的 skyeye.conf 配置文件,所以第一步我們要切換到 /opt/skyeye/testsuite/arm_hello 目錄下。
這時(shí)我們會(huì)進(jìn)入 skyeye 命令模式,輸入 start 讓 arm_hello 程序開始運(yùn)行,會(huì)彈出一個(gè)“connecting to Ubuntu:xxx”的字樣的窗口。
5、確保 arm_hello 正常運(yùn)行。
在 skyeye 命令行輸入 run 開始運(yùn)行,這時(shí)窗口會(huì)不停的輸出“helloworld”,說(shuō)明 arm_hello 已經(jīng)成功運(yùn)行了!
6、arm_hello 的其他命令。
在 skyeye 命令行輸入 stop 停止運(yùn)行;輸入 quit 退出skyeye;輸入 help 查看幫助。
顯然,上面只是安裝好了 SkyEye,我們的目的是在 SysEye 中模擬 ARM Linux。那么,下面就來(lái)介紹如何在 SkyEye 上啟動(dòng) Linux,就和在真實(shí)的 ARM 開發(fā)板上一樣。
1、解壓 testsuite 測(cè)試文件。
$ tar zxvf skyeye-testsuite-1.3.4_rc1.tar.gz1
其中的 linux 目錄就是我們要移植到板子上的 amrlinux,依次進(jìn)入:s3c2410 –>s3c2410x-2.6.36,有三個(gè)文件,vmlinux 是 Linux 內(nèi)核鏡像,skyeye.conf 是配置文件,initrd.img 是臨時(shí)根文件系統(tǒng)。我們?cè)?/opt/skyeye/testsuite 下新建一個(gè)目錄,然后 copy 過(guò)來(lái):
$ sudo mkdir /opt/skyeye/testsuite/armlinux
$ cd linux/s3c2410/s3c2410x-2.6.36
$ sudo copy * /opt/skyeye/testsuite/armlinux123
2、運(yùn)行 vmlinux 。
$ cd /opt/skyeye/testsuite/armlinux
$ skyeye -e vmlinux12
進(jìn)入 skyeye 命令模式,輸入 start 打開串口窗口。
(我在執(zhí)行這一步時(shí)出錯(cuò):failed to setup_module (name:net, type:cs8900a),我把 skyeye.conf 里的 net 那一行注釋掉了,就行了。)
如果窗口沒(méi)有打開,則修改 uart:mod=stdio 為 uart:mod=term,然后再試試。
3、啟動(dòng) Linux 。
在 skyeye 命令行輸入 run 啟動(dòng)Linux,屏幕隨即會(huì)輸出串口信息,不過(guò)速度很慢!
附幾張圖:
上面我們簡(jiǎn)單介紹了如何使用 SkyEye,并且成功運(yùn)行了既有的 arm_hello 程序,不過(guò)這個(gè)是針對(duì) arm7 的,現(xiàn)在我們要用 SkyEye 模擬 s3c2410(arm920T)。下面我們開始 SkyEye 的第二部分。
1、首先在 /opt/skyeye/testsuite 下建立 myhello 目錄。
$ mkdir /opt/skyeye/testsuite/myhello1
2、添加 myhello.c 文件。
$ cd /opt/skyeye/testsuite/myhello
$ vi myhello.c12
輸入如下內(nèi)容:
#define INTERVAL 100000
void myhello(void)
{
long * addr = (long *)0x50000020;
int timeout = 0;
while(1) {
timeout = 0;
while(++timeout <= INTERVAL);
*addr = 'a';
}
}12345678910111213
地址 0x50000020 就是 UART 的通道 0(UTXH0)的發(fā)送緩沖,把數(shù)據(jù)寫入這個(gè)地址就會(huì)自動(dòng)發(fā)送出去,當(dāng)然在模擬器中,發(fā)送的目標(biāo)地址就是我們的屏幕啦。
3、準(zhǔn)備啟動(dòng)代碼。
myhello.c 寫好了之后,我們還要準(zhǔn)備一段 s3c2410 的啟動(dòng)代碼,這段代碼在 s3c2410 一上電之后就開始執(zhí)行,在這段啟動(dòng)代碼中,回跳轉(zhuǎn)到我們寫的 myhello.c 函數(shù)。打開 start.S 文件:
$ vi start.S1
輸入如下內(nèi)容:
.text
.align 4
.global _start
_start:
ldr sp, =1024*4
bl myhello
halt:
b halt12345678910
上面這段很簡(jiǎn)單,就是聲明了一個(gè) _start 標(biāo)記,這個(gè)標(biāo)記在下面會(huì)用到,作為程序的入口地址。匯編和 C 鏈接的唯一必須的一步就是設(shè)置堆棧,這里我們把 sp 指向 4k 頂部,然后跳轉(zhuǎn)到我們的 c 函數(shù)myhello 。
4、編寫鏈接腳本。
鏈接的順序就是先 start.S 后 myhello.c,打開 myhello.lds 文件:
$ vi myhello.lds1
輸入如下內(nèi)容:
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
. = 0x00000000;
.text :
{
start.o
myhello.o
*(.rodata)
}
. = ALIGN(8192);
.data : {*(.data)}
.bss : {*(.bss)}
}123456789101112131415161718
表示輸出 arm 格式,第二句表示入口點(diǎn)是 _start 標(biāo)記,就是第3步的那個(gè) _start 標(biāo)記,然后在 0x00000000 處先插入 start.o,然后插入 myhello.o 。
5、編寫 Makefile 文件。
$ vi Makefile1
輸入如下內(nèi)容:
CC=arm-linux-gcc
LD=arm-linux-ld
CFLAGS= -c -g -march=armv6 -mtune=arm920t
LDFLAGS= -N -p -X -Thello.lds
myhello: start.o myhello.o
$(LD) $(LDFLAGS) start.o myhello.o -o myhello
arm-linux-objdump -xS myhello > myhello.s
arm-linux-readelf -a myhello > myhello.r
arm-linux-nm myhello > myhello.n
start.o: start.S
$(CC) $(CFLAGS) start.S
myhello.o: myhello.c
$(CC) $(CFLAGS) myhello.c
clean:
rm -rf *.o myhello *.r *.n *.s
arm-linux-objdump -xS myhello > myhello.s
arm-linux-readelf -a myhello > myhello.r
arm-linux-nm myhello > myhello.n123456789101112131415161718192021222324
6、最后我們還需要一個(gè) skyeye 配置文件。
$ vi skyeye.conf1
輸入如下內(nèi)容:
#skyeye config file
arch:arm
cpu: arm920t
mach: s3c2410x
# boot
mem_bank: map=M, type=RW, addr=0x00000000, size=0x04000000, boot=yes
# physical memory
mem_bank: map=M, type=RW, addr=0x30000000, size=0x02000000
# all peripherals I/O mapping area
mem_bank: map=I, type=RW, addr=0x48000000, size=0x20000000
uart:mod=term
#log: logon=0, logfile=./sk1.log, start=0, end=20000012345678910111213141516
7、編譯。
$ cd /opt/skyeye/testsuite/myhello
$ make12
8、測(cè)試。
$ cd /opt/skyeye/testsuite/myhello
$ skyeye -e myhello12
在 skyeye 命令模式下輸入:
start
run12
我們會(huì)發(fā)現(xiàn)連續(xù)輸出了字符“a”,完成!
PS:源碼中有兩處值得商榷的地方:
1) Makefile 第3、4行, 建議為:
CFLAGS= -c -g -march=armv4 -mtune=arm920t
LDFLAGS= -N -p -X -Tmyhello.lds12
2) skyeye.config 第15行, 建議為:
uart:mod=stdio
-
ARM
+關(guān)注
關(guān)注
134文章
9211瀏覽量
371134 -
Linux
+關(guān)注
關(guān)注
87文章
11378瀏覽量
211341
原文標(biāo)題:不用買開發(fā)板,?使用 SkyEye 模擬 ARM Linux
文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
SkyEye模擬器的音頻輸出模擬模塊設(shè)計(jì)與實(shí)現(xiàn)
如何用Skyeye代替ARM開發(fā)板來(lái)學(xué)習(xí)嵌入式
移植minicom到ARM開發(fā)板
Linux利器:QEMU!用它模擬開發(fā)板能替代真開發(fā)板? 精選資料分享
嵌入式Linux開發(fā)基礎(chǔ)知識(shí)

EP9315 ARM評(píng)估板開發(fā)板
ARM SkyEye仿真軟件使用說(shuō)明
如何使用ARM開發(fā)板和Linux嵌入式系統(tǒng)設(shè)計(jì)一個(gè)智能點(diǎn)菜系統(tǒng)

arm開發(fā)板能干什么_arm開發(fā)板用什么語(yǔ)言
新手學(xué)習(xí)嵌入式Linux和Android開發(fā)板推薦

android開發(fā)板那種好,學(xué)嵌入式用哪個(gè)開發(fā)板好?嵌入式開發(fā)板推薦

哪些開發(fā)板可以運(yùn)行linux stm32可以嗎

評(píng)論