{"id":372670,"date":"2024-05-21T05:17:52","date_gmt":"2024-05-21T05:17:52","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=372670"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-21T05:17:52","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=372670","title":{"rendered":"<span>Linux From Scratch \u043d\u0430 Zynq UltraScale+ MPSoC<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 Linux \u043d\u0430 Zynq UltraScale+ MPSoC\u0441. \u041a\u0430\u0436\u0434\u044b\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0431\u0440\u0430\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0443\u0442\u0438\u043b\u0438\u0442. \u0421\u0442\u0430\u0442\u044c\u044f \u0440\u0430\u0437\u0431\u0438\u0442\u0430 \u043d\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0448\u0430\u0433 \u0437\u0430 \u0448\u0430\u0433\u043e\u043c \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044f\u0442 \u0432\u0430\u0441 \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435.<\/p>\n<p>\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441\u0440\u0430\u0437\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e buildroot \u0438 Yocto\/petalinux. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a60\/b73\/72e\/a60b7372e8f1c2206f6e69ebbe831715.png\" width=\"1920\" height=\"1080\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a60\/b73\/72e\/a60b7372e8f1c2206f6e69ebbe831715.png\"\/><\/figure>\n<h2>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0434\u043b\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f<\/h2>\n<ol>\n<li>\n<p>\u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u043e \u0441\u0431\u043e\u0440\u043a\u0435 <a href=\"https:\/\/xilinx-wiki.atlassian.net\/wiki\/spaces\/A\/pages\/460653138\/Xilinx+Open+Source+Linux\" rel=\"noopener noreferrer nofollow\">Linux from scratch<\/a> \u043d\u0430 Xilinx Wiki<\/p>\n<\/li>\n<li>\n<p>\u0412\u0438\u0434\u0435\u043e\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u043e \u0441\u0431\u043e\u0440\u043a\u0435 Embedded Linux \u043e\u0442 \u0410\u043b\u0435\u043a\u0441\u0435\u044f \u0420\u043e\u0441\u0442\u043e\u0432\u0430 \u0434\u043b\u044f Advanced Engineering Radar Systems: <a href=\"https:\/\/www.youtube.com\/watch?v=Xn5cs9uh8gc\" rel=\"noopener noreferrer nofollow\">\u0447\u0430\u0441\u0442\u044c 1<\/a>, <a href=\"https:\/\/www.youtube.com\/watch?v=PxGK7h_DYfE\" rel=\"noopener noreferrer nofollow\">\u0447\u0430\u0441\u0442\u044c 2<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.youtube.com\/playlist?list=PLWMg96mLREOekNVh8-3U5JZv2NTCLMbP5\" rel=\"noopener noreferrer nofollow\">\u041f\u043b\u0435\u0439\u043b\u0438\u0441\u0442<\/a> FPGA Systems \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u044b\u0439 Zynq<\/p>\n<\/li>\n<\/ol>\n<h2>\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f<\/p>\n<ol>\n<li>\n<p>Xilinx Vivado<\/p>\n<\/li>\n<li>\n<p>Xilinx Vitis (\u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Vitis Unified IDE \u0438\u0437 \u0432\u0435\u0440\u0441\u0438\u0438 2023.2.2, \u043e\u0434\u043d\u0430\u043a\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0438 \u0432 Vitis Classic \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439)<\/p>\n<\/li>\n<li>\n<p>\u041c\u0430\u0448\u0438\u043d\u0430 \u0441 Linux (\u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c Xilinx \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Windows, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0432 VM\/dualboot\/etc, \u0442\u0430\u043a \u0438 \u0441\u0440\u0430\u0437\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438\u0437 Linux)<\/p>\n<\/li>\n<li>\n<p>Xilinx Device Tree Generator (<a href=\"https:\/\/github.com\/Xilinx\/device-tree-xlnx\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/Xilinx\/device-tree-xlnx<\/a>)<\/p>\n<\/li>\n<li>\n<p>Xilinx ATF (<a href=\"https:\/\/github.com\/Xilinx\/arm-trusted-firmware\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/Xilinx\/arm-trusted-firmware<\/a>) <\/p>\n<\/li>\n<li>\n<p>Xilinx U-boot (<a href=\"https:\/\/github.com\/Xilinx\/u-boot-xlnx\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/Xilinx\/u-boot-xlnx<\/a>)<\/p>\n<\/li>\n<li>\n<p>Xilinx Linux Kernel (<a href=\"https:\/\/github.com\/Xilinx\/linux-xlnx\/\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/Xilinx\/linux-xlnx\/<\/a>)<\/p>\n<\/li>\n<li>\n<p>Buildroot (git:\/\/git.buildroot.net\/buildroot)<\/p>\n<\/li>\n<li>\n<p>aarch64-linux-gnu-gcc<\/p>\n<\/li>\n<li>\n<p>u-boot tools<\/p>\n<\/li>\n<\/ol>\n<h2>\u042d\u0442\u0430\u043f\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/h2>\n<p>\u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Linux \u043d\u0430 zynqmp \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b<\/p>\n<ol>\n<li>\n<p>FSBL<\/p>\n<\/li>\n<li>\n<p>PMU frimware<\/p>\n<\/li>\n<li>\n<p>ARM trusted firmware<\/p>\n<\/li>\n<li>\n<p>Bitstream<\/p>\n<\/li>\n<li>\n<p>U-Boot<\/p>\n<\/li>\n<li>\n<p>Devicetree<\/p>\n<\/li>\n<li>\n<p>Linux Kernel<\/p>\n<\/li>\n<li>\n<p>Linux RootFS<\/p>\n<\/li>\n<\/ol>\n<h2>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 Vivado<\/h2>\n<p>\u042f \u0431\u0443\u0434\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043f\u043b\u0430\u0442\u043e\u0439 Alinx AXU9EGB. <br \/><a href=\"https:\/\/alinx.com\/public\/upload\/file\/AXU9EGB_User_Manual.pdf\" rel=\"noopener noreferrer nofollow\">AXU9EGB User Manual<\/a><br \/>SCH \u0434\u043b\u044f SoM <a href=\"https:\/\/github.com\/alinxalinx\/AXU9EG_AXU15EG\/blob\/master\/hardware\/Schematics\/ACU9EG_SCH.pdf\" rel=\"noopener noreferrer nofollow\">ACU9EG_SCH<\/a><\/p>\n<p>\u041f\u0440\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u0431\u0443\u0434\u0443 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043c \u043d\u0430 <a href=\"https:\/\/github.com\/alinxalinx\/AXU9EG_AXU15EG\" rel=\"noopener noreferrer nofollow\">GitHub<\/a>.<\/p>\n<p>\u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u0445\u0435\u043c\u0435, \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d XCZU9EG-FFVB1156-2-I. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0435\u043a\u0442 \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043d\u0435\u0451. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0430 \u0441\u0445\u0435\u043c\u0443 Block Design \u0431\u043b\u043e\u043a Zynq UltraScale \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c.<\/p>\n<h3>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0430\u043c\u044f\u0442\u0438<\/h3>\n<p>\u041d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b 4 \u0447\u0438\u043f\u0430 MT40A512M16LY-062E \u043e\u0442 Micron, \u043e\u0431\u0449\u0438\u043c \u043e\u0431\u044a\u0451\u043c\u043e\u043c 4 \u0413\u0411. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u0432\u0438\u0434\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 Zynq \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043e\u0442 083E, \u0442.\u0435. \u0447\u0430\u0441\u0442\u043e\u0442\u0443 1200 \u041c\u0413\u0446, Speed Bin 2400P \u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 16-16-16. \u0423\u0441\u0442\u043d\u043e\u0432\u0438\u043c \u043f\u0440\u0435\u0441\u0435\u0442 MT40A256M16LY_083E, \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u043c \u0451\u043c\u043a\u043e\u0441\u0442\u044c DRAM \u043d\u0430 8192 \u041c\u0431\u0438\u0442 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0438\u0442 \u0432 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0435 \u0440\u044f\u0434\u043e\u0432 \u043d\u0430 16. \u041e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0c5\/f2a\/49d\/0c5f2a49d515f213730649ef86c0011c.png\" width=\"699\" height=\"686\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0c5\/f2a\/49d\/0c5f2a49d515f213730649ef86c0011c.png\"\/><\/figure>\n<h2>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f<\/h2>\n<ul>\n<li>\n<p>QSPI \u0434\u043b\u044f FSBL, PMUFW, ATF \u0438 U-Boot<\/p>\n<\/li>\n<li>\n<p>SD \u0434\u043b\u044f Linux<\/p>\n<\/li>\n<li>\n<p>UART \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043e\u043c\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 U-Boot<\/p>\n<\/li>\n<li>\n<p>GEM (Ethernet) \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f Linux \u0447\u0435\u0440\u0435\u0437 ssh<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u0441\u0435\u0439\u0447\u0430\u0441 AXI Master \u0448\u0438\u043d\u0443<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u0441\u0445\u0435\u043c\u0443 \u0442\u0430\u043a\u0436\u0435 \u0431\u043b\u043e\u043a Processing System Reset.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0418\u0442\u043e\u0433\u043e\u0432\u0430\u044f \u0441\u0445\u0435\u043c\u0430<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ab7\/53a\/501\/ab753a50116f77279b609b3a5dd697fb.png\" width=\"824\" height=\"260\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ab7\/53a\/501\/ab753a50116f77279b609b3a5dd697fb.png\"\/><\/figure>\n<details class=\"spoiler\">\n<summary>\u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 tcl \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u043c\u0430\u043d\u0434\u044b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"json\">create_bd_cell -type ip -vlnv xilinx.com:ip:zynq_ultra_ps_e zynq_ultra_ps_e_0  apply_bd_automation -rule xilinx.com:bd_rule:zynq_ultra_ps_e -config {apply_board_preset \"1\" }  [get_bd_cells zynq_ultra_ps_e_0]  set_property -dict [list \\ CONFIG.SUBPRESET1 {DDR4_MICRON_MT40A256M16GE_083E} \\ CONFIG.PSU__DDRC__DEVICE_CAPACITY {8192 MBits} \\ CONFIG.PSU__DDRC__ROW_ADDR_COUNT {16} \\ CONFIG.PSU__DDRC__CWL {16} \\ CONFIG.PSU__UART0__PERIPHERAL__ENABLE {1} \\ CONFIG.PSU__UART0__PERIPHERAL__IO {MIO 42 .. 43} \\ CONFIG.PSU__QSPI__PERIPHERAL__ENABLE {1} \\ CONFIG.PSU__QSPI__PERIPHERAL__DATA_MODE {x4} \\ CONFIG.PSU__QSPI__PERIPHERAL__IO {MIO 0 .. 12} \\ CONFIG.PSU__QSPI__PERIPHERAL__MODE {Dual Parallel} \\ CONFIG.PSU__QSPI__GRP_FBCLK__ENABLE {1} \\ CONFIG.PSU__SD0__PERIPHERAL__ENABLE {1} \\ CONFIG.PSU__SD0__DATA_TRANSFER_MODE {8Bit} \\ CONFIG.PSU__SD0__PERIPHERAL__IO {MIO 13 .. 22} \\ CONFIG.PSU__SD0__SLOT_TYPE {eMMC} \\ CONFIG.PSU__SD0__RESET__ENABLE {1} \\ CONFIG.PSU__SD1__PERIPHERAL__ENABLE {1} \\ CONFIG.PSU__SD1__PERIPHERAL__IO {MIO 46 .. 51} \\ CONFIG.PSU__SD1__GRP_CD__ENABLE {1} \\ CONFIG.PSU__SD1__SLOT_TYPE {SD 2.0} \\ CONFIG.PSU__TTC0__PERIPHERAL__ENABLE {1} \\ CONFIG.PSU__TTC1__PERIPHERAL__ENABLE {1} \\ CONFIG.PSU__TTC2__PERIPHERAL__ENABLE {1} \\ CONFIG.PSU__TTC3__PERIPHERAL__ENABLE {1} \\ CONFIG.PSU_BANK_0_IO_STANDARD {LVCMOS18} \\ CONFIG.PSU_BANK_1_IO_STANDARD {LVCMOS18} \\ CONFIG.PSU_BANK_2_IO_STANDARD {LVCMOS18} \\ CONFIG.PSU__USE__M_AXI_GP0 {0} \\ CONFIG.PSU__USE__M_AXI_GP2 {0} \\ \\ ] [get_bd_cells zynq_ultra_ps_e_0]  # Create instance: proc_sys_reset_0, and set properties set proc_sys_reset_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:proc_sys_reset:5.0 proc_sys_reset_0 ]  # Create port connections connect_bd_net -net zynq_ultra_ps_e_0_pl_clk0 [get_bd_pins zynq_ultra_ps_e_0\/pl_clk0] [get_bd_pins proc_sys_reset_0\/slowest_sync_clk] connect_bd_net -net zynq_ultra_ps_e_0_pl_resetn0 [get_bd_pins zynq_ultra_ps_e_0\/pl_resetn0] [get_bd_pins proc_sys_reset_0\/ext_reset_in]  validate_bd_design save_bd_design<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c bitstream (Design Sources<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\rightarrow\" alt=\"\\rightarrow\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e54\/700\/1df\/e547001dfd8bca943ff54d2ecec25480.svg\" width=\"19\" height=\"13\"\/>Create HDL Wrapper<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\rightarrow\" alt=\"\\rightarrow\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e54\/700\/1df\/e547001dfd8bca943ff54d2ecec25480.svg\" width=\"19\" height=\"13\"\/>Generate Output Products<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\rightarrow\" alt=\"\\rightarrow\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e54\/700\/1df\/e547001dfd8bca943ff54d2ecec25480.svg\" width=\"19\" height=\"13\"\/>Run Synthesis<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\rightarrow\" alt=\"\\rightarrow\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e54\/700\/1df\/e547001dfd8bca943ff54d2ecec25480.svg\" width=\"19\" height=\"13\"\/> Run Implementation <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\rightarrow\" alt=\"\\rightarrow\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e54\/700\/1df\/e547001dfd8bca943ff54d2ecec25480.svg\" width=\"19\" height=\"13\"\/> Generate Bitstream) \u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0438\u0442\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e \u0432 XSA \u0444\u0430\u0439\u043b \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439 (File<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\rightarrow\" alt=\"\\rightarrow\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e54\/700\/1df\/e547001dfd8bca943ff54d2ecec25480.svg\" width=\"19\" height=\"13\"\/> Export<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\rightarrow\" alt=\"\\rightarrow\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e54\/700\/1df\/e547001dfd8bca943ff54d2ecec25480.svg\" width=\"19\" height=\"13\"\/> Export Hardware<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\rightarrow\" alt=\"\\rightarrow\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e54\/700\/1df\/e547001dfd8bca943ff54d2ecec25480.svg\" width=\"19\" height=\"13\"\/> Include Bitstream). \u041d\u0430 \u044d\u0442\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u0430 \u0432 Vivado \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u0430, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 Vitis.<\/p>\n<h2>FSBL \u0438 PMUFW<\/h2>\n<p>\u042f \u0431\u0443\u0434\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 Vitis Unified IDE, \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0434\u043b\u044f Xilinx SDK \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 <a href=\"https:\/\/habr.com\/ru\/articles\/565368\/\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>, \u0430 \u0434\u043b\u044f Vitis Classic &#8212; \u0432 <a href=\"https:\/\/www.youtube.com\/watch?v=339hpNuRZDo\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u043c \u0432\u0438\u0434\u0435\u043e<\/a>.<\/p>\n<p>\u0412 \u043f\u0430\u043f\u043a\u0435 Vivado \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e vitis_projects \u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0432 \u043d\u0435\u0451 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 <code>.xsa<\/code> \u0444\u0430\u0439\u043b, \u044d\u0442\u0430 \u043f\u0430\u043f\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 Workspace \u0434\u043b\u044f Vitis. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c Vitis \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Open Workspace. <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0435 File->New Component->Platform. \u041d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c Hardware Design \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u043d\u0430\u0448 xsa-\u0444\u0430\u0439\u043b.<\/p>\n<p>\u041d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0432\u044b\u0431\u043e\u0440\u0430 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2a0\/67b\/0f9\/2a067b0f9e6094da4ca2e6506f974087.png\" width=\"1031\" height=\"699\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2a0\/67b\/0f9\/2a067b0f9e6094da4ca2e6506f974087.png\"\/><\/figure>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0432 Output->%project_name%->sw->boot \u0431\u0443\u0434\u0443\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c <code>fsbl.elf<\/code> \u0438 <code>pmufw.elf<\/code>. <\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/481\/165\/1e5\/4811651e5bfc55c5a6601a7e38edac8a.png\" width=\"478\" height=\"360\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/481\/165\/1e5\/4811651e5bfc55c5a6601a7e38edac8a.png\"\/><\/figure>\n<p>\u042d\u0442\u0438 \u0444\u0430\u0439\u043b\u044b \u043f\u0440\u0438\u0433\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430\u043c \u043f\u043e\u0437\u0436\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f FSBL \u0438 PMU FW \u0438\u0437 XSCT <\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f XSCT \u0438\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u0438, \u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 PATH \u043f\u0430\u043f\u043a\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0443 \u0432\u0430\u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d Vitis. <\/p>\n<p>\u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b gensoft.tcl<\/p>\n<pre><code>hsi::open_hw_design -name alynx-linux simple_linux_wrapper.xsa set sw_pmufw [hsi::create_sw_design pmufw -app zynqmp_pmufw -proc psu_pmu_0] common::set_property -name APP_COMPILER_FLAGS -value \"-DENABLE_EM\" -objects $sw_pmufw hsi::generate_app -sw $sw_pmufw -compile -dir boot\/pmufw -app zynqmp_pmufw set sw_fsbl [hsi::create_sw_design fsbl -app zynqmp_fsbl -proc psu_cortexa53_0] common::set_property -name APP_COMPILER_FLAGS -value \"-DFSBL_NAND_EXCLUDE_VAL=1\" -objects $sw_fsbl common::set_property -name APP_COMPILER_FLAGS -value \"-DFSBL_FSBL_SECURE_EXCLUDE_VAL=1\" -objects $sw_fsbl common::set_property -name APP_COMPILER_FLAGS -value \"-DFSBL_FSBL_BS_EXCLUDE_VAL=1\" -objects $sw_fsbl # common::set_property -name APP_COMPILER_FLAGS -value \"-DFSBL_FSBL_DEBUG=1\" -objects $sw_fsbl hsi::generate_app -sw $sw_fsbl -compile -dir boot\/fsbl -app zynqmp_fsbl hsi::close_hw_design -name alynx-linux<\/code><\/pre>\n<p>\u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438<\/p>\n<pre><code>xsct -eval source gensoft.tcl<\/code><\/pre>\n<p>\u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u0432 \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0430\u0445 \u0444\u0430\u0439\u043b\u044b &#171;executable.elf&#187; (\u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u043e \u0434\u0430\u043b\u0435\u0435)<\/p>\n<pre><code>find . -type f -name \"*.elf\" | grep pmufw | xargs -i cp {} ~\/alynx-linux\/output\/pmufw.elf  find . -type f -name \"*.elf\" | grep fsbl | xargs -i cp {} ~\/alynx-linux\/output\/fsbl.elf<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>Zynq MP DRAM tests<\/h2>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0432\u0435\u0440\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a DDR. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. <\/p>\n<p>Examples <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\rightarrow\" alt=\"\\rightarrow\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6c3\/f34\/e9b\/6c3f34e9b549f5b3f8e8bf784b8aba84.svg\" width=\"19\" height=\"13\"\/> Zynq MP DRAM tests <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\rightarrow\" alt=\"\\rightarrow\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5b8\/4f9\/0c6\/5b84f90c61d559234a2ac588178beedf.svg\" width=\"19\" height=\"13\"\/> Create Application Component from Template<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/909\/af2\/ab8\/909af2ab8f0953214a66782535232ce8.png\" alt=\"\" title=\"\" width=\"1919\" height=\"1033\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/909\/af2\/ab8\/909af2ab8f0953214a66782535232ce8.png\"\/><\/figure>\n<p>Build, Run<\/p>\n<p>\u0414\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043f\u043b\u0430\u0442\u043e\u0439 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a\u0430\u044f-\u043d\u0438\u0431\u0443\u0434\u044c \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 COM-\u043f\u043e\u0440\u0442\u0430. \u042f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <strong>Serial Monitor<\/strong> \u0434\u043b\u044f VSCode, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u043e \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c. \u0414\u043b\u044f Windows \u043c\u043e\u0433\u0443 \u043f\u043e\u0441\u043e\u0432\u0435\u0442\u043e\u0432\u0430\u0442\u044c Terminal 1.9b<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/153\/431\/28c\/15343128cb2b13ea8e945c24176c5d39.png\" alt=\"\u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0447\u0435\u0440\u0435\u0437 UART-\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\" title=\"\u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0447\u0435\u0440\u0435\u0437 UART-\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\" width=\"788\" height=\"372\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/153\/431\/28c\/15343128cb2b13ea8e945c24176c5d39.png\"\/><\/p>\n<div><figcaption>\u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0447\u0435\u0440\u0435\u0437 UART-\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b<\/figcaption><\/div>\n<\/figure>\n<h2>Device Tree<\/h2>\n<p>\u0421\u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 device-tree-xlnx \u043d\u0430 \u0441\u0432\u043e\u0439 \u041f\u041a \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043d\u0430 \u0432\u0435\u0442\u043a\u0443 \u0441 \u0440\u0435\u043b\u0438\u0437\u043e\u043c, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0432\u0435\u0440\u0441\u0438\u0438 Xilinx IDE. <\/p>\n<pre><code class=\"bash\">git clone https:\/\/github.com\/Xilinx\/device-tree-xlnx.git cd device-tree-xlnx git branch -r git checkout xlnx_rel_v2023.2<\/code><\/pre>\n<p>\u0421\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c xsa-\u0444\u0430\u0439\u043b \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443. \u0412 \u043d\u0435\u0439 \u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 tcl-\u0444\u0430\u0439\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f<\/p>\n<pre><code class=\"bash\">hsi::open_hw_design simple_linux_wrapper.xsa hsi::set_repo_path \/home\/lazba\/device-tree-xlnx\/ hsi::create_sw_design device-tree -os device_tree -proc psu_cortexa53_0 hsi::generate_target -dir my_dts hsi::close_hw_design [hsi current_hw_design]<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b(cmd\/powershell\/bash\/etc) \u0432 \u044d\u0442\u043e\u0439 \u043f\u0430\u043f\u043a\u0435. \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f XSCT \u0438\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u0438, \u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 PATH \u043f\u0430\u043f\u043a\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0443 \u0432\u0430\u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d Vitis. <\/p>\n<pre><code>xsct -eval source gendt.tcl<\/code><\/pre>\n<p><strong>P.S.<\/strong> \u0442\u0430\u043a\u0436\u0435 devicetree \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0438\u0437 platform-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 Vitis, \u043e\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e \u043f\u0443\u0442\u0438 <code>\/export\/platform\/hw\/sdt<\/code>,- \u043d\u0443\u0436\u043d\u0430 \u0432\u0441\u044f \u043f\u0430\u043f\u043a\u0430. <\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/161\/774\/c94\/161774c947b0373ff4f98327e5b61efc.png\" width=\"476\" height=\"723\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/161\/774\/c94\/161774c947b0373ff4f98327e5b61efc.png\"\/><\/figure>\n<h2>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0435<\/h2>\n<p>\u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u0432 Linux. \u041f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f (\u043e\u0434\u043d\u0430\u043a\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432 \u0432\u0430\u0448\u0435\u043c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0445\u0432\u0430\u0442\u0430\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0445, \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438)<\/p>\n<ul>\n<li>\n<p>git<\/p>\n<\/li>\n<li>\n<p>base-devel (\u043d\u0430 Debian-based \u044d\u0442\u043e build-essential)<\/p>\n<\/li>\n<li>\n<p>gcc, g++<\/p>\n<\/li>\n<li>\n<p>aarch64-linux-gnu-gcc (\u0438 \u043f\u0440\u043e\u0447\u0438\u0435)<\/p>\n<\/li>\n<li>\n<p>make<\/p>\n<\/li>\n<li>\n<p>binutils<\/p>\n<\/li>\n<li>\n<p>python, python-setuptools<\/p>\n<\/li>\n<li>\n<p>bison<\/p>\n<\/li>\n<li>\n<p>flex<\/p>\n<\/li>\n<li>\n<p>swig<\/p>\n<\/li>\n<li>\n<p>tar<\/p>\n<\/li>\n<li>\n<p>cpio<\/p>\n<\/li>\n<li>\n<p>zip, unzip<\/p>\n<\/li>\n<li>\n<p>patch<\/p>\n<\/li>\n<li>\n<p>dtc <\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0441\u043b\u0438 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 \u043d\u0435\u0442 dtc \u0438 aarc64-gcc, \u043d\u0435 \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0439\u0442\u0435, \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e\u0431 \u044d\u0442\u043e\u043c \u0434\u0430\u043b\u0435\u0435.<\/p>\n<p>\u0412 Home \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e alynx-linux \u043f\u043e\u0434 \u043d\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442. \u0412 \u043d\u0435\u0439 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u043e\u0434\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438<\/p>\n<ul>\n<li>\n<p>output &#8212; \u043f\u043e\u0434 \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438 \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0444\u0430\u0439\u043b\u044b<\/p>\n<\/li>\n<li>\n<p>devicetree<\/p>\n<\/li>\n<li>\n<p>uboot &#8212; \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 U-Boot<\/p>\n<\/li>\n<li>\n<p>kernel &#8212; \u0434\u043b\u044f \u044f\u0434\u0440\u0430<\/p>\n<\/li>\n<li>\n<p>buildroot &#8212; \u0434\u043b\u044f RootFS<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"bash\">mkdir -p ~\/alynx-linux\/output mkdir -p ~\/alynx-linux\/uboot mkdir -p ~\/alynx-linux\/kernel mkdir -p ~\/alynx-linux\/buildroot mkdir -p ~\/alynx-linux\/devicetree<\/code><\/pre>\n<p>\u0421\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c .bit-\u0444\u0430\u0439\u043b \u0432 \u043f\u0430\u043f\u043a\u0443 hw, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432 \u043f\u0430\u043f\u043a\u0435 \u0441 xsa-\u0444\u0430\u0439\u043b\u043e\u043c (XSCT) \u043b\u0438\u0431\u043e \u0432 \u043f\u0430\u043f\u043a\u0435 Output\/platform\/hw (Vitis).<\/p>\n<p>\u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c, \u043a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 Xilinx SDK, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0443 \u0432\u0430\u0441 \u0432 Windows, \u044f \u0431\u0443\u0434\u0443 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c, \u0447\u0442\u043e \u0432\u044b \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043d\u0430 Windows-\u043c\u0430\u0448\u0438\u043d\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u0431\u044b\u043b\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 Linux. <\/p>\n<h2>Device Tree (\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435)<\/h2>\n<p>Xilinx DTG \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u043b \u0432 \u043f\u0430\u043f\u043a\u0443 my_dts \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u043c, \u043e\u0434\u043d\u0430\u043a\u043e, \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u043b\u0438\u0448\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435<\/p>\n<ul>\n<li>\n<p>system.dts &#8212; \u0444\u0430\u0439\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, MAC-\u0430\u0434\u0440\u0435\u0441 \u0434\u043b\u044f Ethernet<\/p>\n<\/li>\n<li>\n<p>pcw.dtsi &#8212; \u0444\u0430\u0439\u043b \u0441 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0432 Vivado<\/p>\n<\/li>\n<li>\n<p>system-top.dts &#8212; \u0444\u0430\u0439\u043b \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435<\/p>\n<\/li>\n<\/ul>\n<p>\u0424\u0430\u0439\u043b\u044b zynqmp.dtsi \u0438 zynqmp-clk-ccf.dtsi \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 PS \u0447\u0430\u0441\u0442\u0438, \u043e\u0434\u043d\u0430\u043a\u043e \u043e\u043d\u0438 \u043d\u0430\u0441 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 U-Boot \u0438 Linux \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435, \u0438\u043b\u0438, \u0441\u043a\u043e\u0440\u0435\u0435, \u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u0442\u043e\u0447\u0435\u043d\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u044d\u0442\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b alynx-linux.dts. \u0412 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0445 \u043d\u0430\u0441 dts\/dtsi \u0444\u0430\u0439\u043b\u043e\u0432. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0442\u043c\u0435\u0447\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043b\u0438\u0447\u0438\u0439:<\/p>\n<pre><code class=\"cpp\">&amp;sdhci1 { clock-frequency = &lt;199998001>; status = \"okay\"; xlnx,mio-bank = &lt;0x1>; disable-wp; no-1-8-v; u-boot,dm-pre-reloc; };<\/code><\/pre>\n<p>5, 6, 7 \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 SD, \u0447\u0442\u043e\u0431\u044b microSD \u043a\u0430\u0440\u0442\u0430 \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 read-only \u0438\u0437-\u0437\u0430 \u043d\u0435\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f Write Protect, \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430; \u0438 \u0431\u044b\u043b\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0438\u0437 U-Boot. <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u043e\u0440\u0434\u044b \u0432 \u0440\u0430\u0437\u0434\u0435\u043b model. \u041f\u0440\u0438\u043c\u0435\u0440 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c<\/p>\n<details class=\"spoiler\">\n<summary>alynx-linux.dts<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/ SPDX-License-Identifier: GPL-2.0 \/*  * dts file for Alynx AXU9EG devmy  *\/  \/dts-v1\/;  #include \"zynqmp.dtsi\" #include \"zynqmp-clk-ccf.dtsi\"  \/ { model = \"Alynx AXU9EG\"; compatible = \"xlnx,zynqmp\";  aliases { ethernet0 = &amp;gem3; serial0 = &amp;uart0; spi0 = &amp;qspi; mmc0 = &amp;sdhci1; };  chosen { bootargs = \"earlycon\"; stdout-path = \"serial0:115200n8\"; };  memory@0 { device_type = \"memory\"; reg = &lt;0x0 0x0 0x0 0x7ff00000>, &lt;0x00000008 0x00000000 0x0 0x80000000>; };  };  &amp;gem3 { local-mac-address = [00 0a 35 00 00 00]; phy-mode = \"rgmii-id\"; status = \"okay\"; xlnx,ptp-enet-clock = &lt;0x0>; }; &amp;sdhci1 { clock-frequency = &lt;199998001>; status = \"okay\"; xlnx,mio-bank = &lt;0x1>; disable-wp; no-1-8-v; u-boot,dm-pre-reloc; }; &amp;qspi { is-dual = &lt;1>; num-cs = &lt;2>; spi-rx-bus-width = &lt;4>; spi-tx-bus-width = &lt;4>; status = \"okay\"; };  &amp;uart0 { cts-override ; device_type = \"serial\"; port-number = &lt;0>; status = \"okay\"; u-boot,dm-pre-reloc ; };<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u0440\u0430\u0437\u0434\u0435\u043b aliases. \u0412 \u043d\u0451\u043c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043d\u043e\u043c\u0435\u0440\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, uart1 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u043a serial0, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0432 uart1; \u0438\u043b\u0438 sdhci1 \u043a\u0430\u043a mmc0, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043c\u0435\u0442\u0438\u0442\u044c sd-\u043a\u0430\u0440\u0442\u0443 \u043a\u0430\u043a 0 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e mmc \u0432 \/dev\/. <\/p>\n<p>\u041f\u043e\u043b\u0435 chosen\/bootargs \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044f\u0434\u0440\u0430 Linux. \u0412 stdout-path \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043b\u043e\u0433 \u044f\u0434\u0440\u0430 \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0430\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u044c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u044d\u0442\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430.  <\/p>\n<p>\u041f\u043e\u043b\u043e\u0436\u0438\u043c \u0444\u0430\u0439\u043b alynx-linux.dts \u0432 \u043f\u0430\u043f\u043a\u0443 output. <\/p>\n<h2>ARM Trusted Firmware<\/h2>\n<p>\u0412\u044b\u0432\u0435\u0434\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0435\u0433\u043e\u0432 \u0432 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438, \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u0438 \u0441\u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043b\u0438\u0437. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>--depth 1<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u044b \u0438\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u0431\u0435\u0437 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439, \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0435\u0442\u043e\u043a \u0438 \u0442.\u0434., \u043e\u043d \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u043d\u0430\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u043e\u043b\u0438\u043c\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u0438\u043c\u0435\u0440\u043e\u0432 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c.<\/p>\n<pre><code class=\"bash\">cd ~\/ git ls-remote -t https:\/\/github.com\/Xilinx\/arm-trusted-firmware git clone --depth 1 --branch xlnx_rebase_v2.8_2023.2  https:\/\/github.com\/Xilinx\/arm-trusted-firmware.git   <\/code><\/pre>\n<p>\u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u043c\u0435\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 aarch64-linux-gnu-gcc. \u0415\u0441\u043b\u0438 \u0435\u0433\u043e \u043d\u0435\u0442 \u0432 \u0432\u0430\u0448\u0438\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445, \u0442\u043e \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c <a href=\"https:\/\/developer.arm.com\/downloads\/-\/arm-gnu-toolchain-downloads\" rel=\"noopener noreferrer nofollow\">\u0441 \u0441\u0430\u0439\u0442\u0430 ARM<\/a>. <\/p>\n<details class=\"spoiler\">\n<summary>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438\u0437 tar<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>tar -xf %archive-name% -v<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0439\u0442\u0435 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0438\u043c\u0435\u043d\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440  <code>aarch64-none-linux-gnu. \u0421\u043a\u043e\u043f\u0438\u0440\u0443\u0439\u0442\u0435 \u0432 \u0443\u0434\u043e\u0431\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 home \u0438\u043b\u0438 \/tools\/.<\/code>\u0418 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0432 <a href=\"https:\/\/losst.pro\/peremennaya-path-v-linux\" rel=\"noopener noreferrer nofollow\">path<\/a>.<\/p>\n<\/div>\n<\/details>\n<pre><code class=\"bash\">make CROSS_COMPILE=aarch64-none-linux-gnu- ARCH=aarch64 PLAT=zynqmp RESET_TO_BL31=1  <\/code><\/pre>\n<p>\u041d\u0443\u0436\u043d\u044b\u0439 \u043d\u0430\u043c \u0444\u0430\u0439\u043b \u043b\u0435\u0436\u0438\u0442 \u0432 &#8230;arm-trusted-firmware\/build\/zynqmp\/release\/bl31\/bl31.elf . \u0421\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e \u0432 \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e.<\/p>\n<pre><code>cp $HOME\/arm-trusted-firmware\/build\/zynqmp\/release\/bl31\/bl31.elf $HOME\/alynx-linux\/hw\/bl31.elf <\/code><\/pre>\n<p>P.S. \u0415\u0441\u043b\u0438 make \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c `Error 1` \u043f\u043e\u0441\u043b\u0435 warning \u043e \u043f\u0440\u0430\u0432\u0430\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c, \u0444\u0430\u0439\u043b \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0431\u0440\u0430\u043d. \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0431\u0440\u0430\u0442\u044c \u044d\u0442\u0443 \u043e\u0448\u0438\u0431\u043a\u0443, \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 <code>--no-warn-rwx-segments<\/code> \u043a \u0444\u043b\u0430\u0433\u0430\u043c \u043b\u0438\u043d\u043a\u0435\u0440\u0430 \u0432 Makefile.<\/p>\n<h2>U-Boot<\/h2>\n<p><a class=\"anchor\" name=\"uboot\" id=\"uboot\"><\/a><\/p>\n<p>\u0421\u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u043d\u0430 \u0441\u0432\u043e\u0439 \u041f\u041a \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 u-boot-xlnx \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043d\u0430 \u043a\u043e\u043c\u043c\u0438\u0442, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 2023.2.<\/p>\n<pre><code>cd ~\/ git ls-remote -t https:\/\/github.com\/Xilinx\/u-boot-xlnx git clone --depth 1 --branch \"xlnx_rebase_v2023.01_2023.2\" https:\/\/github.com\/Xilinx\/u-boot-xlnx<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0451\u043c alynx-linux.dts \u0432 \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e u-boot<\/p>\n<pre><code class=\"bash\">cd ~\/alynx-linux mkdir -p uboot\/arch\/arm\/dts\/ cp output\/alynx-linux.dts uboot\/arch\/arm\/dts\/alynx-linux.dts<\/code><\/pre>\n<p>\u0412 \u043f\u0430\u043f\u043a\u0435 uboot \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 build-uboot. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 chmod+x \u0432\u044b\u0434\u0430\u0451\u0442 \u0441\u043a\u0440\u0438\u043f\u0442\u0443 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435.<\/p>\n<pre><code class=\"bash\">cd uboot touch build_uboot                                                                                                                                                                                     \ue0b2 \u2714 \ue0b3 \uf013  chmod +x build_uboot<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>build-uboot<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>#!\/bin\/sh  make distclean  make -C $HOME\/u-boot-xlnx distclean  make -C $HOME\/u-boot-xlnx \\ O=$PWD \\ xilinx_zynqmp_virt_defconfig  sed -i 's\/\\(CONFIG_DEFAULT_DEVICE_TREE=\"\\)[^\"]*\/\\1'alynx-linux'\/' .config sed -i 's\/\\(CONFIG_OF_LIST=\"\\)\\([^\"]*\\)\/\\1'alynx-linux\\ '\\2\/' .config sed -i 's\/\\(CONFIG_SPL_OF_LIST=\"\\)\\([^\"]*\\)\/\\1'alynx-linux\\ '\\2\/' .config  make -j3 -C $HOME\/u-boot-xlnx \\ O=$PWD \\ CROSS_COMPILE=aarch64-none-linux-gnu- \\ DEVICE_TREE=\"alynx-linux\"  cp $HOME\/alynx-linux\/uboot\/u-boot.elf $HOME\/alynx-linux\/output\/u-boot.elf<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f ZynqMP, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u043d\u0435\u0433\u043e \u043d\u0430\u0439\u0441\u0442\u0440\u043e\u0439\u043a\u0438 (sed) dts \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0434\u043e 3 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432( <code>-j3<\/code>, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0431\u043e\u043b\u044c\u0448\u0435 \u044f\u0434\u0435\u0440, \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430 <code>-j8<\/code> ). \u041f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0443\u0436\u043d\u044b\u0439 \u043d\u0430\u043c elf-\u0444\u0430\u0439\u043b \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0443 output.<\/p>\n<h2>\u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a<\/h2>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0437\u0430\u043f\u0443\u0441\u043a U-Boot \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0435\u0433\u043e \u0432 QSPI, \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u0431\u0435\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041f\u0435\u0440\u0435\u0432\u0435\u0434\u0451\u043c ZynqMP \u0432 \u0440\u0435\u0436\u0438\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u0437 JTAG \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c xsct \u0438\u0437 \u043f\u0430\u043f\u043a\u0438 \u0441 \u043d\u0430\u0448\u0438\u043c\u0438 elf-\u0444\u0430\u0439\u043b\u0430\u043c\u0438 (\u0435\u0441\u043b\u0438 Vivado \u0443 \u0432\u0430\u0441 \u0432 Windows, \u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0439\u0442\u0435 \u0444\u0430\u0439\u043b\u044b \u0442\u0443\u0434\u0430). \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0438\u0437 JTAG, \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0441 <a href=\"https:\/\/docs.amd.com\/r\/en-US\/ug1137-zynq-ultrascale-mpsoc-swdev\/Loading-PMU-Firmware-in-JTAG-Boot-Mode\" rel=\"noopener noreferrer nofollow\">UG1137<\/a>, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c PMU. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c UART \u0448\u0438\u043d\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043a \u041f\u041a (\u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0432\u044b\u0432\u043e\u0434\u0430 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430). \u0412\u043a\u043b\u044e\u0447\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u0437 JTAG. \u0412 \u043f\u0430\u043f\u043a\u0435 <code>alynx-linux\/hw<\/code> (\u0433\u0434\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0437\u044b \u0431\u0443\u0442\u043b\u043e\u0430\u0434\u0435\u0440\u0430) \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c tcl-\u0441\u043a\u0440\u043f\u0438\u0442 <code>jtagload.tcl<\/code>.<\/p>\n<details class=\"spoiler\">\n<summary>jtagload.tcl<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>#Disable Security gates to view PMU MB target targets -set -filter {name =~ \"PSU\"}  #By default, JTAGsecurity gates are enabled #This disables security gates for DAP, PLTAP and PMU. mwr 0xffca0038 0x1ff after 500  #Load and run PMU FW targets -set -filter {name =~ \"MicroBlaze PMU\"} dow pmufw.elf con after 500  #Reset A53, load and run FSBL targets -set -filter {name =~ \"Cortex-A53 #0\"} rst -processor dow fsbl.elf con  #Give FSBL time to run after 5000 stop  #Other SW... dow u-boot.elf dow bl31.elf con  #\u043f\u043e \u0436\u0435\u043b\u0430\u043d\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0431\u0438\u0442\u0441\u0442\u0440\u0438\u043c #Targets -set -nocase -filter {name =~ \"*PL*\"} #fpga simple-linux.bit<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u043f\u0438\u0448\u0435\u043c <\/p>\n<pre><code>xsct -eval jtagload.tcl<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0443\u0432\u0438\u0434\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443 \u0432 UART \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ada\/cff\/877\/adacff877c510b59c14c6f17edea6c49.png\" width=\"894\" height=\"605\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ada\/cff\/877\/adacff877c510b59c14c6f17edea6c49.png\"\/><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u044b\u0439 boot.bin \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438\u0437 QSPI\/SD. \u0412 \u043f\u0430\u043f\u043a\u0435 \u0441 elf-\u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u043c bif-\u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0441\u0435\u0431\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u043e\u043f\u0446\u0438\u0438.<\/p>\n<pre><code>\/\/arch = zynqmp; split = false; format = BIN the_ROM_image: {         [bootloader, destination_cpu = a53-0]fsbl.elf         [pmufw_image]pmufw.elf         [destination_cpu = a53-0, exception_level = el-3, trustzone]bl31.elf         [destination_cpu = a53-0, exception_level = el-2]u-boot.elf }<\/code><\/pre>\n<p>\u0418 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c boot.bin<\/p>\n<pre><code class=\"bash\">bootgen -image boot.bif -o boot.bin -arch zynqmp<\/code><\/pre>\n<p>\u041b\u0438\u0431\u043e \u0432 Vitis: Vitis <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\rightarrow\" alt=\"\\rightarrow\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/45a\/738\/119\/45a738119b00e9fff01d039f890425ab.svg\" width=\"19\" height=\"13\"\/> Create Boot Image <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\rightarrow\" alt=\"\\rightarrow\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b8e\/dab\/b0f\/b8edabb0fa4d6e1ba35e197d6a1a7638.svg\" width=\"19\" height=\"13\"\/> Zynq Ultrascale+ <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\rightarrow\" alt=\"\\rightarrow\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/995\/0bd\/08f\/9950bd08f21cf0487c6d4a15ff096e94.svg\" width=\"19\" height=\"13\"\/> Import Existing BIF file <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\rightarrow\" alt=\"\\rightarrow\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7e3\/41f\/a06\/7e341fa069720d2ac432749d60d95c65.svg\" width=\"19\" height=\"13\"\/> Create Image<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a7c\/8f6\/a8a\/a7c8f6a8a489f4907c2a83c446809357.png\" width=\"1021\" height=\"886\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a7c\/8f6\/a8a\/a7c8f6a8a489f4907c2a83c446809357.png\"\/><\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0437\u0430\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0432 QSPI FLASH (\u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044c\u0442\u0435\u0441\u044c, \u0447\u0442\u043e Zynq \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0451\u043d \u0432 \u0440\u0435\u0436\u0438\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441 JTAG)<\/p>\n<pre><code>xsct connect exec program_flash -f boot.bin -flash_type qspi-x8-dual_parallel -fsbl fsbl.elf -blank_check -verify exit<\/code><\/pre>\n<p>\u041b\u0438\u0431\u043e \u0432 Vitis: Vitis <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\rightarrow\" alt=\"\\rightarrow\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/45a\/738\/119\/45a738119b00e9fff01d039f890425ab.svg\" width=\"19\" height=\"13\"\/> Program Flash<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/256\/0b8\/46a\/2560b846a06b98d72eb3d9bdd5226fd8.png\" width=\"852\" height=\"451\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/256\/0b8\/46a\/2560b846a06b98d72eb3d9bdd5226fd8.png\"\/><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0438 BOOT \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0435\u043d\u044b \u0432 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0438\u0437 QSPI, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u0442\u044c FSBL->PMUFW->ATF->U-Boot. Bitstream \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043d\u0435 \u0438\u0437 FSBL, \u0430 \u0438\u0437 Linux \u0438\u0437 SD. <\/p>\n<h2>Linux Kernel<\/h2>\n<p>\u0421\u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043d\u0430 \u043d\u0443\u0436\u043d\u043e\u0439 \u043d\u0430\u043c \u0432\u0435\u0442\u043a\u0435 <\/p>\n<pre><code class=\"bash\">git ls-remote -h https:\/\/github.com\/Xilinx\/linux-xlnx git clone --depth 1 --branch \"xlnx_rebase_v6.6_LTS\" https:\/\/github.com\/Xilinx\/linux-xlnx<\/code><\/pre>\n<p>\u0412 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b kernel_build, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044f\u0434\u0440\u043e \u0432 \u0441\u0432\u043e\u0435\u0439 \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0435 \u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 output.<\/p>\n<details class=\"spoiler\">\n<summary>kernel_build<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>#!\/bin\/sh  make -C $HOME\/linux-xlnx \\ O=$PWD \\ ARCH=arm64 \\ xilinx_zynqmp_defconfig  make -C $HOME\/linux-xlnx \\ O=$PWD \\ ARCH=arm64 \\ LOCALVERSION= \\ CROSS_COMPILE=aarch64-none-linux-gnu- \\ nconfig  make -C $HOME\/linux-xlnx -j4 \\ O=$PWD \\ ARCH=arm64 \\ LOCALVERSION= \\ CROSS_COMPILE=aarch64-none-linux-gnu-   cp $HOME\/alynx-linux\/kernel\/arch\/arm64\/boot\/Image $HOME\/alynx-linux\/output\/Image  cp $HOME\/alynx-linux\/kernel\/arch\/arm64\/boot\/Image.gz $HOME\/alynx-linux\/output\/Image.gz<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c overlay filesystem support (\u043a\u0430\u043a \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435) &#8212; \u044d\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 bitstream \u0438\u0437 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/47a\/46d\/1f7\/47a46d1f7700dba6315e2cf7c7b1a5b9.png\" width=\"1448\" height=\"637\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/47a\/46d\/1f7\/47a46d1f7700dba6315e2cf7c7b1a5b9.png\"\/><\/figure>\n<p>\u0421\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b <code>Image<\/code> \u0438 <code>Image.gz<\/code> \u0431\u0443\u0434\u0443\u0442 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u043f\u0430\u043f\u043a\u0443 output.<\/p>\n<h2>Device Tree Blob<\/h2>\n<p>\u0414\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f gcc (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u043d \u043f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 \u0432\u0430\u0448\u0435\u043c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0435) \u0438 dtc (\u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0431\u043e\u0437\u0432\u0430\u043d \u043a\u0430\u043a dtc \u043b\u0438\u0431\u043e device-tree-compiler)<\/p>\n<details class=\"spoiler\">\n<summary>\u0415\u0441\u043b\u0438 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 \u043d\u0435\u0442 DTC<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"bash\">git clone https:\/\/git.kernel.org\/pub\/scm\/utils\/dtc\/dtc.git cd dtc make export PATH=$PATH:$PWD<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>DTB \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u044f\u0434\u0440\u043e \u043b\u0438\u043d\u0443\u043a\u0441 \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f, \u043a\u0430\u043a\u0430\u044f \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435. \u0424\u043e\u0440\u043c\u0430\u0442 device-tree \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 #include, \u043e\u0434\u043d\u0430\u043a\u043e \u0432\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u044b; \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0435\u0433\u043e \u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c\u0443 \u0432\u0438\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0421\u0438 ( <code>cpp<\/code> \u043b\u0438\u0431\u043e <code>gcc -E<\/code>). \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 DTB \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f linux-xlnx. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0439 dts \u0444\u0430\u0439\u043b \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e DTC. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0432 \u043f\u0430\u043f\u043a\u0435 \u0441 alynx-linux.dts \u0444\u0430\u0439\u043b\u043e\u043c \u0441\u043a\u0440\u0438\u043f\u0442 dtb_compile.sh. <\/p>\n<pre><code>#!\/bin\/sh  INCDIR=$HOME\/linux-xlnx\/include DTSHDIR=$HOME\/linux-xlnx\/arch\/arm64\/boot\/dts\/ DTSDIR=$HOME\/linux-xlnx\/arch\/arm64\/boot\/dts\/xilinx\/  cpp -nostdinc -I${INCDIR} -I${DTSHDIR} -I${DTSDIR} \\ -undef -x assembler-with-cpp -o alynx-linux-pre.dts alynx-linux.dts  dtc -I dts -O dtb --symbols -i${DTSHDIR} -i${DTSDIR} -o alynx-linux.dtb alynx-linux-pre.dts<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u0444\u0430\u0439\u043b alynx-linux.dtb \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0432 \u043f\u0430\u043f\u043a\u0443 output. <\/p>\n<h2>RootFS<\/h2>\n<p>\u0412 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0424\u0421 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u0444\u0430\u0439\u043b\u044b \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f. <\/p>\n<p>\u0412 \u043f\u0430\u043f\u043a\u0435 buildroot \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u043a\u0440\u0438\u043f\u0442: br_config \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0430 buildroot.<\/p>\n<details class=\"spoiler\">\n<summary>br_config<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>#!\/bin\/sh  make -C \/home\/lazba\/buildroot \\ O=$PWD \\ nconfig<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440 \u0438 \u043f\u0435\u0440\u0435\u0434\u0451\u043c \u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0439 \u0424\u0421<\/p>\n<h3>Target Options<\/h3>\n<p>\u0421\u043c\u0435\u043d\u0438\u043c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043d\u0430 aarch64 le, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/acd\/8bf\/d7e\/acd8bfd7e883510ff315754eb459ba6d.png\" width=\"795\" height=\"641\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/acd\/8bf\/d7e\/acd8bfd7e883510ff315754eb459ba6d.png\"\/><\/figure>\n<h3>Toolchain<\/h3>\n<p>\u0423 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d aarch64 gcc, \u043f\u043e\u0442\u043e\u043c\u0443 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c <\/p>\n<ul>\n<li>\n<p>Toolchain type (External toolchain)<\/p>\n<\/li>\n<li>\n<p>Toolchain (Arm AArch64 **)<\/p>\n<\/li>\n<li>\n<p>Toolchain origin (Pre-installed toolchain)<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/39c\/515\/cfc\/39c515cfcc028ca4e471530dddb66f3a.png\" width=\"792\" height=\"637\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/39c\/515\/cfc\/39c515cfcc028ca4e471530dddb66f3a.png\"\/><\/figure>\n<h3>System configuration<\/h3>\n<ul>\n<li>\n<p>System hostname root<\/p>\n<\/li>\n<li>\n<p>Enable root login with password<\/p>\n<ul>\n<li>\n<p>Root password &#8212; root<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Init system  &#8212; systemd (\u043c\u043e\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c busybox \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/li>\n<li>\n<p>\/bin\/sh (default shell) &#8212; bash (\u043c\u043e\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c busybox \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e) <\/p>\n<\/li>\n<\/ul>\n<h3>Target packages<\/h3>\n<p>Miscellaneous: <\/p>\n<ul>\n<li>\n<p>haveged &#8212; \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b, \u0431\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/p>\n<\/li>\n<\/ul>\n<p>Networking applications:<\/p>\n<ul>\n<li>\n<p>dhcp<\/p>\n<\/li>\n<li>\n<p>dhcpd &#8212; \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 IP \u0430\u0434\u0440\u0435\u0441\u0430<\/p>\n<\/li>\n<li>\n<p>dropbear (SSH \u043a\u043b\u0438\u0435\u043d\u0442)<\/p>\n<\/li>\n<li>\n<p>ifupdown &#8212; \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c<\/p>\n<\/li>\n<li>\n<p>iperf, iperf3 &#8212; \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0442\u0435\u0441\u0442<\/p>\n<\/li>\n<li>\n<p>iptables, iputils<\/p>\n<\/li>\n<li>\n<p>lftp &#8212; \u043a\u0438\u0434\u0430\u0435\u043c\u0441\u044f \u0444\u0430\u0439\u043b\u0430\u043c\u0438<\/p>\n<\/li>\n<li>\n<p>openssh (\u0435\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 lftp, \u0432\u0440\u043e\u0434\u0435 \u043a\u0430\u043a)<\/p>\n<\/li>\n<\/ul>\n<p>Text editors and viewers<\/p>\n<ul>\n<li>\n<p>mc &#8212; \u0442\u0430\u043a \u0444\u0430\u0439\u043b\u044b \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u0435\u0435<\/p>\n<\/li>\n<li>\n<p>nano, vim <\/p>\n<\/li>\n<\/ul>\n<h3>Filesystem Images<\/h3>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u044b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 ext4, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u043b\u0438\u0432\u0430\u0442\u044c \u043d\u0430 \u0444\u043b\u0435\u0448\u043a\u0443; \u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 cpio, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u0440\u0435\u0448\u0438\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0438\u0437 ramdisk, \u0437\u0430\u043e\u0434\u043d\u043e \u043f\u043e\u0434\u043f\u0438\u0448\u0435\u043c \u043e\u0431\u0440\u0430\u0437 \u0434\u043b\u044f U-Boot.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1e6\/fb2\/66c\/1e6fb266c6aeec88959e296fd58ff3ea.png\" width=\"806\" height=\"572\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1e6\/fb2\/66c\/1e6fb266c6aeec88959e296fd58ff3ea.png\"\/><\/figure>\n<h3>Host Utilities<\/h3>\n<ul>\n<li>\n<p>host dosfstools<\/p>\n<\/li>\n<li>\n<p>host genimage<\/p>\n<\/li>\n<li>\n<p>host mtools<\/p>\n<\/li>\n<\/ul>\n<h3>\u0417\u0430\u043f\u0443\u0441\u043a \u0441\u0431\u043e\u0440\u043a\u0438<\/h3>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043f\u043e <strong>F6<\/strong> \u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440 <strong>F9<\/strong>. <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0444\u0430\u0439\u043b <code>br_build<\/code>. <\/p>\n<details class=\"spoiler\">\n<summary>br_build<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>#!\/bin\/sh  make -C \/home\/lazba\/buildroot \\ O=$PWD \\ BR2_JLEVEL=\"$(($(nproc)))\"  cp $PWD\/images\/rootfs.cpio.uboot  $PWD\/..\/output\/rootfs.cpio.uboot cp $PWD\/images\/rootfs.ext2  $PWD\/..\/output\/rootfs.ext2 cp $PWD\/images\/rootfs.ext4  $PWD\/..\/output\/rootfs.ext4<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0437\u0430 \u0424\u0421, \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c \u0444\u0430\u0439\u043b\u044b \u0431\u0443\u0434\u0443\u0442 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u043f\u0430\u043f\u043a\u0443 output.<\/p>\n<h2>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 SD \u043a\u0430\u0440\u0442\u044b<\/h2>\n<h3>\u0420\u0430\u0437\u043c\u0435\u0442\u043a\u0430 \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044f<\/h3>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u0434\u0432\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 &#8212; fat32 \u0434\u043b\u044f \u044f\u0434\u0440\u0430 \u0438 dt, ext4 \u0434\u043b\u044f rootfs. \u0412 Linux \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e GUI \u0443\u0442\u0438\u043b\u0438\u0442, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a Gparted \u0438\u043b\u0438 KDE Partition Manager, \u043b\u0438\u0431\u043e \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435, \u043a\u0430\u043a \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u0434\u0430\u043b\u0435\u0435.<\/p>\n<p>\u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u0430\u0440\u0442\u0443 \u0432 \u041f\u041a \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u0438\u043c \u0444\u0430\u0439\u043b\u043e\u043c \u0435\u0451 \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c<\/p>\n<pre><code class=\"bash\">sudo dmesg<\/code><\/pre>\n<p>\u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0443\u0432\u0438\u0434\u0438\u043c \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u0442\u0430\u043a\u043e\u0433\u043e:<\/p>\n<pre><code class=\"bash\">usb-storage 1-6.2.1:1.0: USB Mass Storage device detected scsi host6: usb-storage 1-6.2.1:1.0 scsi 6:0:0:0: Direct-Access     Mass     Storage Device   1.00 PQ: 0 ANSI: 0 CCS sd 6:0:0:0: [sdb] 61945856 512-byte logical blocks: (31.7 GB\/29.5 GiB) sd 6:0:0:0: [sdb] Write Protect is off sd 6:0:0:0: [sdb] Mode Sense: 03 00 00 00 sd 6:0:0:0: [sdb] No Caching mode page found sd 6:0:0:0: [sdb] Assuming drive cache: write through sdb: sdb1 sdb2 sd 6:0:0:0: [sdb] Attached SCSI removable disk<\/code><\/pre>\n<p>\u041f\u043e\u043d\u0438\u043c\u0430\u0435\u043c, \u0447\u0442\u043e \u043a\u0430\u0440\u0442\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 <code>\/dev\/sdb<\/code>. \u041e\u0447\u0438\u0441\u0442\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e dd.<\/p>\n<pre><code>sudo dd if=\/dev\/zero of=\/dev\/sdb bs=1024 count=1<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c<\/p>\n<pre><code class=\"bash\">sudo fdisk -l \/dev\/sdb  # \u043e\u0442\u0432\u0435\u0442 Disk \/dev\/sdb: 29,54 GiB, 31716278272 bytes, 61945856 sectors Disk model: Storage Device   Units: sectors of 1 * 512 = 512 bytes Sector size (logical\/physical): 512 bytes \/ 512 bytes I\/O size (minimum\/optimal): 512 bytes \/ 512 bytes<\/code><\/pre>\n<p>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u0445 \u043d\u0435 \u0431\u044b\u043b\u0430 \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u0430, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0437\u0430\u0442\u0451\u0440\u0442\u0430. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b &#8212; 1 \u0413\u0431 \u043f\u043e\u0434 BOOT \u0440\u0430\u0437\u0434\u0435\u043b, \u0438 \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 &#8212; \u043f\u043e\u0434 ROOTFS. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u043f\u0430\u0431\u043e\u0442\u0443 \u0441 fdisk \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/losst.pro\/komanda-fdisk-v-linux#toc-4-sozdanie-tablicy-razdelov\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>. <\/p>\n<pre><code class=\"bash\">sudo fdisk \/dev\/sdb<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0432 fdisk \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b<\/p>\n<ul>\n<li>\n<p>o &#8212; \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 MBR<\/p>\n<\/li>\n<li>\n<p>n &#8212; \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b<\/p>\n<\/li>\n<li>\n<p>\u0442\u0438\u043f \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e primary (\u043f\u0440\u043e\u0441\u0442\u043e Enter)<\/p>\n<\/li>\n<li>\n<p>\u043d\u043e\u043c\u0435\u0440 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e (\u043f\u0440\u043e\u0441\u0442\u043e Enter)<\/p>\n<\/li>\n<li>\n<p>\u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0435\u043a\u0442\u043e\u0440 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e (\u0434\u0430\u043b\u0435\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0431\u0443\u0434\u0443 \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0447\u0435\u0440\u043a)<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0441\u0435\u043a\u0442\u043e\u0440 \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u043f\u0438\u0448\u0435\u043c: +1G<\/p>\n<p><strong><em><u>\u041f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b \u0441\u043e\u0437\u0434\u0430\u043d, \u0438\u0434\u0451\u043c \u0434\u0430\u043b\u044c\u0448\u0435<\/u><\/em><\/strong><\/p>\n<\/li>\n<li>\n<p>n<\/p>\n<\/li>\n<li>\n<p>&#8212;<\/p>\n<\/li>\n<li>\n<p>&#8212;<\/p>\n<\/li>\n<li>\n<p>&#8212;<\/p>\n<p><strong><em><u>\u0412\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437\u0434\u0435\u043b \u0442\u043e\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d<\/u><\/em><\/strong><\/p>\n<\/li>\n<li>\n<p>t &#8212; \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0438\u043f \u0440\u0430\u0437\u0434\u0435\u043b\u0430<\/p>\n<\/li>\n<li>\n<p>1 &#8212; \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b<\/p>\n<\/li>\n<li>\n<p>c &#8212; W95 FAT32 (LBA)<\/p>\n<\/li>\n<li>\n<p>p &#8212; \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c<\/p>\n<\/li>\n<li>\n<p>w &#8212; \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0430 \u0434\u0438\u0441\u043a \u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2f3\/0c3\/e78\/2f30c3e78dbef29704559b651faca076.png\" width=\"729\" height=\"710\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2f3\/0c3\/e78\/2f30c3e78dbef29704559b651faca076.png\"\/><\/figure>\n<p><strong>P.S.<\/strong> \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0447\u0430\u0441\u0442\u044c, \u043f\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u0442\u0438\u043f\u0430 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u043d\u0430 W95 FAT32 (LBA) \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430 &#8212; \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a Linux. \u042f \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0435\u0451 \u0442\u0430\u043a\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441 SD-\u043a\u0430\u0440\u0442\u044b. \u041f\u043e \u0442\u043e\u0439 \u0436\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0431\u044b\u043b\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 MBR &#8212; zynqmpus+ \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u0438 \u0441 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u043e\u0439 GPT. \u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f, \u0435\u0441\u043b\u0438 u-boot \u0443 \u043d\u0430\u0441 \u043d\u0430 QSPI, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u0432 GPT \u0438 \u043d\u0435 \u043f\u0430\u0440\u0438\u0442\u044c\u0441\u044f \u043e \u0442\u0438\u043f\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432. <\/p>\n<h3>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u0445 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c RootFS<\/h3>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0424\u0421 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0434\u0438\u0441\u043a\u0435<\/p>\n<pre><code>sudo mkfs.vfat -F 32 -n BOOT \/dev\/sdb1  sudo mkfs.ext4 -L ROOTFS \/dev\/sdb2  <\/code><\/pre>\n<p>\u0417\u0430\u043f\u0438\u0448\u0435\u043c \u043e\u0431\u0440\u0430\u0437 rootfs \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437\u0434\u0435\u043b. \u041f\u043e\u0441\u043b\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u044b dd, label \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u043c\u043e\u0436\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\u0441\u044f \u043d\u0430 rootfs, \u044f \u043b\u0438\u0447\u043d\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u043b, \u043e\u0434\u043d\u0430\u043a\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u0430 \u0432 \u043d\u0438\u0436\u043d\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 \u043c\u043e\u0433\u0443\u0442 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445, \u043f\u043e\u044d\u0442\u043e\u043c\u0443  \u043b\u0443\u0447\u0448\u0435 \u044d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c.<\/p>\n<pre><code>sudo dd if=\/home\/lazba\/alynx-linux\/output\/rootfs.ext4 \\ of=\/dev\/sdb2 status=progress  sudo e2label \/dev\/sdb2 ROOTFS <\/code><\/pre>\n<h3>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 BOOT \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u043c. <\/h3>\n<p>\u041f\u0440\u0438\u043c\u043e\u043d\u0442\u0438\u0440\u0443\u0435\u043c boot <\/p>\n<pre><code class=\"bash\">sudo mkdir -p \/mnt\/boot sudo mount \/dev\/sdb1 \/mnt\/boot<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0451\u043c \u0442\u0443\u0434\u0430 \u043e\u0431\u0440\u0430\u0437 \u044f\u0434\u0440\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 DTB<\/p>\n<pre><code>sudo cp $HOME\/alynx-linux\/output\/Image \/mnt\/boot\/Image sudo cp $HOME\/alynx-linux\/output\/alynx-linux.dtb \/mnt\/boot\/alynx-linux.dtb<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u0444\u0430\u0439\u043b <code>extlinux\/extlinux.conf<\/code> \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f.<\/p>\n<pre><code>label linux   kernel \/Image   devicetree \/alynx-linux.dtb   append console=\"ttyPS0,115200\" root=\"\/dev\/mmcblk0p2\" rw rootwait<\/code><\/pre>\n<p> \u042d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f U-Boot, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0442\u043e\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0443.<\/p>\n<h2>\u041f\u0435\u0440\u0432\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a<\/h2>\n<p>\u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u0430\u0440\u0442\u0443 \u0432 \u043f\u043b\u0430\u0442\u0443 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c. \u0412\u0438\u0434\u0438\u043c \u043c\u0435\u043d\u044e U-Boot, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u0438 \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u043d\u0430\u0445\u043e\u0434\u0438\u0442 extlinux.conf \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u044f\u0434\u0440\u043e. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ffb\/b90\/79f\/ffbb9079f561a53a5ceee05952966f79.png\" width=\"1530\" height=\"487\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ffb\/b90\/79f\/ffbb9079f561a53a5ceee05952966f79.png\"\/><\/figure>\n<p>\u041f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0437\u0430\u0445\u043e\u0434\u0438\u043c \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043f\u043e\u0434 \u0441\u0432\u043e\u0438\u043c \u043b\u043e\u0433\u0438\u043d\u043e\u043c\/\u043f\u0430\u0440\u043e\u043b\u0435\u043c (root\/root).<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/96d\/09f\/b07\/96d09fb07a0a97352c9b06dfe55e06bd.png\" width=\"1127\" height=\"372\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/96d\/09f\/b07\/96d09fb07a0a97352c9b06dfe55e06bd.png\"\/><\/figure>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u043f\u043b\u0430\u0442\u0443 \u043a \u0440\u043e\u0443\u0442\u0435\u0440\u0443 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u043e SSH. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u0437\u043d\u0430\u0435\u043c \u0441\u0432\u043e\u0439 IP \u0430\u0434\u0440\u0435\u0441 (\u043f\u043e\u043a\u0430 \u0435\u0449\u0451 \u0432 UART \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435)<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/048\/577\/2ee\/0485772eeeab9d9a8aeb0098aff5c308.png\" width=\"774\" height=\"300\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/048\/577\/2ee\/0485772eeeab9d9a8aeb0098aff5c308.png\"\/><\/figure>\n<p>\u0412\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0440\u043e\u0443\u0442\u0435\u0440 \u0432\u044b\u0434\u0430\u043b \u043d\u0430\u043c \u0430\u0434\u0440\u0435\u0441 192.168.3.122. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043f\u043e SSH \u0441 \u0445\u043e\u0441\u0442\u0430<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/efd\/dc4\/c11\/efddc4c1143a380fb4d6a2ef51de0d0a.png\" width=\"808\" height=\"352\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/efd\/dc4\/c11\/efddc4c1143a380fb4d6a2ef51de0d0a.png\"\/><\/figure>\n<p>\u041d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u041f\u041a \u0438 Zynqmp \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e iperf\/iperf3. \u041b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u0440\u043e \u0442\u043e <a href=\"https:\/\/losst.pro\/kak-polzovatsya-iperf\" rel=\"noopener noreferrer nofollow\">\u043a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f iperf<\/a>. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ad4\/044\/65d\/ad404465d9d50c06a3770b8295943ecd.png\" width=\"1923\" height=\"681\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ad4\/044\/65d\/ad404465d9d50c06a3770b8295943ecd.png\"\/><\/figure>\n<h2>\u0417\u0430\u043f\u0443\u0441\u043a bitstream \u0438\u0437 linux<\/h2>\n<p>\u041d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0443\u044e \u043c\u0438\u0433\u0430\u043b\u043a\u0443 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/p>\n<pre><code class=\"vhdl\">module led_blink(     input sys_clk_p,     input sys_clk_n,     output reg led,     output reg led2     );  IBUFDS #( .DIFF_TERM(\"FALSE\") ) ibufds_inst (     .I(sys_clk_p),     .IB(sys_clk_n),     .O(internal_clk) );  reg [31:0]count;  always @(posedge internal_clk) begin     if(count == 200000000) begin \/\/Time is up         count &lt;= 0;             \/\/Reset count register         led &lt;= ~led;            \/\/Toggle led (in each second)         led2 &lt;= ~led2;            \/\/Toggle led (in each second)     end else begin         count &lt;= count + 1;     \/\/Counts 200MHz clock         end end   endmodule<\/code><\/pre>\n<p>Constraints \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435<\/p>\n<pre><code class=\"vhdl\">#pl led set_property -dict { PACKAGE_PIN AM13   IOSTANDARD LVCMOS33 } [get_ports { led }]; set_property -dict { PACKAGE_PIN AP12   IOSTANDARD LVCMOS33 } [get_ports { led2 }]; # pl clock set_property IOSTANDARD DIFF_SSTL12 [get_ports sys_clk_p] set_property PACKAGE_PIN AL8 [get_ports sys_clk_p] set_property PACKAGE_PIN AL7 [get_ports sys_clk_n] set_property IOSTANDARD DIFF_SSTL12 [get_ports sys_clk_n] create_clock -period 5.000 -name sys_clk_clk_p -waveform {0.000 2.500} [get_ports sys_clk_p]<\/code><\/pre>\n<p>\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0431\u0438\u0442\u0441\u0442\u0440\u0438\u043c, \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0435\u043c \u041f\u041b\u0418\u0421, \u0441\u043c\u043e\u0442\u0440\u0438\u043c &#8212; \u043c\u0438\u0433\u0430\u0435\u0442, \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0435 (\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442).<\/p>\n<p>\u0421\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0431\u0438\u0442\u0441\u0442\u0440\u0438\u043c \u0432 \u043f\u0430\u043f\u043a\u0443 alynx-linux\/output \u0441 \u0438\u043c\u0435\u043d\u0435\u043c firmware.bit. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0444\u043b\u0435\u0448\u043a\u0443 \u043a \u041f\u041a \u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u043d\u0430\u0448 \u0444\u0430\u0439\u043b \u0432 \/lib\/firmware<\/p>\n<pre><code class=\"bash\">sudo mkdir -p \/run\/media\/lazba\/ROOTFS\/lib\/firmware sudo cp $HOME\/alynx-linux\/output\/firmware.bit \/run\/media\/lazba\/ROOTFS\/lib\/firmware\/firmware.bit<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u043b\u0430\u0442\u0443 \u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 bit \u0444\u0430\u0439\u043b\u0430 \u0438\u0437 fpga-manager<\/p>\n<pre><code>echo 0 > \/sys\/class\/fpga_manager\/fpga0\/flags echo firmware.bit > \/sys\/class\/fpga_manager\/fpga0\/firmware<\/code><\/pre>\n<p>\u041d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u043c\u0438\u0433\u0430\u044e\u0449\u0438\u0439 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434! \ud83d\ude42<\/p>\n<p>P.S. \u044d\u0442\u043e \u043d\u0435 \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 PL-\u0447\u0430\u0441\u0442\u0438 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435, \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 <a href=\"https:\/\/xilinx-wiki.atlassian.net\/wiki\/spaces\/A\/pages\/18841645\/Solution+Zynq+PL+Programming+With+FPGA+Manager\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0430 Xilinx Wiki<\/a>.<\/p>\n<h2>\u041f\u043e\u0434\u0432\u0435\u0434\u0451\u043c \u0438\u0442\u043e\u0433\u0438<\/h2>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b<\/p>\n<ul>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u043b\u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u0438\u0437\u0430\u0439\u043d Zynqmp US+ \u0432 Vivado<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0442\u0435\u0441\u0442 \u043f\u0430\u043c\u044f\u0442\u0438<\/p>\n<\/li>\n<li>\n<p>\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 FSBL \u0438 PMU Firmware<\/p>\n<\/li>\n<li>\n<p>\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0438 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438 device-tree \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0431\u0440\u0430\u043b\u0438 ARM Trusted Firmware<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0431\u0440\u0430\u043b\u0438 U-Boot<\/p>\n<\/li>\n<li>\n<p>\u0421\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0441 \u043f\u043b\u0430\u0442\u044b boot.bin \u0441 fsbl+pmufw+atf+uboot<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0431\u0440\u0430\u043b\u0438 \u044f\u0434\u0440\u043e Linux<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0431\u0440\u0430\u043b\u0438 \u043e\u0431\u0440\u0430\u0437 RootFS<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0438 SD-\u043a\u0430\u0440\u0442\u0443 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u041e\u0421<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043b\u0438\u043b\u0438 bitstream \u0432 PL-\u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0439 \u041e\u0421<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0451, \u0443\u0432\u0438\u0434\u0438\u043c\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445!<\/strong><\/p>\n<p>\u0417\u0430\u0445\u043e\u0434\u0438\u0442\u0435 \u043a \u043d\u0430\u043c \u0432 \u0447\u0430\u0442\u0435\u043a: <a href=\"https:\/\/t.me\/fpgasystems_embd\" rel=\"noopener noreferrer nofollow\">https:\/\/t.me\/fpgasystems_embd<\/a><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/382\/46c\/176\/38246c176cb78662677f623d24b8202d.png\" width=\"1919\" height=\"1030\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/382\/46c\/176\/38246c176cb78662677f623d24b8202d.png\"\/><\/figure>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/805171\/\"> https:\/\/habr.com\/ru\/articles\/805171\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 Linux \u043d\u0430 Zynq UltraScale+ MPSoC\u0441. \u041a\u0430\u0436\u0434\u044b\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0431\u0440\u0430\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0443\u0442\u0438\u043b\u0438\u0442. \u0421\u0442\u0430\u0442\u044c\u044f \u0440\u0430\u0437\u0431\u0438\u0442\u0430 \u043d\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0448\u0430\u0433 \u0437\u0430 \u0448\u0430\u0433\u043e\u043c \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044f\u0442 \u0432\u0430\u0441 \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435.<\/p>\n<p>\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441\u0440\u0430\u0437\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e buildroot \u0438 Yocto\/petalinux. <\/p>\n<figure class=\"full-width\"><\/figure>\n<h2>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0434\u043b\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f<\/h2>\n<ol>\n<li>\n<p>\u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u043e \u0441\u0431\u043e\u0440\u043a\u0435 <a href=\"https:\/\/xilinx-wiki.atlassian.net\/wiki\/spaces\/A\/pages\/460653138\/Xilinx+Open+Source+Linux\" rel=\"noopener noreferrer nofollow\">Linux from scratch<\/a> \u043d\u0430 Xilinx Wiki<\/p>\n<\/li>\n<li>\n<p>\u0412\u0438\u0434\u0435\u043e\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u043e \u0441\u0431\u043e\u0440\u043a\u0435 Embedded Linux \u043e\u0442 \u0410\u043b\u0435\u043a\u0441\u0435\u044f \u0420\u043e\u0441\u0442\u043e\u0432\u0430 \u0434\u043b\u044f Advanced Engineering Radar Systems: <a href=\"https:\/\/www.youtube.com\/watch?v=Xn5cs9uh8gc\" rel=\"noopener noreferrer nofollow\">\u0447\u0430\u0441\u0442\u044c 1<\/a>, <a href=\"https:\/\/www.youtube.com\/watch?v=PxGK7h_DYfE\" rel=\"noopener noreferrer nofollow\">\u0447\u0430\u0441\u0442\u044c 2<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.youtube.com\/playlist?list=PLWMg96mLREOekNVh8-3U5JZv2NTCLMbP5\" rel=\"noopener noreferrer nofollow\">\u041f\u043b\u0435\u0439\u043b\u0438\u0441\u0442<\/a> FPGA Systems \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u044b\u0439 Zynq<\/p>\n<\/li>\n<\/ol>\n<h2>\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f<\/p>\n<ol>\n<li>\n<p>Xilinx Vivado<\/p>\n<\/li>\n<li>\n<p>Xilinx Vitis (\u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Vitis Unified IDE \u0438\u0437 \u0432\u0435\u0440\u0441\u0438\u0438 2023.2.2, \u043e\u0434\u043d\u0430\u043a\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0438 \u0432 Vitis Classic \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439)<\/p>\n<\/li>\n<li>\n<p>\u041c\u0430\u0448\u0438\u043d\u0430 \u0441 Linux (\u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c Xilinx \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Windows, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0432 VM\/dualboot\/etc, \u0442\u0430\u043a \u0438 \u0441\u0440\u0430\u0437\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438\u0437 Linux)<\/p>\n<\/li>\n<li>\n<p>Xilinx Device Tree Generator (<a href=\"https:\/\/github.com\/Xilinx\/device-tree-xlnx\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/Xilinx\/device-tree-xlnx<\/a>)<\/p>\n<\/li>\n<li>\n<p>Xilinx ATF (<a href=\"https:\/\/github.com\/Xilinx\/arm-trusted-firmware\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/Xilinx\/arm-trusted-firmware<\/a>) <\/p>\n<\/li>\n<li>\n<p>Xilinx U-boot (<a href=\"https:\/\/github.com\/Xilinx\/u-boot-xlnx\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/Xilinx\/u-boot-xlnx<\/a>)<\/p>\n<\/li>\n<li>\n<p>Xilinx Linux Kernel (<a href=\"https:\/\/github.com\/Xilinx\/linux-xlnx\/\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/Xilinx\/linux-xlnx\/<\/a>)<\/p>\n<\/li>\n<li>\n<p>Buildroot (git:\/\/git.buildroot.net\/buildroot)<\/p>\n<\/li>\n<li>\n<p>aarch64-linux-gnu-gcc<\/p>\n<\/li>\n<li>\n<p>u-boot tools<\/p>\n<\/li>\n<\/ol>\n<h2>\u042d\u0442\u0430\u043f\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/h2>\n<p>\u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Linux \u043d\u0430 zynqmp \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b<\/p>\n<ol>\n<li>\n<p>FSBL<\/p>\n<\/li>\n<li>\n<p>PMU frimware<\/p>\n<\/li>\n<li>\n<p>ARM trusted firmware<\/p>\n<\/li>\n<li>\n<p>Bitstream<\/p>\n<\/li>\n<li>\n<p>U-Boot<\/p>\n<\/li>\n<li>\n<p>Devicetree<\/p>\n<\/li>\n<li>\n<p>Linux Kernel<\/p>\n<\/li>\n<li>\n<p>Linux RootFS<\/p>\n<\/li>\n<\/ol>\n<h2>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 Vivado<\/h2>\n<p>\u042f \u0431\u0443\u0434\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043f\u043b\u0430\u0442\u043e\u0439 Alinx AXU9EGB. <br \/><a href=\"https:\/\/alinx.com\/public\/upload\/file\/AXU9EGB_User_Manual.pdf\" rel=\"noopener noreferrer nofollow\">AXU9EGB User Manual<\/a><br \/>SCH \u0434\u043b\u044f SoM <a href=\"https:\/\/github.com\/alinxalinx\/AXU9EG_AXU15EG\/blob\/master\/hardware\/Schematics\/ACU9EG_SCH.pdf\" rel=\"noopener noreferrer nofollow\">ACU9EG_SCH<\/a><\/p>\n<p>\u041f\u0440\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u0431\u0443\u0434\u0443 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043c \u043d\u0430 <a href=\"https:\/\/github.com\/alinxalinx\/AXU9EG_AXU15EG\" rel=\"noopener noreferrer nofollow\">GitHub<\/a>.<\/p>\n<p>\u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u0445\u0435\u043c\u0435, \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d XCZU9EG-FFVB1156-2-I. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0435\u043a\u0442 \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043d\u0435\u0451. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0430 \u0441\u0445\u0435\u043c\u0443 Block Design \u0431\u043b\u043e\u043a Zynq UltraScale \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c.<\/p>\n<h3>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0430\u043c\u044f\u0442\u0438<\/h3>\n<p>\u041d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b 4 \u0447\u0438\u043f\u0430 MT40A512M16LY-062E \u043e\u0442 Micron, \u043e\u0431\u0449\u0438\u043c \u043e\u0431\u044a\u0451\u043c\u043e\u043c 4 \u0413\u0411. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u0432\u0438\u0434\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 Zynq \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043e\u0442 083E, \u0442.\u0435. \u0447\u0430\u0441\u0442\u043e\u0442\u0443 1200 \u041c\u0413\u0446, Speed Bin 2400P \u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 16-16-16. \u0423\u0441\u0442\u043d\u043e\u0432\u0438\u043c \u043f\u0440\u0435\u0441\u0435\u0442 MT40A256M16LY_083E, \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u043c \u0451\u043c\u043a\u043e\u0441\u0442\u044c DRAM \u043d\u0430 8192 \u041c\u0431\u0438\u0442 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0438\u0442 \u0432 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0435 \u0440\u044f\u0434\u043e\u0432 \u043d\u0430 16. \u041e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435<\/p>\n<figure class=\"full-width\"><\/figure>\n<h2>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f<\/h2>\n<ul>\n<li>\n<p>QSPI \u0434\u043b\u044f FSBL, PMUFW, ATF \u0438 U-Boot<\/p>\n<\/li>\n<li>\n<p>SD \u0434\u043b\u044f Linux<\/p>\n<\/li>\n<li>\n<p>UART \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043e\u043c\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 U-Boot<\/p>\n<\/li>\n<li>\n<p>GEM (Ethernet) \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f Linux \u0447\u0435\u0440\u0435\u0437 ssh<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u0441\u0435\u0439\u0447\u0430\u0441 AXI Master \u0448\u0438\u043d\u0443<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u0441\u0445\u0435\u043c\u0443 \u0442\u0430\u043a\u0436\u0435 \u0431\u043b\u043e\u043a Processing System Reset.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0418\u0442\u043e\u0433\u043e\u0432\u0430\u044f \u0441\u0445\u0435\u043c\u0430<\/strong><\/p>\n<figure class=\"full-width\"><\/figure>\n<details class=\"spoiler\">\n<summary>\u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 tcl \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u043c\u0430\u043d\u0434\u044b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"json\">create_bd_cell -type ip -vlnv xilinx.com:ip:zynq_ultra_ps_e zynq_ultra_ps_e_0  apply_bd_automation -rule xilinx.com:bd_rule:zynq_ultra_ps_e -config {apply_board_preset \"1\" }  [get_bd_cells zynq_ultra_ps_e_0]  set_property -dict [list \\ CONFIG.SUBPRESET1 {DDR4_MICRON_MT40A256M16GE_083E} \\ CONFIG.PSU__DDRC__DEVICE_CAPACITY {8192 MBits} \\ CONFIG.PSU__DDRC__ROW_ADDR_COUNT {16} \\ CONFIG.PSU__DDRC__CWL {16} \\ CONFIG.PSU__UART0__PERIPHERAL__ENABLE {1} \\ CONFIG.PSU__UART0__PERIPHERAL__IO {MIO 42 .. 43} \\ CONFIG.PSU__QSPI__PERIPHERAL__ENABLE {1} \\ CONFIG.PSU__QSPI__PERIPHERAL__DATA_MODE {x4} \\ CONFIG.PSU__QSPI__PERIPHERAL__IO {MIO 0 .. 12} \\ CONFIG.PSU__QSPI__PERIPHERAL__MODE {Dual Parallel} \\ CONFIG.PSU__QSPI__GRP_FBCLK__ENABLE {1} \\ CONFIG.PSU__SD0__PERIPHERAL__ENABLE {1} \\ CONFIG.PSU__SD0__DATA_TRANSFER_MODE {8Bit} \\ CONFIG.PSU__SD0__PERIPHERAL__IO {MIO 13 .. 22} \\ CONFIG.PSU__SD0__SLOT_TYPE {eMMC} \\ CONFIG.PSU__SD0__RESET__ENABLE {1} \\ CONFIG.PSU__SD1__PERIPHERAL__ENABLE {1} \\ CONFIG.PSU__SD1__PERIPHERAL__IO {MIO 46 .. 51} \\ CONFIG.PSU__SD1__GRP_CD__ENABLE {1} \\ CONFIG.PSU__SD1__SLOT_TYPE {SD 2.0} \\ CONFIG.PSU__TTC0__PERIPHERAL__ENABLE {1} \\ CONFIG.PSU__TTC1__PERIPHERAL__ENABLE {1} \\ CONFIG.PSU__TTC2__PERIPHERAL__ENABLE {1} \\ CONFIG.PSU__TTC3__PERIPHERAL__ENABLE {1} \\ CONFIG.PSU_BANK_0_IO_STANDARD {LVCMOS18} \\ CONFIG.PSU_BANK_1_IO_STANDARD {LVCMOS18} \\ CONFIG.PSU_BANK_2_IO_STANDARD {LVCMOS18} \\ CONFIG.PSU__USE__M_AXI_GP0 {0} \\ CONFIG.PSU__USE__M_AXI_GP2 {0} \\ \\ ] [get_bd_cells zynq_ultra_ps_e_0]  # Create instance: proc_sys_reset_0, and set properties set proc_sys_reset_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:proc_sys_reset:5.0 proc_sys_reset_0 ]  # Create port connections connect_bd_net -net zynq_ultra_ps_e_0_pl_clk0 [get_bd_pins zynq_ultra_ps_e_0\/pl_clk0] [get_bd_pins proc_sys_reset_0\/slowest_sync_clk] connect_bd_net -net zynq_ultra_ps_e_0_pl_resetn0 [get_bd_pins zynq_ultra_ps_e_0\/pl_resetn0] [get_bd_pins proc_sys_reset_0\/ext_reset_in]  validate_bd_design save_bd_design<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c bitstream (Design SourcesCreate HDL WrapperGenerate Output ProductsRun Synthesis Run Implementation  Generate Bitstream) \u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0438\u0442\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e \u0432 XSA \u0444\u0430\u0439\u043b \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439 (File Export Export Hardware Include Bitstream). \u041d\u0430 \u044d\u0442\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u0430 \u0432 Vivado \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u0430, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 Vitis.<\/p>\n<h2>FSBL \u0438 PMUFW<\/h2>\n<p>\u042f \u0431\u0443\u0434\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 Vitis Unified IDE, \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0434\u043b\u044f Xilinx SDK \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 <a href=\"https:\/\/habr.com\/ru\/articles\/565368\/\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>, \u0430 \u0434\u043b\u044f Vitis Classic &#8212; \u0432 <a href=\"https:\/\/www.youtube.com\/watch?v=339hpNuRZDo\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u043c \u0432\u0438\u0434\u0435\u043e<\/a>.<\/p>\n<p>\u0412 \u043f\u0430\u043f\u043a\u0435 Vivado \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e vitis_projects \u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0432 \u043d\u0435\u0451 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 <code>.xsa<\/code> \u0444\u0430\u0439\u043b, \u044d\u0442\u0430 \u043f\u0430\u043f\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 Workspace \u0434\u043b\u044f Vitis. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c Vitis \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Open Workspace. <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0435 File->New Component->Platform. \u041d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c Hardware Design \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u043d\u0430\u0448 xsa-\u0444\u0430\u0439\u043b.<\/p>\n<p>\u041d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0432\u044b\u0431\u043e\u0440\u0430 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0432 Output->%project_name%->sw->boot \u0431\u0443\u0434\u0443\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c <code>fsbl.elf<\/code> \u0438 <code>pmufw.elf<\/code>. <\/p>\n<figure class=\"\"><\/figure>\n<p>\u042d\u0442\u0438 \u0444\u0430\u0439\u043b\u044b \u043f\u0440\u0438\u0433\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430\u043c \u043f\u043e\u0437\u0436\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f FSBL \u0438 PMU FW \u0438\u0437 XSCT <\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f XSCT \u0438\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u0438, \u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 PATH \u043f\u0430\u043f\u043a\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0443 \u0432\u0430\u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d Vitis. <\/p>\n<p>\u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b gensoft.tcl<\/p>\n<pre><code>hsi::open_hw_design -name alynx-linux simple_linux_wrapper.xsa set sw_pmufw [hsi::create_sw_design pmufw -app zynqmp_pmufw -proc psu_pmu_0] common::set_property -name APP_COMPILER_FLAGS -value \"-DENABLE_EM\" -objects $sw_pmufw hsi::generate_app -sw $sw_pmufw -compile -dir boot\/pmufw -app zynqmp_pmufw set sw_fsbl [hsi::create_sw_design fsbl -app zynqmp_fsbl -proc psu_cortexa53_0] common::set_property -name APP_COMPILER_FLAGS -value \"-DFSBL_NAND_EXCLUDE_VAL=1\" -objects $sw_fsbl common::set_property -name APP_COMPILER_FLAGS -value \"-DFSBL_FSBL_SECURE_EXCLUDE_VAL=1\" -objects $sw_fsbl common::set_property -name APP_COMPILER_FLAGS -value \"-DFSBL_FSBL_BS_EXCLUDE_VAL=1\" -objects $sw_fsbl # common::set_property -name APP_COMPILER_FLAGS -value \"-DFSBL_FSBL_DEBUG=1\" -objects $sw_fsbl hsi::generate_app -sw $sw_fsbl -compile -dir boot\/fsbl -app zynqmp_fsbl hsi::close_hw_design -name alynx-linux<\/code><\/pre>\n<p>\u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438<\/p>\n<pre><code>xsct -eval source gensoft.tcl<\/code><\/pre>\n<p>\u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u0432 \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0430\u0445 \u0444\u0430\u0439\u043b\u044b &#171;executable.elf&#187; (\u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u043e \u0434\u0430\u043b\u0435\u0435)<\/p>\n<pre><code>find . -type f -name \"*.elf\" | grep pmufw | xargs -i cp {} ~\/alynx-linux\/output\/pmufw.elf  find . -type f -name \"*.elf\" | grep fsbl | xargs -i cp {} ~\/alynx-linux\/output\/fsbl.elf<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>Zynq MP DRAM tests<\/h2>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0432\u0435\u0440\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a DDR. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. <\/p>\n<p>Examples  Zynq MP DRAM tests  Create Application Component from Template<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>Build, Run<\/p>\n<p>\u0414\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043f\u043b\u0430\u0442\u043e\u0439 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a\u0430\u044f-\u043d\u0438\u0431\u0443\u0434\u044c \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 COM-\u043f\u043e\u0440\u0442\u0430. \u042f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <strong>Serial Monitor<\/strong> \u0434\u043b\u044f VSCode, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u043e \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c. \u0414\u043b\u044f Windows \u043c\u043e\u0433\u0443 \u043f\u043e\u0441\u043e\u0432\u0435\u0442\u043e\u0432\u0430\u0442\u044c Terminal 1.9b<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0447\u0435\u0440\u0435\u0437 UART-\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b<\/figcaption><\/div>\n<\/figure>\n<h2>Device Tree<\/h2>\n<p>\u0421\u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 device-tree-xlnx \u043d\u0430 \u0441\u0432\u043e\u0439 \u041f\u041a \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043d\u0430 \u0432\u0435\u0442\u043a\u0443 \u0441 \u0440\u0435\u043b\u0438\u0437\u043e\u043c, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0432\u0435\u0440\u0441\u0438\u0438 Xilinx IDE. <\/p>\n<pre><code class=\"bash\">git clone https:\/\/github.com\/Xilinx\/device-tree-xlnx.git cd device-tree-xlnx git branch -r git checkout xlnx_rel_v2023.2<\/code><\/pre>\n<p>\u0421\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c xsa-\u0444\u0430\u0439\u043b \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443. \u0412 \u043d\u0435\u0439 \u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 tcl-\u0444\u0430\u0439\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f<\/p>\n<pre><code class=\"bash\">hsi::open_hw_design simple_linux_wrapper.xsa hsi::set_repo_path \/home\/lazba\/device-tree-xlnx\/ hsi::create_sw_design device-tree -os device_tree -proc psu_cortexa53_0 hsi::generate_target -dir my_dts hsi::close_hw_design [hsi current_hw_design]<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b(cmd\/powershell\/bash\/etc) \u0432 \u044d\u0442\u043e\u0439 \u043f\u0430\u043f\u043a\u0435. \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f XSCT \u0438\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u0438, \u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 PATH \u043f\u0430\u043f\u043a\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0443 \u0432\u0430\u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d Vitis. <\/p>\n<pre><code>xsct -eval source gendt.tcl<\/code><\/pre>\n<p><strong>P.S.<\/strong> \u0442\u0430\u043a\u0436\u0435 devicetree \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0438\u0437 platform-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 Vitis, \u043e\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e \u043f\u0443\u0442\u0438 <code>\/export\/platform\/hw\/sdt<\/code>,- \u043d\u0443\u0436\u043d\u0430 \u0432\u0441\u044f \u043f\u0430\u043f\u043a\u0430. <\/p>\n<figure class=\"\"><\/figure>\n<h2>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0435<\/h2>\n<p>\u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u0432 Linux. \u041f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f (\u043e\u0434\u043d\u0430\u043a\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432 \u0432\u0430\u0448\u0435\u043c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0445\u0432\u0430\u0442\u0430\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0445, \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438)<\/p>\n<ul>\n<li>\n<p>git<\/p>\n<\/li>\n<li>\n<p>base-devel (\u043d\u0430 Debian-based \u044d\u0442\u043e build-essential)<\/p>\n<\/li>\n<li>\n<p>gcc, g++<\/p>\n<\/li>\n<li>\n<p>aarch64-linux-gnu-gcc (\u0438 \u043f\u0440\u043e\u0447\u0438\u0435)<\/p>\n<\/li>\n<li>\n<p>make<\/p>\n<\/li>\n<li>\n<p>binutils<\/p>\n<\/li>\n<li>\n<p>python, python-setuptools<\/p>\n<\/li>\n<li>\n<p>bison<\/p>\n<\/li>\n<li>\n<p>flex<\/p>\n<\/li>\n<li>\n<p>swig<\/p>\n<\/li>\n<li>\n<p>tar<\/p>\n<\/li>\n<li>\n<p>cpio<\/p>\n<\/li>\n<li>\n<p>zip, unzip<\/p>\n<\/li>\n<li>\n<p>patch<\/p>\n<\/li>\n<li>\n<p>dtc <\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0441\u043b\u0438 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 \u043d\u0435\u0442 dtc \u0438 aarc64-gcc, \u043d\u0435 \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0439\u0442\u0435, \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e\u0431 \u044d\u0442\u043e\u043c \u0434\u0430\u043b\u0435\u0435.<\/p>\n<p>\u0412 Home \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e alynx-linux \u043f\u043e\u0434 \u043d\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442. \u0412 \u043d\u0435\u0439 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u043e\u0434\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438<\/p>\n<ul>\n<li>\n<p>output &#8212; \u043f\u043e\u0434 \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438 \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0444\u0430\u0439\u043b\u044b<\/p>\n<\/li>\n<li>\n<p>devicetree<\/p>\n<\/li>\n<li>\n<p>uboot &#8212; \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 U-Boot<\/p>\n<\/li>\n<li>\n<p>kernel &#8212; \u0434\u043b\u044f \u044f\u0434\u0440\u0430<\/p>\n<\/li>\n<li>\n<p>buildroot &#8212; \u0434\u043b\u044f RootFS<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"bash\">mkdir -p ~\/alynx-linux\/output mkdir -p ~\/alynx-linux\/uboot mkdir -p ~\/alynx-linux\/kernel mkdir -p ~\/alynx-linux\/buildroot mkdir -p ~\/alynx-linux\/devicetree<\/code><\/pre>\n<p>\u0421\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c .bit-\u0444\u0430\u0439\u043b \u0432 \u043f\u0430\u043f\u043a\u0443 hw, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432 \u043f\u0430\u043f\u043a\u0435 \u0441 xsa-\u0444\u0430\u0439\u043b\u043e\u043c (XSCT) \u043b\u0438\u0431\u043e \u0432 \u043f\u0430\u043f\u043a\u0435 Output\/platform\/hw (Vitis).<\/p>\n<p>\u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c, \u043a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 Xilinx SDK, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0443 \u0432\u0430\u0441 \u0432 Windows, \u044f \u0431\u0443\u0434\u0443 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c, \u0447\u0442\u043e \u0432\u044b \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043d\u0430 Windows-\u043c\u0430\u0448\u0438\u043d\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u0431\u044b\u043b\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 Linux. <\/p>\n<h2>Device Tree (\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435)<\/h2>\n<p>Xilinx DTG \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u043b \u0432 \u043f\u0430\u043f\u043a\u0443 my_dts \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u043c, \u043e\u0434\u043d\u0430\u043a\u043e, \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u043b\u0438\u0448\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435<\/p>\n<ul>\n<li>\n<p>system.dts &#8212; \u0444\u0430\u0439\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, MAC-\u0430\u0434\u0440\u0435\u0441 \u0434\u043b\u044f Ethernet<\/p>\n<\/li>\n<li>\n<p>pcw.dtsi &#8212; \u0444\u0430\u0439\u043b \u0441 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0432 Vivado<\/p>\n<\/li>\n<li>\n<p>system-top.dts &#8212; \u0444\u0430\u0439\u043b \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435<\/p>\n<\/li>\n<\/ul>\n<p>\u0424\u0430\u0439\u043b\u044b zynqmp.dtsi \u0438<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-372670","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/372670","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=372670"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/372670\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=372670"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=372670"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=372670"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}