0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

拒絕開發(fā)板,?用 SkyEye 就可以模擬 ARM Linux!

Q4MP_gh_c472c21 ? 來(lái)源:未知 ? 作者:伍文輝 ? 2018-03-28 09:07 ? 次閱讀

對(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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • ARM
    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)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    SkyEye模擬器的音頻輸出模擬模塊設(shè)計(jì)與實(shí)現(xiàn)

    ,支持多種CPU指令集,可以模擬多種嵌入式開發(fā)板,在SkyEye上運(yùn)行的操作系統(tǒng)就像運(yùn)行在真正的硬件上一樣,而且開發(fā)人員
    發(fā)表于 04-24 09:14

    如何用Skyeye代替ARM開發(fā)板來(lái)學(xué)習(xí)嵌入式

    呢?Skyeye這個(gè)東西可以完完全全代替ARM開發(fā)板。我們?cè)?b class='flag-5'>linux系統(tǒng)上安裝了之后,就可以
    發(fā)表于 07-30 22:36

    移植minicom到ARM開發(fā)板

    最近調(diào)試自己做的S5PV210的底板上面的串口。因?yàn)闉榱藴y(cè)試一個(gè)串口而寫程序很麻煩。所以,直接移植了一個(gè)minicom到開發(fā)板上面。這樣就可以直接進(jìn)行串口收發(fā)了。特別是在我需要同時(shí)測(cè)試多個(gè)串口的時(shí)候
    發(fā)表于 07-05 14:07

    Linux利器:QEMU!用它模擬開發(fā)板能替代真開發(fā)板? 精選資料分享

    運(yùn)行(其實(shí)它也可以在你的Arm開發(fā)板上運(yùn)行,我們今天先不討論這種場(chǎng)景),能夠模擬Arm、MIPS、RISC-V等各種CPU和
    發(fā)表于 07-13 06:59

    嵌入式Linux開發(fā)基礎(chǔ)知識(shí)

     嵌入式系統(tǒng)開發(fā)模式嵌入式Linux系統(tǒng)的構(gòu)成主要任務(wù)與流程利用Skyeye仿真開發(fā)板開發(fā)板使用嵌入式應(yīng)用程序
    發(fā)表于 09-10 11:07 ?39次下載
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>開發(fā)</b>基礎(chǔ)知識(shí)

    EP9315 ARM評(píng)估開發(fā)板

    關(guān)鍵詞:9315開發(fā)板 ARM開發(fā)板 EP9315ARM芯片規(guī)格:嵌入式工業(yè)計(jì)算機(jī)結(jié)構(gòu),采用 Cirrus LOGIC EP9315處理器,主頻200MHz,自帶2D圖形加速器,浮點(diǎn)運(yùn)
    發(fā)表于 12-16 15:25 ?1008次閱讀

    ARM SkyEye仿真軟件使用說(shuō)明

      SkyEye是一個(gè)開源軟件(opensource software)項(xiàng)目,中文名字是“天目”。SkyEye的目標(biāo)是在通用的Linux和Windows平臺(tái)實(shí)現(xiàn)一個(gè)仿真集成開發(fā)環(huán)境,
    發(fā)表于 11-12 11:05 ?4534次閱讀

    如何使用ARM開發(fā)板Linux嵌入式系統(tǒng)設(shè)計(jì)一個(gè)智能點(diǎn)菜系統(tǒng)

    本課題設(shè)計(jì)是以ARM開發(fā)板搭載Linux嵌入式系統(tǒng)為核心,使用QT編程制作GUI點(diǎn)菜終端,LCD屏顯示菜單信息,并可以通過(guò)觸摸屏按鈕實(shí)現(xiàn)點(diǎn)
    發(fā)表于 11-29 08:00 ?16次下載
    如何使用<b class='flag-5'>ARM</b><b class='flag-5'>開發(fā)板</b>和<b class='flag-5'>Linux</b>嵌入式系統(tǒng)設(shè)計(jì)一個(gè)智能點(diǎn)菜系統(tǒng)

    arm開發(fā)板能干什么_arm開發(fā)板什么語(yǔ)言

    ARM開發(fā)板,即以英國(guó)ARM(Advanced RISC Machines)公司的內(nèi)核芯片作為CPU,同時(shí)附加其他外圍功能的嵌入式開發(fā)板,用以評(píng)估內(nèi)核芯片的功能和研發(fā)各科技類企業(yè)的產(chǎn)品
    發(fā)表于 09-11 15:59 ?5724次閱讀

    新手學(xué)習(xí)嵌入式Linux和Android開發(fā)板推薦

    一,確定目標(biāo),linux是一個(gè)非常非常大的概念。想全部吃透是不可能的。理想的說(shuō),搞懂linux,就可以做所有工作。個(gè)人更傾向于說(shuō)想做什么樣工作,需要側(cè)重學(xué)linux的哪部分。二,選擇
    發(fā)表于 11-01 17:36 ?15次下載
    新手學(xué)習(xí)嵌入式<b class='flag-5'>Linux</b>和Android<b class='flag-5'>開發(fā)板</b>推薦

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

    學(xué)習(xí)嵌入式,必不可少的工具就是一塊開發(fā)板。對(duì)新手而言,學(xué)嵌入式哪個(gè)開發(fā)板好,下面為大家推薦一款比較好的嵌入式開發(fā)板。嵌入式開發(fā)板要推薦的是
    發(fā)表于 11-03 12:51 ?11次下載
    android<b class='flag-5'>開發(fā)板</b>那種好,學(xué)嵌入式<b class='flag-5'>用</b>哪個(gè)<b class='flag-5'>開發(fā)板</b>好?嵌入式<b class='flag-5'>開發(fā)板</b>推薦

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

    Cortex-A7 MPU內(nèi)核和Cortex-M4 MCU內(nèi)核,既可以Linux,又可以玩單片機(jī)。 FS-MP1A開發(fā)板從多核處理器將成為嵌入式技術(shù)發(fā)展主流考慮,在芯片資源、功能、技
    的頭像 發(fā)表于 06-07 09:06 ?5361次閱讀
    哪些<b class='flag-5'>開發(fā)板</b><b class='flag-5'>可以</b>運(yùn)行<b class='flag-5'>linux</b>  stm32<b class='flag-5'>可以</b>嗎

    arm開發(fā)板如何安裝linux系統(tǒng)

    安裝Linux系統(tǒng)到ARM開發(fā)板是一個(gè)復(fù)雜的過(guò)程,涉及到多個(gè)步驟和不同的工具。下面是一個(gè)詳實(shí)且細(xì)致的教程,包含了從準(zhǔn)備工作到最終啟動(dòng)Linux系統(tǒng)的所有步驟。 準(zhǔn)備工作 在開始之前,需
    的頭像 發(fā)表于 01-24 14:19 ?4784次閱讀

    fpga開發(fā)板linux開發(fā)板區(qū)別

    (Field-Programmable Gate Array)是一種可編程邏輯器件,它可以通過(guò)編程改變硬件邏輯電路的功能和結(jié)構(gòu)。FPGA采用了可編程的門極,可以根據(jù)需要重新配置內(nèi)部電路,從而實(shí)現(xiàn)不同的功能和邏輯關(guān)系。而Linux
    的頭像 發(fā)表于 02-01 17:09 ?2591次閱讀

    linux開發(fā)板和單片機(jī)開發(fā)的區(qū)別

    硬件架構(gòu) Linux開發(fā)板和單片機(jī)開發(fā)在硬件架構(gòu)上有很大的區(qū)別。Linux開發(fā)板通?;?b class='flag-5'>ARM、
    的頭像 發(fā)表于 08-30 15:30 ?1526次閱讀