準備工作:
1.windows:安裝vivado 2017.4,xilinx sdk 2017.4
2.ubuntu16.04:安裝petalinux 2017
3.黑金ax7020,sd卡
一、準備linux內核的操作系統
1.1 Petalinux配置
Petalinux使用教程-CSDN博客非常詳細,可以參考
?1.通過 Vivado 創建硬件平臺,得到 hdf 硬件描述文件,將*.sdk 文件夾復制到 ubuntu 系統下,給 petalinux 使用。;
?
?
2. 運行 source <petalinux 安裝路徑>/settings.sh,設置 Petalinux 運行環境
source /opt/pkg/petalinux/2018.3/settings.sh
3. 通過 petalinux-create -t project 創建 petalinux 工程;
petalinux-create -t project --template zynq -n <proj_name>
<proj_name>改成工程名
4. 將 hdf 文件導入到 petalinux 工程當中并配置 petalinux 工程;
petalinux-config --get-hw-description <hdf文件路徑>
5. 配置 Linux 內核;
petalinux-config -c kernel
6. 配置 Linux 根文件系統;
petalinux-config -c rootfs
7. 配置設備樹文件;
?
我的是黑金AX7020開發板,修改四個網口:
/include/ "system-conf.dtsi"/ {model = "Zynq ALINX Development Board";compatible = "alinx,axi eth", "xlnx,zynq-7000";usb_phy0: usb_phy@0 {compatible = "ulpi-phy";#phy-cells = <0>;reg = <0xe0002000 0x1000>;view-port = <0x0170>;drv-vbus;};};&usb0 { usb-phy = <&usb_phy0>;
};&sdhci0 {u-boot,dm-pre-reloc;
};&uart1 {u-boot,dm-pre-reloc;
};&flash0 {compatible = "micron,m25p80", "w25q256", "spi-flash";
};&gem0 {phy-handle = <ðernet_phy>;ethernet_phy: ethernet-phy@1 {reg = <1>;device_type = "ethernet-phy";};
};&axi_ethernet_0 {local-mac-address = [00 0a 35 00 03 22]; phy-handle = <&phy1>; xlnx,has-mdio = <0x1>; phy-mode = "rgmii"; mdio { phy1: phy@1 { device_type = "ethernet-phy"; reg = <1>; };};
};&axi_ethernet_1 {local-mac-address = [00 0a 35 00 03 23]; phy-handle = <&phy2>; xlnx,has-mdio = <0x1>; phy-mode = "rgmii"; mdio { phy2: phy@1 { device_type = "ethernet-phy"; reg = <1>; };};
};&axi_ethernet_2 {local-mac-address = [00 0a 35 00 03 24]; phy-handle = <&phy3>; xlnx,has-mdio = <0x1>; phy-mode = "rgmii"; mdio { phy3: phy@1 { device_type = "ethernet-phy"; reg = <1>; };};
};&axi_ethernet_3 {local-mac-address = [00 0a 35 00 03 25]; phy-handle = <&phy4>; xlnx,has-mdio = <0x1>; phy-mode = "rgmii"; mdio { phy4: phy@1 { device_type = "ethernet-phy"; reg = <1>; };};
};
8. 編譯整個工程;
petalinux-build
該命令將生成設備樹 DTB 文件、fsbl 文件、U-Boot 文件,Linux 內核和根文件系統映像。
編譯完成后,生成的映像將位于工程的 images 目錄下。
9. 使用 petalinux-package --boot 制作 BOOT.BIN 啟動文件;
petalinux-package --boot --fsbl --fpga --u-boot --force
若出現fsbl后找不到文件,添加/images/linux下的fsbl文件
二、對linux4.9.0打實時內核補丁Preempt-RT
2.1 下載實時補丁
下載linux內核對應版本的實時補丁,例如我的linux內核為4.9.0,下載補丁為patch-4.9-rt1.patch.xz
https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patch-4.9-rt1.patch.xz
2.2?對內核源碼打補丁
將petalinux工程類似目錄下的內核文件拷貝出來到桌面
?內核源碼對應kernel-source
??
將補丁文件patch-4.9-rt1.patch.xz拷貝到桌面上的kernel-source文件夾內部,執行命令
xzcat ./patch-4.9-rt1.patch.xz | patch -p1
執行完成,無報錯即可
2.3?重新執行內核配置
回到petalinux工程目錄執行
petalinux-config -c kernel
若有問題,回到第一節激活petalinux環境
按照下面的目錄找到General setup中選擇Preemption model,并更改選項為如下,保存。
?
?
?
三、啟動有實時補丁的linux內核
?
發現有PREEMPT 字樣
本文有參考
在Petalinux中加入Real-time 補丁
ALinx 7010使用PetaLinux(2021.2)+Preempt-RT構建實時平臺_petalinux2021.2教程-CSDN博客