日韩欧美亚洲一区SWAG

  • <dd id="kgqm6"></dd>
  • <menu id="kgqm6"><tr id="kgqm6"></tr></menu>
  • 侵權投訴

    Linux移植和Xilinx的Petalinux的快速移植開發案例

    電子設計 ? 2020-11-27 10:36 ? 次閱讀

    作者:殷建飛

    本文是昨天發的文章《龍芯杯CPU設計競賽與ZYNQ設計流程介紹》接續部分。重點介紹傳統方式的Linux移植和Xilinx的Petalinux的快速移植開發兩種。

    部分硬件設計中需要CPU完成對電路寄存器的配置,為了完成Zedboard對FPGA上部分寄存器的配置功能,可以在PS單元(處理器系統)上運行裸機程序(無操作系統支持)完成和PL單元(FPGA部分)的數據交互功能,此時PS單元更像單片機開發;另一種方法是PS單元運行Linux操作系統,通過驅動程序和應用程序完成對硬件寄存器的讀寫操作,并且Linux有著完整的網絡協議棧支持,后續可拓展性更強,可以更好的發揮ZYNQ這種異構架構芯片的性能。主要分為兩部分,分別闡述Zedboard中FPGA和處理器互聯總線與硬件設計和Zedboard處理器系統上嵌入式Linux的移植與通過驅動和應用程序簡單配置FPGA寄存器的實現。上次介紹了沒有操作系統下的驅動和應用程序開發,本文介紹帶操作系統的驅動和應用程序開發。

    1、傳統方式移植Linux

    Zedboard上電后會首先啟動BootRom,bootrom中固化了最初啟動需要的初始代碼,并根據板卡上的跳線決定從flash或者sd卡或者jtag啟動。這里選擇從SD卡啟動,bootrom中的代碼會將SD卡中的啟動文件拷貝到RAM或者片上共享緩存中去,為下一步啟動做準備。

    下一階段的啟動文件負責初始化FPGA的比特流文件和初始化ARM處理器的FSBL文件(VIVADO生成),在PL和PS單元完成最基本的初始化操作后,就需要啟動BootLoader來引導后面發linux內核,XIlixn的解決方案中可以將二進制比特流文件和fsbl以及uboot打包成BOOT.bin文件,BOOT.bin中的uboot可以加載內核到內存,并從0x00080000位置啟動內核。另外,內核啟動還需要設備樹和根文件系統。

    (1)交叉編譯鏈和開發環境搭建

    為了得到能夠在嵌入式平臺上運行的代碼,需要在linux主機上交叉編譯需要運行的代碼,交叉編譯工具鏈就是提供交叉編譯的一套工具集。開發主機選擇Ubuntu1604LTS系統,安裝VIVADO17.4版本,安裝完成后 VIVADO SDK

    用時已經自動安裝了交叉編譯鏈arm-linux-gnueabihf- ,使用命令
    source/opt/Xilinx/SDK/2017.4/setting64.sh

    添加引用1后即可使用交叉編譯鏈。Xilinx在較早的VIVADO SDK版本中提供了arm-xilinx-linux-gnueabi-編譯鏈,區別在于arm-linux-gnueabihf-使用硬件加速浮點數運算,而arm-xilinx-linux-gnueabi-使用軟件計算。通過查詢資料,發現17.4版本的SDK中包含arm-xilinx-linux-gnueabi-編譯鏈的引用,但是軟件安裝時沒有成功安裝,這應該是17.4版本的一個BUG,我們在另一臺安裝15.4版本VIVADO SDK的Ubuntu主機下,找到/opt/Xilinx/SDK/2015/gnu/arm文件夾,將其拷貝到17.4版本對應的目錄,發現可以成功引用,輸入(交叉編譯鏈)gcc-v查看:

    gcc版本為4.9.2。需要注意的是,使用兩條編譯鏈中的任意一條都可以用于交叉編譯,但是兩者之前不兼容,因此使用其中一條交叉編譯鏈即可。17.4自帶的gcc編譯器版本更高,是6.2.1版本。

    為了支持32 位工具,需要預先安裝 32 位支持工具包。使用sudo命令獲取root權限,apt-get install lib32z1 lib32ncurses5lib32bz2-1.0 lib32stdc++6安裝上述工具包。(PS,可以修改Ubuntu鏡像源為西電開源社區鏡像,實測速度在5MB左右)。安裝上述包后還需要安裝Openssl庫來實現網絡保密性,在編譯u-boot時會用到,使用命令apt-get install libssl-dev安裝。

    為了提高工作效率,嵌入式開發通??梢栽赪indows下使用SourceInsight等內核源碼閱讀工具來開發驅動和應用程序,而交叉編譯環境則往往在linux主機上,因此我們可以使用ssh登陸linux服務器,完成命令控制和編譯文件,使用ftp文件傳輸服務在Windows和linux主機之間傳遞文件,編譯完成的驅動可以以NFS掛載的方式直接在嵌入式開發板運行。搭建工作環境不是本文的重點,因此不再這里詳細說明。

    (2)U-boot編譯

    Xilinx官方提供了u-boot的源碼,位于https://github.com/Xilinx/u-boot-xlnx/releases,我們按照自己需要的版本進行下載和使用。

    將下載好的u-boot-xlnx-xilinx-v2017.1.zip文件上傳到Ubuntu服務器,使用命令unzip解壓縮后進入u-boot-xlnx-xilinx-v2017.1目錄,在 u-boot 的文件夾下有很多子文件夾構成,其中每個文件夾都實現一個對應的功能。

    1) api:相關的api函數,如輸出字符函數。

    2) arch: 與特定的 CPU 構架相關。在該目錄下,有u-boot 所支持的各種架構的cpu,并且有一個單獨的子目錄對應。典型的,arch 文件夾下名字為 arm 的子目錄就是 Zynq-7000 SOC所對應使用的 CPU 構架目錄。

    3)board: 和一些已有開發板有關的文件。每一個開發板都有一個子目錄出現在當前目錄下

    4)common: 實現u-boot 命令行下所支持的命令。在該目錄下,每條命令對應一個獨立的文件夾。

    5)disk: 提供對磁盤的支持。

    6)doc:文檔說明

    7)drivers: 在該目錄下保存著 u-boot 所支持的設備驅勱程序。典型的如各種網卡、支持的CFI 癿 Flash 存儲器、串口和 USB 等。

    8)fs:支持的文件系統

    9)include:該目錄下保存著 u-boot 所使用的頭文件,對各種硬件平臺支持的匯編文件、系統的配置文件以及對文件系統支持的文件。該目錄下configs 目錄有開發板相關的配置頭文件,如 zynq_common.h 是與 zynq 開發板相關的配置文件。

    10)lib: 該目錄下保存著體系結構相關的庫文件。

    11)net: 該目錄下保存著網絡協議相關的代碼。比如BOOTP 協議、 TFTP 協議、RARP 協議和 NFS 文件系統的實現

    12)tools: 該目錄下保存著用于生成 u-boot 癿工具,包括 mkimage、 crc、 Makefile 和boards.cfg配置文件。

    下面開始進行u-boot的編譯,編譯u-boot需要扁平化設備樹的支持,首先輸入命令apt-get installdevice-tree-compiler安裝設備樹編譯工具。安裝完成dtc工具后就可以進行u-boot的編譯了。

    在configs文件下保存有各個開發板的默認配置,我們搜索zynq有關的配置文件,發現zynq_zed_defconfig文件,這個就是Zedboard默認的配置選項。而ax70**系列的則是黑金開發板的默認配置文件。

    在編譯u-boot之前,需要先將配置選項寫入.config配置文件中,輸入命令make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zynq_zed_defconfig進行配置。注意,你需要先source /opt/Xilinx/SDK/2017/setting64.sh添加相關引用才能使用,當然也可以把上述命令寫入/etc/profile這樣就可以開機使用。

    當出現written to .configs時,表明配置選項寫入成功,接下來我們就可以進行編譯u-boot了。

    使用命令make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-編譯u-boot,經過一段時間的編譯后,在u-boot根目錄下會出現u-boot文件,我們將其下載到Windows下并重命名為u-boot.elf,等待下一步使用。


    ?

    (3)生成BOOT.bin啟動文件

    BOOT.bin需要VIVADO SDK生成fsbl,然后將u-boot和VIVADO生成的比特流打包。

    啟動VIVADO SDK,選擇File ->New -> Application Project創建一個新的SDK工程,工程命名為fsbl,其余保持默認不變。


    ?

    點擊next,選擇ZYNQ FSBL模板,點擊Finish完成工程的創建,SDK會自動創建一個名為fsbl的工程和fsbl_bsp板級支持包。選中fsbl工程,右鍵選項選擇Create Boot Image,在彈出的選項卡中可以發現SDK已經問我們添加了剛才生成的fsbl和有VIVADO導入SDK中的比特流文件,我們只需要再添加編譯好的u-boot即可。

    點擊右側的Add可以添加新的文件,Delete可以刪除選中的文件,Edit可以編輯文件的類型。我們選擇Add添加u-boot.elf文件。

    在新的選項卡中填入uboot.elf的路徑,這里一定要注意類型為Datafile類型,否則無法正常啟動。

    點擊OK確認后退回到上次層選項卡,選擇Create Image選項,在SDK目錄下就會生成對應的BOOT.bin文件。

    將BOOT.bin拷貝到Zedboard的SD卡,連接串口,開機觀察串口提示,發現u-boot已經可以正常啟動了,并且此時FPGA也已經按照VIVADO的網表文件初始化完成,但是u-boot提示無法讀取內核鏡像,我們將在下一步中生成。

    (4)內核編譯

    Xilinx官方提供了linux的源碼,供開發者下載和使用,我們打開Xilinx官網鏈接:https://github.com/Xilinx/linux-xlnx/releases;選擇17.4版本下載并解壓。

    Linux解壓命令為 :

    tar zxvf linux-xlnx-xilinx-v2017.4.tar.gz

    解壓后進入該目錄,這里對關鍵目錄進行說明:

    1)include/---- 內核頭文件,需要提供給外部模塊使用

    2) kernel/---- Linux 內核癿核心代碼,包擴進程調度子系統,以及進程調度相關的模塊。

    3)arch/---- 體系結構相關的代碼,例如 arm, x86 等等,我們使用的ARM A9處理器就在arch/arm/目錄下。

    arch/mach包含了具體開發板有關的代碼

    arch/boot/dts 包含了設備樹文件

    arch/arm/configs目錄下包含了arm架構處理器和開發板的一些內核默認配置文件,Zedboard的默認配置文件也在此目錄下。

    4)driver目錄則存放了可用的驅動程序,你可以將自己的驅動放入此目錄,在后面選擇編譯進內核。

    5)scripts目錄下包含了設備樹編譯器dtc和解釋內核配置選項相關的文件和目錄。

    其余目錄則不是本文介紹的重點,當開發平臺啟動BootLoader后,需要讀取內核鏡像,并依賴設備樹文件傳入的一些啟動參數才能啟動。當然還需要文件系統的支持。Linux內核有Imange、zImage和uImage等格式,Image就是正常編譯出的linux內核,但是鑒于嵌入式資源有限,我們可以將內核和一段自解壓程序進行壓縮,這樣啟動時BootLoader先調用zImage的解壓接口進行解壓縮,而后在調用內核接口啟動內核,相比于Image,zImage啟動更慢一些。uImage就是在頭部加入了一些u-boot相關代碼的壓縮Linux內核鏡像,便于u-boot啟動內核鏡像。因此,我們最終要生成的就是uImage內核鏡像。

    上面說過在arch/arm中存放了我們需要的arm A9處理器的代碼和文件,進入arch/arm/configs,搜索zynq相關的配置,發現xilinxz_zynq_defconfig配置文件,這就是Zedboard可用的默認配置文件。和u-boot類似,我們也需要先寫入默認配置到.config文件才能編譯內核。

    使用命令make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xilixn_zynq_defconfig進行內核配置文件的寫入。寫入完成后提示written to .config??捎檬褂胢ake menuconfig配置內核選項:

    這里保持默認,無需修改,如果需要將自己的驅動編譯進內核,可以在這里選中,但是這樣不利于調試驅動。

    使用命令make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 編譯內核,內核編譯需要較長的時間。如果配置過程中需要重新修改或者發生錯誤,可以使用make distclean命令使內核恢復最初的狀態,然后重新編譯。

    我們使用make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImageLOADADDR=0x00008000重新生成內核,指定內核鏡像為uImage,內核入口地址為0x00008000。由于內核已經編譯過一次,這次可以很快生成。

    生成的內核位于arch/arm/boot目錄下??截恥Image到Zedboard的SD卡準備啟動時使用。

    (5)生成設備樹文件

    設備樹是一種設備節點的描述,它告訴內核板卡上有哪些外設以及外設占用的資源,比如寄存器映射空間和中斷號等信息。另外設備樹還可以修改內核啟動參數,如串口選擇、波特率設置和根文件系統的選擇。

    通過VIVADO SDK可以生成設備樹描述文件,這樣便于我們開發,而不需要完全手動創建。VIVIADO安裝時并沒有安裝設備樹生成器,所以需要我們手動安裝。我們首先下載xilinx提供的device tree generator,并安裝到SDK。訪問https://github.com/Xilinx/device-tree-xlnx/releases獲取對應版本的設備樹生成器。下載并放到VIVADO安裝目錄下的SDK/2017.4/data/embeddedsw/devicetree/bsp/目錄下,重命名為device-tree-xlnx_v2017_4(我的VIVADO版本為17.4)。打開SDK,在SDK中操作點擊菜單: Xilinx Tools -> Repositories,然后在LocalRepositories中添加我們剛才下載的SDK/2017.4/data/embeddedsw/devicetree/bsp/device-tree-xlnx_v2017_4路徑并點擊OK。

    添加成功后如上圖。點擊菜單File -> New -> Board Support Package。彈出選項卡New Board Support Packet Project,選擇device_tree,如果你上一步配置不成功,則不會出現device_tree選項,此時需要檢查上一個步驟的問題。添加成功后點擊Finish選項,VIVADO SDK會自動生成設備樹描述文件dts。

    稍后,VIVADO彈出BoardSupport Packet Setting選項卡,在bootargs中填入console=ttyPS0,115200 root=/dev/ram rw initrd=0x800000,8Mearlyprintk rootfstype=ext4 rootwait devtmpfs.mount=0?!癰ootargs”參數用于指定啟動時傳遞給內核的參數?!癱onsole device”參數用于指定所使用的串口輸出設備。

    在SDK目錄下的device_tree目錄下可以看到很多dts文件,system-top.dts就是我們需要編譯的設備樹描述文件。它引用了zynq-7000.dtsi等對于zynq芯片通用的部分文件。將SDK目錄下的整個device_tree目錄上傳到Ubuntu服務器,使用dtc編譯器編譯。編譯命令如下:

    ./scripts/dtc/dtc-I dts -O dtb -o device.dtb ./device_tree/system-top.dts

    6)文件系統

    根文件系統使用uramdisk.image.gz根文件系統,ramdisk.image.gz根文件系統其格式與uboot不同,啟動時uboot會提示ramdisk格式錯誤,若要讓uboot能夠識別ramdisk.image.gz根文件系統,需要利用mkimage給ramdisk.image.gz添加一些頭部信息,生成uramdisk.image.gz??梢灾苯邮褂镁W絡上的uramdisk.image.gz來作為根文件系統,一般來講,根文件系統不需要做出修改。

    另一種廣泛應用的根文件系統是LINARO_FS,Linaro文件系統也可從網絡上獲取,因為我們的設備樹中指定了從uramdisk.image.gz文件系統啟動,因此這里不再介紹從Linaro文件系統啟動。

    現在,我們已經得到BOOT.bin文件,設備樹device_tree.dtb文件和根文件系統uramdisk.image.gz根文件系統。將這三個文件放入Zedboard的SD卡,上電啟動就可以使用Linux操作系統了。

    7)驅動程序和應用程序測試

    Linux驅動程序有靜態編譯進內核和動態模塊加載兩種,這里選擇動態模塊加載的方式,便于進行調試。在前面的硬件設計中,我們將AXI-Lite Slave的四個寄存器掛載到基地址為0x43c00000的位置,而Zedboard板卡上的8位LED燈連接到了寄存器0的低8位,因此我們寫寄存器0的低八位就能很容易的通過LED的狀態來判斷寫入是否成功。

    驅動程序的入口和出口分別是init和exit,需要使用宏進行修飾如下:

    // 注冊初始化Linux驅動的函數
    module_init( leds_drv_init);
    // 注冊卸載Linux驅動的函數
    module_exit( leds_drv_exit);

    linux操作系統中無法直接讀寫物理地址,因此入口函數中,我們需要映射物理地址,使用ioremup函數映射物理地址。注意這里物理地址和硬件設計中保持一致。

    leds= ioremap(0x43c00000, sizeof(LEDS_T))

    Led燈只是一個簡單的字符設備,但是這里我們使用該設備來注冊設備驅動。

    ret= misc_register(&misc);

    雜項設備也是在嵌入式系統中用得比較多的一種設備驅動。在 Linux 內核的include/linux目錄下有Miscdevice.h文件,要把自己定義的misc device從設備定義在這里。其實是因為這些字符設備不符合預先確定的字符設備范疇,所有這些設備采用主編號10,一起歸于misc device,其實misc_register就是用主標號10調用register_chrdev()的。也就是說,misc設備其實也就是特殊的字符設備,可自動生成設備節點。LDD3中led設備也是用misc_register函數注冊為雜設備,這說明led設備是作為雜項設備出現在內核中的,在內核中,misc雜項設備驅動接口是對一些字符設備的簡單封裝,他們共享一個主設備號,有不同的次設備號,共享一個open調用,其他的操作函數在打開后運用linux驅動程序的方法重載進行裝載。

    驅動代碼:

    #define DEVICE_NAME "leds"
    #define LEDS_BASE_ADDR (0x43c00000)
    typedef struct{
    volatile unsigned int ADDR0;
    volatile unsigned int ADDR1;
    volatile unsigned int ADDR2;
    volatile unsigned int ADDR3;
    }LEDS_ADDR;

    LEDS_ADDR* leds;

    static int leds_drv_open(struct inode *Inode, struct file *File)
    {
    leds->ADDR0 = 0xffffffff;
    leds->ADDR1 = 0xffffffff;
    leds->ADDR2 = 0xffffffff;
    leds->ADDR3 = 0xffffffff;
    return 0;
    }

    static ssize_t leds_drv_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)
    {
    return 0;
    }
    static ssize_t leds_drv_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)
    {
    unsigned int ret = 0;
    unsigned int tmp_val;
    u32 pos = *offset;
    ret = copy_from_user(&tmp_val, buf, count);
    leds->ADDR0 = tmp_val;
    //默認寫入寄存器0
    return ret;
    }
    // 描述與設備文件觸發的事件對應的回調函數指針
    static struct file_operations dev_fops =
    {
    .owner = THIS_MODULE,
    .open = leds_drv_open,
    .read = leds_drv_read,
    .write = leds_drv_write,
    };
    // 描述設備文件的信息
    static struct miscdevice misc =
    {
    .minor = MISC_DYNAMIC_MINOR,
    .name = DEVICE_NAME,
    .fops = &dev_fops
    };
    // 初始化Linux驅動
    static int __init leds_drv_init(void)
    {
    int ret;
    leds = ioremap(LEDS_BASE_ADDR, sizeof(LEDS_T));
    // 建立設備文件
    ret = misc_register(&misc);
    // 輸出日志信息
    if(ret)
    {
    printk("leds_drv_init faiitrt!/n");
    }
    else
    {
    printk("leds_drv_init success!/n");
    }
    return ret;
    }

    // 卸載Linux驅動
    static void __exit leds_drv_exit(void)
    {
    iounmap(leds);
    // 刪除設備文件
    misc_deregister(&misc);
    // 輸出日志信息
    printk("leds_drv_exit success!/n");
    }
    // 注冊初始化Linux驅動的函數
    module_init( leds_drv_init);
    // 注冊卸載Linux驅動的函數
    module_exit( leds_drv_exit);

    MODULE_LICENSE("Dual BSD/GPL");

    應用程序調用驅動程序接口,從控制臺讀取一個數字,寫入到寄存器0,寄存器0的低八位就可以在led燈上顯示出來。

    應用程序源碼:

    #include
    #include
    #include
    #include
    #include
    #include

    int main(int argc, char** argv)
    {
    int fd;
    fd = open("/dev/leds", O_RDWR);
    if(fd < 0)
    {
    printf("fd = %d open fialed!/n", fd);
    }

    //unsigned int leds = 0;
    int leds = 0;
    char ch[4];

    printf("input your strings:/n");
    int i = 0;
    while( 1 )
    {
    ch[i] = getchar();
    if (ch[i] == '/n')
    break;
    else
    i++;
    }
    if (i == 3)
    {
    leds = (ch[0]-48)*100 + (ch[1]-48)*10 + ch[2]-48;
    }
    if (i == 2)
    {
    leds = (ch[0]-48)*10 + ch[1]-48;
    }
    if (i == 1)
    {
    leds = ch[0]-48;
    }

    printf("leds = %d,i = %d/n",leds,i);

    write(fd, &leds, 8);

    printf("end/n");
    close(fd);
    return 0;
    }

    將驅動和應用程序上傳到Ubuntu,使用arm-linux-gnueabihf-交叉編譯鏈編譯。驅動程序需要編寫makefile,Makefile中需要指定一個已編譯的內核源碼樹。編譯完成后再Zedboard板測試如下:

    1> 掛載Ubuntu的NFS服務,(需要Ubuntu開啟NFS服務并指定路徑)首先查詢Ubuntu IP地址為192.168.1.103,在Zedboard控制臺輸入:

    mount-t nfs -o nolock 192.168.1.103:/home/zed/work /mnt

    將Ubuntu上的work目錄掛載到Zedboard板

    掛載成功后使用ssh登陸Ubuntu并轉到Ubuntu的驅動目錄,執行make,得到驅動.ko文件。


    ?

    Make命令執行成功,目錄下生成最終使用的ko文件部分中間文件。使用 arm-linux-gnueabihf-gcc -o ledstest.o ledstest.c 生成測試程序。

    回到串口工具連接Zedboard板卡,使用insmod掛載驅動,并執行測試程序。

    掛載成功后,運行APP成功,APP從控制臺讀入一個字符串65,將其ASCII碼轉換為數值寫入寄存器0,Zedboard板卡上led如圖:

    2、Petalinux快速開發

    Petalinux是xilinx為zynq7000系列移植linux程序設計的一套開發程序。它可以加快嵌入式開發人員的工作速度。

    安裝petalinux首先需要安裝需要的庫,本次實驗在Ubuntu1604LTS上安裝petalinux17.4.注意,petalinux版本和VIVADO版本需要對應。

    Petalinux無法以root用戶安裝,因此如果想安裝petalinux到非用戶目錄下有兩種辦法:將opt目錄下的文件夾所有屬性改為當前用戶或者安裝到當前用戶目錄下再以root權限復制整個文件夾到opt目錄。這里選用第一種方法,首先創建安裝目錄:

    運行petalinux的安裝文件,并指定目錄為/opt/pkg/petalinux,檢查依賴環境無誤后就會進行安裝,安裝前需要根據提示同意用戶協議。

    安裝完成后就可以使用petalinux定制linux操作系統。Petalinux可以識別VIVADO工程,并根據VIVADO工程來智能設置外設信息。VIVADO工程目錄下的.sdk目錄就包含了petalinux所需的硬件信息。Ubuntu新建文件夾作為petalinux的工程目錄,并將.sdk拷貝到petalinux工程目錄的上一級目錄下,即和petalinux工程目錄為同級目錄。定位petalinux

    source/opt/pkg/petalinux/settings.sh

    檢查安裝環境和庫依賴,無問題后可以建立工程。使用命令:

    petalinux-create--type project --template zynq –name leds

    建立名為leds的工程,cd到leds目錄下,讀取硬件信息:

    petalinux-config--get-hw-description ./led.sdk

    在彈出的窗口中可以配置petalinux工程,默認源碼從GitHub下載,也可以從本地讀取,這里保持默認。在 Advanced bootable images storage Settings選項中配置啟動方式,默認從SD卡啟動,這里依舊保持默認。

    將配置保存,退出,petalinux會下載源碼并配置工程。

    成功后使用如下命令配置linux內核:

    petalinux-config-c kernel

    配置成功后保存并退出

    編譯完成后使用petalinux-config-c rootfs配置根文件系統,同樣保存后退出。使用命令petalinux-build編譯整個系統工程。經過一段漫長的等待,編譯完成。

    運行下面命令生成BOOT文件:


    ?

    將工程目錄 images -> linux目錄中的BOOT.bin和image.ub復制到SD卡,啟動Zedboard,完成Linux操作系統的移植。

    注意使用petalinux移植linux使用的是arm-linux-gnueabihf-交叉編譯鏈,因此后續驅動開發時也需要指定交叉編譯鏈為arm-linux-gnueabihf-,后續驅動的開發與傳統方式移植linux部分一致,因此不再闡述。

    編輯:hfy

    收藏 人收藏
    分享:

    評論

    相關推薦

    配置Ubuntu開發主機及Gstreamer編程示例

    嵌入式Linux下Gstreamer編程示例
    發表于 12-15 07:34 ? 0次 閱讀
    配置Ubuntu開發主機及Gstreamer編程示例

    嵌入式Linux下矩陣鍵盤應用有哪些

    本文所演示的平臺來自于Toradex Colibri iMX6嵌入式平臺,其支持的最大矩陣鍵盤為5*5,而Toradex另一個產品系列Apalis系列...
    發表于 12-15 07:03 ? 0次 閱讀
    嵌入式Linux下矩陣鍵盤應用有哪些

    Linux5.11為Modtronix LCD2S字符顯示器準備驅動程序

    lcd2s是Linux 5.11版本中新增的驅動程序,它支持通過SPI/I2C連接的20x4 LCD....
    的頭像 璟琰乀 發表于 12-14 16:41 ? 76次 閱讀
    Linux5.11為Modtronix LCD2S字符顯示器準備驅動程序

    Linux 5.10 LTS正式發布,為近期最重要的內核版本之一

    正如人們所期待的那樣,Linus Torvalds今天正式發布了Linux 5.10。除了是2020....
    的頭像 璟琰乀 發表于 12-14 15:43 ? 123次 閱讀
    Linux 5.10 LTS正式發布,為近期最重要的內核版本之一

    深入理解Linux網絡技術的內幕詳細說明

    本書這一部分的信息代表了你輕松理解本書其余部分所需的基本知識。如果您已經熟悉Linux內核,或者您是....
    發表于 12-14 08:00 ? 16次 閱讀
    深入理解Linux網絡技術的內幕詳細說明

    Linux進程間通信之管道(pipe)、命名管道(FIFO)與信號(Signal)

    隨后,每個進程關閉自己不需要的一個連接 (兩個黑色的箭頭被關閉; Process 1關閉從PIPE來....
    的頭像 Linux愛好者 發表于 12-11 16:41 ? 217次 閱讀
    Linux進程間通信之管道(pipe)、命名管道(FIFO)與信號(Signal)

    SO_REUSEADDR 與 SO_REUSEPORT是什么?

    3.9版本支持SO_REUSEPORT,作為Server的TCP Socket一旦綁定到了具體的端口....
    的頭像 Linux愛好者 發表于 12-11 16:38 ? 163次 閱讀
    SO_REUSEADDR 與 SO_REUSEPORT是什么?

    Linux Shell 中 ()、(())、[]、[[]]、{} 的作用

    符號前綴。括號內支持多個表達式用逗號分開。只要括號中的表達式符合 C 語言運算規則 , 比如可以直接....
    的頭像 Linux愛好者 發表于 12-11 16:34 ? 155次 閱讀
    Linux Shell 中 ()、(())、[]、[[]]、{} 的作用

    我最終決定永遠使用Ubuntu

    如果沒有裝操作系統,計算機就會變成毫無價值的設備,因為操作系統是連接用戶和硬件的中間接口。人們根據自....
    的頭像 Linux愛好者 發表于 12-11 16:32 ? 202次 閱讀
    我最終決定永遠使用Ubuntu

    Kali Linux 2020.4發布:ZSH設為默認Shell;進一步支持ARM

    新工具和更新。增加了一些新工具,并將 Linux 內核升級到其最新的 5.9 穩定版本,GNOME ....
    的頭像 Linux愛好者 發表于 12-11 16:23 ? 355次 閱讀
    Kali Linux 2020.4發布:ZSH設為默認Shell;進一步支持ARM

    Linux中誤刪文件的恢復操作

    因此,使用rm命令刪除文件的時候,一定要小心;重要的數據一定要有備份;并且恢復刪除的數據前,刪除文件....
    的頭像 Linux愛好者 發表于 12-11 16:19 ? 111次 閱讀
    Linux中誤刪文件的恢復操作

    Linux操作系統的采用率迎來了巨大的增長

    如果能夠運行 Linux,我絕對會喜歡這樣的設備。我對 11 英寸的 MacBook Air(估計為....
    的頭像 Linux愛好者 發表于 12-11 16:14 ? 216次 閱讀
    Linux操作系統的采用率迎來了巨大的增長

    Linux中的32位與64位

    當然intel也很快開發出支持該指令集的CPU,不過intel將其稱為x64架構,而不是用amd64....
    的頭像 Linux愛好者 發表于 12-11 16:00 ? 139次 閱讀
    Linux中的32位與64位

    深度deepin20.1(1005)系統開啟內測

    deepin 社區發布了深度操作系統 20.1 Beta(1005) 內測活公告,其表示:大家好,為....
    的頭像 璟琰乀 發表于 12-11 14:25 ? 198次 閱讀
    深度deepin20.1(1005)系統開啟內測

    探討Linux操作系統虛擬內存和物理內存的關系

    除了元器件的選擇和電路設計之外,良好的印制電路板(PCB)設計在電磁兼容性中也是一個非常重要的因素。....
    的頭像 電子設計 發表于 12-10 16:12 ? 745次 閱讀
    探討Linux操作系統虛擬內存和物理內存的關系

    Xilinx7系列FPGA選擇資源用戶指南

    Xilinx7系列FPGA包括四個FPGA系列,它們都是為最低功耗而設計的,以使一個通用設計能夠跨系....
    發表于 12-10 15:27 ? 61次 閱讀
    Xilinx7系列FPGA選擇資源用戶指南

    Linux設備的主要類型

      字符設備(character device):指應用程序采用字符流方式訪問的設備。這些設備節點通常為傳真、虛擬終端和串口調制解調器、...
    發表于 12-10 15:13 ? 0次 閱讀
    Linux設備的主要類型

    超快嵌入式設計方法指南

    隨著全可編程SoC產品的推出,Xilinx為設計人員提供了一種快速、有效、可靠地構建更智能系統的強大....
    發表于 12-10 15:00 ? 66次 閱讀
    超快嵌入式設計方法指南

    Clocking Wizard v6.0 LogiCORE IP產品指南

    時鐘向導邏輯存儲器? IP簡化了為時鐘電路定制的HDL源代碼包裝器的創建,以滿足您的時鐘要求。向導將....
    發表于 12-10 14:20 ? 30次 閱讀
    Clocking Wizard v6.0  LogiCORE IP產品指南

    Xilinx 7系列FPGA時鐘資源

    Xilinx7系列FPGA包括四個FPGA系列,它們都是為最低功耗而設計的,以使一個通用設計能夠跨系....
    發表于 12-10 14:20 ? 36次 閱讀
    Xilinx 7系列FPGA時鐘資源

    聯合創始人創建Rocky Linux新項目

    CentOS 是 Red Hat Enterprise Linux(RHEL)的一個分支,由于可靠的....
    的頭像 璟琰乀 發表于 12-10 14:07 ? 707次 閱讀
    聯合創始人創建Rocky Linux新項目

    AD9361+ ZYNQ軟件無線電平臺搭建實例

    TLZ7xH-EVM評估板接口資源豐富,引出雙路千兆網口、四路SFP+光口、雙路CameraLink....
    發表于 12-10 11:47 ? 163次 閱讀
    AD9361+ ZYNQ軟件無線電平臺搭建實例

    求linux下hex轉bin的方法?

    linux下hex轉bin的方法
    發表于 12-10 07:29 ? 0次 閱讀
    求linux下hex轉bin的方法?

    Xilinx 7系列FPGA嵌入式內存優勢

    Xilinx7系列FPGA的體系結構具有靈活的內部內存資源,可以配置為各種不同的大小。本白皮書詳細介....
    發表于 12-09 16:15 ? 40次 閱讀
    Xilinx 7系列FPGA嵌入式內存優勢

    Linux前景好不好?

    Linux 是一個操作系統,在計算機領域是必不可少的,也有相應的應用,那么對于新手來說, Linux  前景好不好? Lin...
    發表于 12-09 16:01 ? 101次 閱讀
    Linux前景好不好?

    Linux Kernel5.10十個值得關注的功能

    Linux Kernel 5.10 有望在本周末發布,外媒 Phoronix 盤點了 10 個值得關....
    的頭像 璟琰乀 發表于 12-09 15:40 ? 308次 閱讀
    Linux Kernel5.10十個值得關注的功能

    Xilinx LogiCORE IP塊內存生成器的產品指南

    Xilinx LogiCORE IP塊內存生成器(BMG)內核是一種高級內存構造函數,它使用Xili....
    發表于 12-09 15:31 ? 40次 閱讀
    Xilinx LogiCORE IP塊內存生成器的產品指南

    Vivado Design Suite 7系列FPGA和Zynq-7000 SoC庫指南

    推斷:該組件可以由大多數支持的合成工具進行推斷。如果您希望代碼在多個體系結構中具有完全的靈活性和可移....
    發表于 12-09 15:31 ? 46次 閱讀
    Vivado Design Suite 7系列FPGA和Zynq-7000 SoC庫指南

    Xilinx 7系列FPGA選擇資源的技術參考指南

    Xilinx7系列FPGA包括四個FPGA系列,它們都是為最低功耗而設計的,以使一個通用設計能夠跨系....
    發表于 12-09 14:49 ? 62次 閱讀
    Xilinx 7系列FPGA選擇資源的技術參考指南

    Xilinx 7系列FPGA可配置邏輯塊的用戶指南

    Xilinx7系列FPGA包括四個FPGA系列,它們都是為最低功耗而設計的,以使一個通用設計能夠跨系....
    發表于 12-09 14:49 ? 53次 閱讀
    Xilinx 7系列FPGA可配置邏輯塊的用戶指南

    Zynq-7000Q SoC的數據手冊詳細概述

    國防級Zynq?-7000Q系列基于Xilinx SoC架構。這些產品集成了功能豐富的雙核手臂皮質?....
    發表于 12-09 13:47 ? 45次 閱讀
    Zynq-7000Q SoC的數據手冊詳細概述

    Xilinx FPGA設計進階(提高篇)

    發表于 12-08 17:00 ? 312次 閱讀
    Xilinx FPGA設計進階(提高篇)

    Linux Debian10.7正式發布

    外媒 Neowin 報道,Debian 項目宣布推出 Debian 10.7 正式版。該正式版包含了....
    的頭像 璟琰乀 發表于 12-08 09:38 ? 238次 閱讀
    Linux Debian10.7正式發布

    Debian 項目宣布推出 Debian 10.7 正式版

    外媒 Neowin 報道,Debian 項目宣布推出 Debian 10.7 正式版。該正式版包含了....
    的頭像 工程師鄧生 發表于 12-08 09:37 ? 329次 閱讀
    Debian 項目宣布推出 Debian 10.7 正式版

    Linux將支持基于光線的LiFi無線傳輸技術

    PureLiFi 是推行高速、基于光線的無線技術 LiFi 的領導者之一。在過去幾個月以來,該機構不....
    的頭像 如意 發表于 12-07 14:26 ? 288次 閱讀
    Linux將支持基于光線的LiFi無線傳輸技術

    Linux電源管理系統結構的詳細資料說明

    任何系統的運轉都需要能量。計算機系統依靠電能運行。而能量的獲取是有成本的,因此如果能在保證系統運轉的....
    發表于 12-06 17:08 ? 163次 閱讀
    Linux電源管理系統結構的詳細資料說明

    新建一個空文件會不會占用磁盤空間

    今天我們來思考一個簡單的問題。在Linux下你用touch命令新建一個空文件: touch empt....
    的頭像 Wildesbeast 發表于 12-06 09:51 ? 210次 閱讀
    新建一個空文件會不會占用磁盤空間

    Linux內核部分顯示驅動部分的詳細介紹

    DirectFB是圖形API存在于Frame Buffer層之上與高級圖形管理層如GTK+等之下的。....
    發表于 12-04 16:46 ? 52次 閱讀
    Linux內核部分顯示驅動部分的詳細介紹

    【HarmonyOS HiSpark Wi-Fi IoT 套件試用連載】visual studio code編寫;Linux編譯與Hiburn燒錄(三)

    燒錄的話,我用visual studio code一直報錯,后來就了解到一個新的方法,用Hitool燒錄。但是現在百度上的Hitool里面的芯片匹配...
    發表于 12-04 11:25 ? 67次 閱讀
    【HarmonyOS HiSpark Wi-Fi IoT 套件試用連載】visual studio code編寫;Linux編譯與Hiburn燒錄(三)

    二級市場并不認為Xilinx能為AMD帶來持續高增長

    二級市場并不認為Xilinx能為AMD帶來持續高增長。 近兩個月前,《財經涂鴉》介紹了AMD(AMD....
    的頭像 璟琰乀 發表于 12-04 10:42 ? 371次 閱讀
    二級市場并不認為Xilinx能為AMD帶來持續高增長

    在RK3399開發板香橙派Orange Pi 4B上使用docker

    (1)直接運行執行docker search arm64v8 搜到arm64v8/nginx    例如 執行 docker search ubuntu 找到eclipse/ubu...
    發表于 12-03 18:06 ? 268次 閱讀
    在RK3399開發板香橙派Orange Pi 4B上使用docker

    Linux內核設計與實現的課程實驗指導書

    對于大多數人來說,幾乎還沒接觸過 Linux及 Linux下的用戶層編程,就開始學習《 Linux內....
    發表于 12-03 16:48 ? 31次 閱讀
    Linux內核設計與實現的課程實驗指導書

    Vitis定量金融庫提供優化功能,加速計算解決方案

    對于金融分析來說,洞察時間是預測風險、為客戶做出明智商業決策和提供差異化金融服務的關鍵,這些金融服務....
    的頭像 FPGA開發圈 發表于 12-02 16:43 ? 343次 閱讀
    Vitis定量金融庫提供優化功能,加速計算解決方案

    賽靈思將舉辦“Xilinx Adapt China:5G”虛擬研討會

    聽最潮的 5G 大局 解最硬的技術疑惑 拿最不經意的紅包 搶最幸運的 lucky draw ........
    的頭像 FPGA開發圈 發表于 12-02 16:36 ? 380次 閱讀
    賽靈思將舉辦“Xilinx Adapt China:5G”虛擬研討會

    國產系統哪個系統最好_國產系統安裝方法

    Deepin是一個基于Linux的操作系統,Deepin原名Linux Deepin,在2014年4....
    發表于 12-02 15:05 ? 1603次 閱讀
    國產系統哪個系統最好_國產系統安裝方法

    基于MySQL數據庫應用開發實現嵌入式數控系統的設計

    由于本課題開發的人機界面是利用GTK+圖形庫,因此系統中采用的基于MySQL數據庫應用開發,需要解決....
    的頭像 電子設計 發表于 12-02 10:07 ? 1516次 閱讀
    基于MySQL數據庫應用開發實現嵌入式數控系統的設計

    單片機通過定時器來實現多任務,充分利用定時器資源來實現異步處理

    在單片機系統中,有許多情況下需要等待某個事件的發生,來繼續下一步操作,如果有一個任務還好說,單片機可以無限等待事件的發...
    發表于 12-02 09:43 ? 1092次 閱讀
    單片機通過定時器來實現多任務,充分利用定時器資源來實現異步處理

    虎躍讓Linux代碼里面寫上了“酷派”的名字?

    12月1日,酷派宣布,為表彰員工虎躍同學向Linux社區提交的數條高質量補丁,公司決定授予其十萬股期....
    的頭像 lhl545545 發表于 12-02 09:42 ? 1709次 閱讀
    虎躍讓Linux代碼里面寫上了“酷派”的名字?

    深度理解Linux下網絡包的接收過程

    因為要對百萬、千萬、甚至是過億的用戶提供各種網絡服務,所以在一線互聯網企業里面試和晉升后端開發同學的....
    的頭像 璟琰乀 發表于 12-01 17:51 ? 278次 閱讀
    深度理解Linux下網絡包的接收過程

    Linux內核高端內存分析

     x86 CPU 采用了段頁式地址映射模型。進程代碼中的地址為邏輯地址,經過段頁式地址映射后,才真正....
    發表于 12-01 17:47 ? 61次 閱讀
    Linux內核高端內存分析

    嵌入式Linux驅動開發4412-實驗01內核開發基礎

    實驗 01 內核開發基礎-基于迅為4412開發板 1.1 本章導讀 本實驗將帶您學習一遍 Linux 的框架和源碼目錄結構。 從任何地方拿到...
    發表于 12-01 11:21 ? 303次 閱讀
    嵌入式Linux驅動開發4412-實驗01內核開發基礎

    開發者將把Linux移植到蘋果M1 Mac上

    12 月 1 日消息 開發者赫克托 - 馬丁 (Hector Martin)自稱是一個很喜歡把 Li....
    的頭像 電子魔法師 發表于 12-01 09:55 ? 344次 閱讀
    開發者將把Linux移植到蘋果M1 Mac上

    開發者計劃Linux移植到蘋果M1 Mac,要求每月獲得4000美元資助

    知名開發者要把 Linux 移植到蘋果 M1 Mac 上,要求網友每月資助其 4000 美元 開發者....
    的頭像 璟琰乀 發表于 12-01 09:26 ? 264次 閱讀
    開發者計劃Linux移植到蘋果M1 Mac,要求每月獲得4000美元資助

    當分布式數據庫遇上開放服務器LinuxONE,輕松應對各種問題挑戰

    解決分布式架構落地的難題,有一種很好的選擇,就是將分布式系統與 IBM LinuxONE 相結合,后....
    的頭像 牽手一起夢 發表于 11-30 15:30 ? 313次 閱讀
    當分布式數據庫遇上開放服務器LinuxONE,輕松應對各種問題挑戰

    Linux之父表示移植M1 Mac的困難主要在于蘋果不開放GPU

    日前在出席Real World Technologies論壇時,Linux之父Linus Torva....
    的頭像 工程師鄧生 發表于 11-30 10:05 ? 354次 閱讀
    Linux之父表示移植M1 Mac的困難主要在于蘋果不開放GPU

    基于Linux的嵌入式GUI實現微波信號發生器人機界面設計

    嵌入式系統的出現至今已有30多年的歷史,嵌入式技術也經歷了三個發展階段。早期的嵌入式系統因資源極其有....
    的頭像 電子設計 發表于 11-30 10:01 ? 941次 閱讀
    基于Linux的嵌入式GUI實現微波信號發生器人機界面設計

    淺談M1 Mac移植Linux的問題

    日前在出席Real World Technologies論壇時,Linux之父Linus Torva....
    的頭像 lhl545545 發表于 11-30 09:12 ? 291次 閱讀
    淺談M1 Mac移植Linux的問題

    淺談內核的Makefile、Kconfig和.config文件

    表示該項是否編進內核、編成模塊。顯示為< > , 假如選擇編譯成內核模塊,則會在.config中生成....
    的頭像 strongerHuang 發表于 11-29 10:40 ? 232次 閱讀
    淺談內核的Makefile、Kconfig和.config文件

    Linux的進程

    內核通過輕量級進程 (lightweight process) 來支持多線程。1個輕量級進程就對應1....
    的頭像 strongerHuang 發表于 11-29 09:51 ? 225次 閱讀
    Linux的進程

    微軟重磅更新Windows 10系統并啟用對Linux內核的支持

    由于西方新年緣故,今年微軟已經不會推出Windows 10的大更新了,不過該系統會在明年迎來一項重磅....
    的頭像 lhl545545 發表于 11-28 10:13 ? 634次 閱讀
    微軟重磅更新Windows 10系統并啟用對Linux內核的支持

    AM4379 AM437x ARM Cortex-A9 微處理器 (MPU)

    TI AM437x高性能處理器基于ARM Cortex-A9內核。 這些處理器通過3D圖形加速得到增強,可實現豐富的圖形用戶界面,還配備了協處理器,用于進行確定性實時處理(包括EtherCAT,PROFIBUS,EnDat等工業通信協議)。該器件支持高級操作系統(HLOS)?;贚inux的® 可從TI免費獲取。其它HLOS可從TI的設計網絡和生態系統合作伙伴處獲取。 這些器件支持對采用較低性能ARM內核的系統升級,并提供更新外設,包括QSPI-NOR和LPDDR2等存儲器選項。 這些處理器包含功能方框圖中顯示的子系統,并且后跟相應的“說明”中添加了更多信息說明。 處理器子系統基于ARM Cortex-A9內核,PowerVR SGX™圖形加速器子系統提供3D圖形加速功能以支持顯示和高級用戶界面。 可編程實時單元子系統和工業通信子系統(PRU-ICSS與ARM內核分離,允許單獨操作和計時,以實現更高的效率和靈活性.PRU-ICSS支持更多外設接口和EtherCAT,PROFINET,EtherNet /IP,PROFIBUS,以太網Powerlink,Sercos,EnDat等...
    發表于 09-25 11:51 ? 186次 閱讀
    AM4379 AM437x ARM Cortex-A9 微處理器 (MPU)
    日韩欧美亚洲一区SWAG
  • <dd id="kgqm6"></dd>
  • <menu id="kgqm6"><tr id="kgqm6"></tr></menu>