---
# System prepended metadata

title: Developing with AMP Architecture

---

# Developing with AMP Architecture
編輯者：葛顯峯

本文章旨在如何在實驗室目前開發環境使用 Asymmetric Multiprocessing(AMP)架構。
由於目標讀者為具有一定基礎之Xilinx開發環境(ZedBoard與Vivado)使用者為主(若對Xiinx開發環境還不熟的可以回去翻閱共筆上較入門的教學)，因此本文章性質為整理之前成功建立AMP project所使用到的各個網路教學與討論，並加上簡單整理與可能會出現的bug與解法，詳情請點進個教學網站照著操作。

以下將分成數個章節來講解：
- I. 如何利用Vivado搭建兩個核都是bare metal application的AMP project
- II. 如何搭建一個跑Linux一個跑bare metal的AMP project
- III.如何在Virtual Machine搭建PetaLinux
- IV. 如何利用PetaLinux搭建AMP kernel
- V. 如何利用PetaLinux搭建AMP PYNQ

## I. 如何利用Vivado搭建兩個核都是bare metal application的AMP project

Ref. [1]: https://blog.csdn.net/leon_zeng0/article/details/106996156
1. 在[1]當中簡單示範了一個CPU跑印出hello world並結合counter，每次印出後+1；另一個CPU則是讓板子上的LED燈亮的簡單application
2. [1]還包含了固化(把寫好的project打包成BOOT.bin並燒到SD card或flash上)所需要加的程式碼與步驟

## II. 如何搭建一個跑Linux一個跑bare metal的AMP project
Ref. [2]:[zynq 7000 AMP模式 双裸核CPU同时运行](https://blog.csdn.net/leon_zeng0/article/details/106996156)
Ref. [3]:[[Zedboard] Unknown command booti PetaLinux](https://forums.xilinx.com/t5/Embedded-Linux/Zedboard-Unknown-command-booti-PetaLinux/td-p/899108)

1. 基本上[2]的內容沒有太大錯誤，但因為板子不同，所以會造成一些小bug
2. 最後經過無數常試得到可以運行的配置是：
(1) lscript.ld：Base addr: 0x18000000，Size: 00FF00000
(2) main.c #define：CPU1STARTADR: 0xFFFFFFF0，CPU1STARTMEM: 0x18000000
(3)    Device tree：memory{
        device_type = “memory”;
        reg = <0x0 0x20000000>;
        };
3. 然後在build kernel時可能會有booti的錯誤，請參考[3]討論當中，把 *booti* 改回 *bootm* 的回答
 ![](https://i.imgur.com/JWwA0aa.png)

5. 之後再重新build kernel與u-boot應該就可以包好AMP Linux了



## III. 如何在Virtual Machine搭建PetaLinux

Ref. [4]: [PetaLinux安装教程，基于Ubuntu](https://blog.csdn.net/u013793399/article/details/53054734?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162311571216780271589607%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162311571216780271589607&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-53054734.first_rank_v2_pc_rank_v29&utm_term=petalinux&spm=1018.2226.3001.4187)
Ref. [5]:[PetaLinux Tools Documentation UG1144 (v2019.2)](https://www.xilinx.com/support/documentation/sw_manuals/xilinx2019_2/ug1144-petalinux-tools-reference-guide.pdf)

1. 基本上按照[4]裡面跑的就好了
2. 我最後用的的是PetaLinux 2019.2，因為PYNQ官方的安裝說明是用2019.2版製作的，早一點的版本(之前測試過2018.2)在build kernel時會有PYNQ要用到的的選項無法選取
3. 由於安裝的版本與[4]的不同，有差的地方(硬體要求與dependency)的地方要參考[5]的記載，如下圖，請依據自己在Virtual Machine或電腦上裝的OS來安對應的tool或library
    *例如在虛擬機上裝Ubuntu 18.04.1的話，就要看最右欄    
![](https://i.imgur.com/YK1ooH6.png)![](https://i.imgur.com/kmT3lmm.png)
4. 正常完整安裝完上表所列的所有dependencies之後，再去執行從Xilinx官網下載下來的PetaLinux安裝檔，應該就能安裝了；如果有沒安裝到的dependency，執行安裝檔時會跳出錯誤訊息，並指名哪一個tool或library沒裝。跳出去確實安裝完在惟去執行安裝檔就可以了。
5. 若是在virtual machine上安裝PetaLinux的話，請注意分配給該虛擬機的硬體資源(CPU/RAM)有沒有達到[5]的最低要求。若無，則有可能安裝卡住跑不下去，若有，這部分也需要跑一段時間，看硬體的好壞而定。

## IV. 如何利用PetaLinux搭建AMP kernel

Ref. [6]: [PetaLinux学习笔记三](https://blog.csdn.net/weixin_41922484/article/details/103291241)

1. PetaLinux在每次要使用前，都要先source PetaLinux安裝路徑底下的*settings.sh*
2. 之後照上方[4]後半及[6]前半的教學創建一個project
3. 要創造AMP OS最關鍵的地方在[6]當中提到的：
    >DTG Settings 中：
console=ttyPS0,115200 earlyprintk root=/dev/mmcblk0p2 rw rootwait rootfstype=ext4 mem=256M **maxcpus=1**
    
    *敘述當中一定要加入**maxcpus=1**的敘述，這樣才能限制OS只在開起來的那個CPU上面跑
 這邊設置完成後就能生成kernel檔案(image.ub)了
4. 其他設定就沒有3.的 **maxcpus** 限制那麼重要了，可以選擇參考[4]或[6]繼續把 u-boot、system.dtb及BOOT.bin生出來，並參考[6]放到已經照沈老師 lab4-1 分割好的SD卡對應區域中並解壓縮
5. 完成後就能從SD卡開啟自己建的AMP OS了


## V. 如何利用PetaLinux搭建AMP PYNQ
Ref. [7]: [PYNQ SD Card](https://pynq.readthedocs.io/en/v2.5/pynq_sd_card.html)
1. 基本上照[7]的教學做就可以了
2. 但我比較偷懶，是用IV的方法包kernel，然後用文緯從MSoC提供的SD卡上面燒下來的SD image，燒到SD卡上後，再把裡面的kernel(image.ub)換成自己生的kernel，保留從SD image上燒到卡上的的 Root Filesystem 