色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

電子設計 ? 來源:網絡交換FPGA ? 作者:殷建飛 ? 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安裝。

為了提高工作效率,嵌入式開發通常可以在Windows下使用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。可用使用make 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目錄下。拷貝uImage到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。“bootargs”參數用于指定啟動時傳遞給內核的參數。“console 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。可以直接使用網絡上的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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11293

    瀏覽量

    209338
  • Xilinx
    +關注

    關注

    71

    文章

    2167

    瀏覽量

    121307
  • 驅動開發
    +關注

    關注

    0

    文章

    130

    瀏覽量

    12072
收藏 人收藏

    評論

    相關推薦

    多平臺FPGA工程快速移植與構建

    作為一名FPGA工程師,經常需要在多個FPGA設備之間移植項目,核心的問題是IP的管理和移植,今天通過安裝和使用 FuseSoC 在多個 AMD FPGA 之間移植一個簡單的項目。從 AMD Spartan 7 更改為 AMD
    的頭像 發表于 11-20 16:12 ?815次閱讀
    多平臺FPGA工程<b class='flag-5'>快速</b><b class='flag-5'>移植</b>與構建

    【RA8D1試用活動】RA8D1B-CPKCOR開發移植linux

    【RA8D1試用活動】RA8D1B-CPKCOR開發移植linux
    的頭像 發表于 11-16 01:02 ?220次閱讀
    【RA8D1試用活動】RA8D1B-CPKCOR<b class='flag-5'>開發</b>板<b class='flag-5'>移植</b><b class='flag-5'>linux</b>

    【北京迅為】i.mx8mm嵌入式linux開發指南第四篇 嵌入式Linux系統移植篇第六十九章uboot移植

    【北京迅為】i.mx8mm嵌入式linux開發指南第四篇 嵌入式Linux系統移植篇第六十九章uboot移植
    的頭像 發表于 10-22 14:46 ?594次閱讀
    【北京迅為】i.mx8mm嵌入式<b class='flag-5'>linux</b><b class='flag-5'>開發</b>指南第四篇 嵌入式<b class='flag-5'>Linux</b>系統<b class='flag-5'>移植</b>篇第六十九章uboot<b class='flag-5'>移植</b>

    Linux上的編解碼器移植TMS320DM365預覽版

    電子發燒友網站提供《Linux上的編解碼器移植TMS320DM365預覽版.pdf》資料免費下載
    發表于 10-14 10:53 ?0次下載
    <b class='flag-5'>Linux</b>上的編解碼器<b class='flag-5'>移植</b>TMS320DM365預覽版

    基于機智云移植STM32L496G代碼移植

    前言最近我拿到了STM32L496AGMCU,發現其擴展版可以連接ESP-01S。我想嘗試將開發板連接到我們的機智云上,并根據機智云提供的文檔進行程序移植。STM32CubeMX移植機智云自動生成
    的頭像 發表于 09-20 08:05 ?396次閱讀
    基于機智云<b class='flag-5'>移植</b>STM32L496G代碼<b class='flag-5'>移植</b>

    【GD32 MCU 移植教程】9、從 STM32F10x 系列移植到 GD32F30x 系列

    對比、外設及性能對比以及從 STM32F10x 移植到 GD32F30x 的移植步驟,旨在讓開發者能夠快速從STM32F10x 移植到 GD
    的頭像 發表于 09-07 09:57 ?681次閱讀
    【GD32 MCU <b class='flag-5'>移植</b>教程】9、從 STM32F10x 系列<b class='flag-5'>移植</b>到 GD32F30x 系列

    手把手帶你移植HAL庫函數

    在嵌入式系統開發中,硬件抽象層(HAL,HardwareAbstractionLayer)庫的使用可以極大地簡化開發過程,提高代碼的可移植性和維護性。本文將詳細介紹如何快速搞懂HAL庫
    的頭像 發表于 05-18 08:04 ?1865次閱讀
    手把手帶你<b class='flag-5'>移植</b>HAL庫函數

    Linux平臺移植音頻芯片實戰記錄

    本文詳細記錄在NXP I.MX6ULL+Linux平臺下進行WM8960音頻芯片移植的過程,其他平臺操作方法類似,希望為大家提供幫助。
    的頭像 發表于 05-17 14:28 ?1071次閱讀
    <b class='flag-5'>Linux</b>平臺<b class='flag-5'>移植</b>音頻芯片實戰記錄

    鴻蒙開發實戰:基于【Markwon】移植開發

    本項目是基于開源項目**Markwon**進行適用harmonyos的移植開發的。
    的頭像 發表于 03-25 16:27 ?818次閱讀
    鴻蒙<b class='flag-5'>開發</b>實戰:基于【Markwon】<b class='flag-5'>移植</b>和<b class='flag-5'>開發</b>

    鴻蒙ArkUI【開發移植Carbon】

    本項目是基于開源項目[Carbon]?進行harmonyos化的移植開發的。
    的頭像 發表于 03-25 15:41 ?512次閱讀
    鴻蒙ArkUI【<b class='flag-5'>開發</b><b class='flag-5'>移植</b>Carbon】

    3562-物聯網模塊開發案

    3562-物聯網模塊開發案例 本文檔主要介紹基于 TL3562-EVM 評估板的物聯網模塊開發案例,適用開發環境: Windows 開發環境:Windows 7 64bit、Wind
    的頭像 發表于 03-05 10:59 ?1187次閱讀
    3562-物聯網模塊<b class='flag-5'>開發案</b>例

    【鴻蒙】標準系統移植指南

    標準系統移植指南 本文描述了移植一塊開發板的通用步驟,和具體芯片相關的詳細移植過程無法在此一一列舉。后續社區還會陸續發布開發
    的頭像 發表于 02-27 14:36 ?886次閱讀
    【鴻蒙】標準系統<b class='flag-5'>移植</b>指南

    ELF 1技術貼|如何將Python3.6.9移植開發板上

    在ELF1開發板的Linux4.1.15eMMC鏡像中,默認預裝了Python2.7。為了適應更多應用場景,有些小伙伴可能需要移植其他版本的Python,下面將以Python3.6.9為例詳細介紹
    的頭像 發表于 02-22 14:06 ?429次閱讀
    ELF 1技術貼|如何將Python3.6.9<b class='flag-5'>移植</b>到<b class='flag-5'>開發</b>板上

    TLT507-Linux-RT應用開發案

    TLT507-Linux-RT應用開發案
    的頭像 發表于 01-26 09:46 ?696次閱讀
    TLT507-<b class='flag-5'>Linux</b>-RT應用<b class='flag-5'>開發案</b>例

    rk3399移植Linux內核

    RK3399是一款由中國廠商瑞芯微推出的高性能處理器芯片,被廣泛用于嵌入式系統開發。在進行應用程序開發之前,我們需要將Linux內核移植到RK3399上,以支持硬件的驅動和功能。本文將
    的頭像 發表于 01-08 09:56 ?1126次閱讀
    主站蜘蛛池模板: 快播苍井空| 亚洲 日韩 自拍 视频一区| 亚洲 欧美 国产在线视频| 正在播放国产精品| 俄罗斯破处| 中文字幕s级优女区| 免费国产在线观看| 粉嫩无套白浆第一次jk| 午夜一级视频| 伦理片在线线看手机版| 大稥焦伊人一本dao| 亚洲黄色官网| 日本六九视频| 李亚男三级| 国产免费久久精品国产传媒| 猪蜜蜜网站在线观看电视剧| 色情www日本欧美| 久久综合九色综合国产| 国产毛片视频网站| YELLOW日本免费观看播放| 野花影院手机在线观看| 无码国产成人午夜在线观看不卡| 老师机影院| 寂寞骚妇女被后入式抽插| 国产精品久久久久久精品...| 99在线观看免费| 91久久偷偷做嫩草影院免| 一道本无吗d d在线播放| 午夜福利小视频400| 手机精品在线| 色戒西瓜视频| 日韩一区二区三区免费体验| 欧美一第一页草草影院| 欧美A级肉欲大片XXX| 内射少妇三洞齐开| 久热这里只有精品99国产6| 极品少妇小泬50PTHEPON| 国产精品成人免费| 国产白丝精品爽爽久久蜜臀| 超碰97人人做人人爱网站| 69日本人xxxx16—18|