# 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