{"id":455486,"date":"2025-04-11T03:00:04","date_gmt":"2025-04-11T03:00:04","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=455486"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=455486","title":{"rendered":"<span>\u041f\u0440\u0438\u0447\u0435\u0441\u044b\u0432\u0430\u0435\u043c VSCode \u0434\u043e \u043d\u0435\u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e\u0439 Yocto IDE \u0438\u043b\u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e\u0434\u043d\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0438<\/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<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/0m\/6i\/xw\/0m6ixw8xy0_7wdkr1xw1smlfui0.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/0m\/6i\/xw\/0m6ixw8xy0_7wdkr1xw1smlfui0.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/0m\/6i\/xw\/0m6ixw8xy0_7wdkr1xw1smlfui0.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0418\u0434\u0435\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0434\u0440\u0443\u0433 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0443 \u043c\u0435\u043d\u044f \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 2025 \u0433\u043e\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u044f \u043f\u0440\u043e\u0441\u043d\u0443\u043b\u0441\u044f 2 \u044f\u043d\u0432\u0430\u0440\u044f \u0441 \u0442\u044f\u0436\u0435\u043b\u043e\u0439 \u0433\u043e\u043b\u043e\u0432\u043e\u0439 \u0438 \u0432\u0434\u0440\u0443\u0433 \u043f\u043e\u043d\u044f\u043b \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0435, \u0447\u0442\u043e \u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u0434\u043b\u044f \u0432\u0430\u0441, \u043a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043c\u043e\u044f \u0434\u043e\u0447\u044c \u041c\u0430\u0440\u0433\u0430\u0440\u0438\u0442\u0430 \u00ab\u0434\u043b\u044f \u0442\u0435\u0445 \u043a\u0442\u043e \u0432 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435\u00bb. \u041a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043c\u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u043d\u0430 Raspberry Pi4, \u043d\u0443 \u0438\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u0444\u0435\u0440\u043c\u0430 docker(\u043e\u0432).<\/p>\n<p>\u042f \u043e\u0431\u043e\u0436\u0430\u044e Visual Studio Code, \u043d\u043e \u043c\u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0447\u0442\u043e\u0431\u044b \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0435\u0433\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445, \u0442\u0430\u0441\u043a\u0430\u0445 \u0438 launch(\u0430\u0445) \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 json \u0438 \u044f \u0440\u0435\u0448\u0438\u043b \u044d\u0442\u043e \u043e\u0431\u043e\u0439\u0442\u0438. \u041f\u043e \u0441\u0443\u0442\u0438 \u043c\u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u0430\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432 \u043c\u0435\u043d\u044e, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u043e\u0447\u0435\u043d\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043d\u0443\u0436\u043d\u044b\u0435 \u043c\u043d\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 Yocto Project \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0445 (Embedded) \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a.<\/p>\n<p>\u041d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0435 \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e\u0435 \u043c\u043d\u0435 \u043c\u0435\u043d\u044e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439, \u0430 \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u0447\u0435\u043c \u043f\u0430\u043d\u0435\u043b\u044c Status Bar \u0432 VSCode \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c, \u0431\u043b\u0438\u0436\u0435 \u043d\u0435\u043a\u0443\u0434\u0430 \u0438 \u044f \u043d\u0430\u0447\u0430\u043b \u0438\u0441\u043a\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439 \u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043b\u0430\u0433\u0438\u043d \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u044d\u0442\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c. \u0421\u0442\u0430\u0442\u044c\u044f \u0438\u0437 \u0441\u0435\u0440\u0438\u0438 DockerFace.<\/p>\n<p>\u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438:<\/p>\n<ul>\n<li>\n<p>\u0412\u044b\u0431\u043e\u0440 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043b\u044f VSCode<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0438\u0441\u044c Yocto \u043e\u0431\u0440\u0430\u0437\u0430 \u043d\u0430 SD \u043a\u0430\u0440\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438<\/p>\n<\/li>\n<li>\n<p>\u0421\u0431\u043e\u0440\u043a\u0430 Yocto \u043e\u0431\u0440\u0430\u0437\u0430 \u0432 Docker(\u0435)<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438\u0435\u043c \u0411\u0430\u0440\u043e\u043d\u0430 \u041c\u044e\u043d\u0445\u0433\u0430\u0443\u0437\u0435\u043d\u0430 \u0434\u043b\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f bash<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a Yocto \u043e\u0431\u0440\u0430\u0437\u0430 RPi \u043f\u043e\u0434 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u043e\u0439 Qemu<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 DemoMinimal \u043e\u0431\u0440\u0430\u0437\u0430 \u0438\u0437 Yocto \u043a\u043e\u0440\u043e\u0431\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c Buster Slim(\u0430) \u0434\u043b\u044f \u043a\u0440\u0443\u0442\u043e\u0439 \u0440\u0430\u0437\u0431\u043e\u0440\u043a\u0435 \u0432 \u0414\u043e\u043a\u0435\u0440\u0435<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 DHCP, TFTP \u0438 NFS \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 core-image-minimal (wic) \u043e\u0431\u0440\u0430\u0437\u0430 \u043d\u0430 rpi4 \u043f\u043e \u0441\u0435\u0442\u0438<\/p>\n<\/li>\n<li>\n<p>\u0421\u0435\u0442\u0435\u0432\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 Raspbian \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u044b Raspberry Pi4<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u0441\u0431\u043e\u0440\u043a\u0438, \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 ISO \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 Ubuntu \u043f\u043e \u0441\u0435\u0442\u0438<\/p>\n<\/li>\n<li>\n<p>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 Yocto \u043b\u043e\u0433\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Deepseek<\/p>\n<\/li>\n<li>\n<p>\u0441\u0430\u043c\u0430\u044f \u043a\u0440\u0430\u0441\u0438\u0432\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430 \u0434\u043b\u044f \u0434\u0440\u0443\u0437\u0435\u0439 \u042d\u043b\u0432\u0438\u0441\u0430<\/p>\n<\/li>\n<li>\n<p>\u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0438 \u0432 VSCode \u043f\u0430\u0440\u043e\u0432\u043e\u0437\u0438\u043a\u043e\u043c<\/p>\n<\/li>\n<\/ul>\n<h3>\u0412\u044b\u0431\u043e\u0440 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043b\u044f VSCode<\/h3>\n<p>\u041f\u043b\u0430\u0433\u0438\u043d \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f &#171;VsCode Action Buttons&#187; (seunlanlege.action-buttons), \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e \u0447\u0442\u043e \u043c\u043d\u0435 \u0438 \u0431\u044b\u043b\u043e \u043d\u0443\u0436\u043d\u043e, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u043b\u044e\u0431\u043e\u0439 bash \u043a\u043e\u0434 \u043f\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044e \u043a\u043d\u043e\u043f\u043a\u0438.<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u0441\u0430\u043c VSCode (\u0435\u0441\u043b\u0438 \u043e\u043d \u0443 \u0432\u0430\u0441 \u0435\u0449\u0435 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d), \u0442\u0430\u043a \u0438 \u0441\u0430\u043c \u043f\u043b\u0430\u0433\u0438\u043d:<\/p>\n<pre><code class=\"bash\">sudo apt install -y snap sudo snap install --classic code code --install-extension seunlanlege.action-buttons <\/code><\/pre>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 <code>.vscode\/settings.json<\/code> \u0438 \u0432\u044b\u0437\u043e\u0432 shell \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"json\">... \"actionButtons\": {     \"reloadButton\": null,     \"loadNpmCommands\": false,     \"commands\": [         {             \"name\": \"Button-1\",             \"singleInstance\": true,             \"color\": \"#007fff\",             \"command\": \".vscode\/script1.sh\",         },         {             \"name\": \"Button-N\",             \"singleInstance\": true,             \"color\": \"#ff007f\",             \"command\": \".vscode\/scriptN.sh\",         }     ] } <\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e bash \u043a\u043e\u0434, \u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438 \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u043c\u043e\u0436\u043d\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u043a\u043e\u043c\u0443 \u043a\u0430\u043a \u043d\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f.<\/p>\n<h3>\u0417\u0430\u043f\u0438\u0441\u044c Yocto \u043e\u0431\u0440\u0430\u0437\u0430 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438<\/h3>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0432 Yocto \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 microSDHC \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u0443\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u0430\u0440\u0442\u0440\u0438\u0434\u0435\u0440\u0430. \u042d\u0442\u0430 SD \u043a\u0430\u0440\u0442\u0430 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 Raspberry Pi 4, \u0438 \u043f\u043b\u0430\u0442\u0430 \u0441 \u043d\u0435\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0412\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u043c\u043d\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u043e\u0431\u0449\u0435\u043c \u0444\u0430\u0439\u043b\u0435 <code>.vscode\/yo\/func.sh<\/code><br \/> \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044f \u0431\u0443\u0434\u0443 \u043e\u0442\u0442\u0443\u0434\u0430.<\/p>\n<p>\u0418\u0442\u0430\u043a \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043e\u0431\u0440\u0430\u0437\u043e\u0432, \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 SD, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b YO_M \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 &#171;build\/conf\/local.conf&#187;, \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 dd \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>YO_EXT<\/code>.<\/p>\n<pre><code class=\"lua\">YO_EXT=\".wic .rootfs.wic .rootfs.wic.bz2 .rpi-sdimg .wic.bz2\"  find_name_image() {   IFS=$' '   YO_IMAGE_NAME=\"\"   if [ -z \"$YO_M\" ]; then echo \"MACHINE variable not found\"; return -1; fi    for ext in ${YO_EXT}; do       local find_str=$(ls -1 ${YO_DIR_IMAGE}\/${YO_M} | grep \"${YO_M}${ext}$\")       if [ -z \"$find_str\" ]; then           echo \"NAME IMAGE ${YO_M}${ext} is not found =&gt; ${YO_DIR_IMAGE}\/${YO_M}\"       else           YO_IMAGE_NAME=\"$YO_IMAGE_NAME $find_str\"           echo \"find: YO_IMAGE_NAME=$YO_IMAGE_NAME\"       fi   done    [[ -z \"${YO_IMAGE_NAME}\" ]] &amp;&amp; return 1   YO_IMAGE_NAME=$(echo \"$YO_IMAGE_NAME\" | tr '\\n' ' ')   return 0 } <\/code><\/pre>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>find_name_image<\/code> \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>YO_IMAGE_NAME<\/code>, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b \u043f\u0440\u043e\u0431\u0435\u043b\u0430\u043c\u0438.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043c\u043d\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0439\u0442\u0438 SD \u043a\u0430\u0440\u0442\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u0443\u044e \u0447\u0435\u0440\u0435\u0437 usb \u0438\u043b\u0438 \u043a\u0430\u0440\u0442\u0440\u0438\u0434\u0435\u0440, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0432\u044b\u0432\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0447\u0442\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0443\u0436\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 dd \u0432\u0441\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u0438 \u0442\u0443\u0442 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043d\u0435 \u043e\u0448\u0438\u0431\u0438\u0442\u044c\u0441\u044f.<\/p>\n<pre><code class=\"lua\">find_sd_card() {   IFS=$'\\n'   LI_DISK=\"\"   echo \"Disk devices in the system:\"   echo \"\u250c\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\"   echo \"Name | Type | Size | Model                        |\"   echo \"\u251c\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\"   lsblk -o NAME,TYPE,SIZE,MODEL | grep -E 'disk|mmcblk|sd.*'   echo \"\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\"   local bn;   local list=$(ls -l \/dev\/disk\/by-id\/usb* 2&gt;\/dev\/null)   if [ $? -eq 0 ]; then       for i in $list; do           bn=$(basename $i)           if ! echo \"$bn\" | grep -q \"[0-9]\"; then LI_DISK+=\"$bn \"; fi       done   fi    list=$(ls -l \/dev\/disk\/by-id\/mmc* 2&gt;\/dev\/null)   if [ $? -eq 0 ]; then       for i in $list; do           bn=$(basename $i)           if ! echo \"$bn\" | grep -q \"p[0-9]\"; then LI_DISK+=\"$bn \"; fi       done   fi   if [ -n \"$LI_DISK\" ]; then echo \"LIST SD card =&gt; $LI_DISK\"; return 0;   else echo \"SD card not found =&gt; exiting ...\"; return 1; fi } <\/code><\/pre>\n<p>\u0412\u0441\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>LI_DISK<\/code> \u0438 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>select_dd_info<\/code> \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0443\u043d\u043a\u0442\u043e\u0432 \u043e\u0442 1 \u0434\u043e N, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b dd \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0437\u0430 \u0438 \u0434\u0438\u0441\u043a\u0430.<\/p>\n<p>\u0414\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0442\u043e \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c, \u0432\u0432\u0435\u0441\u0442\u0438 \u043d\u043e\u043c\u0435\u0440 \u0438 \u043d\u0430\u0436\u0430\u0442\u044c \u0432\u0432\u043e\u0434, \u0437\u0430\u043f\u0438\u0441\u044c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b sudo, \u0442\u0430\u043a \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0431\u043e\u0440\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043e\u0431\u0440\u0430\u0437\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u0430\u0440\u0445\u0438\u0432\u0435 bz2, \u0442\u043e \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u043e\u0431\u0440\u0430\u0437 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d.<\/p>\n<pre><code class=\"lua\">select_dd_info() {   local j=1   IFS=$' '   for i in $LI_DISK; do       for image in $YO_IMAGE_NAME; do           if echo \"$image\" | grep -q \"\\.wic\\.bz2\"; then               echo \"$j) bzip2 -dc $image | sudo dd of=\/dev\/$i bs=1M\"           else               echo \"$j) dd if=$image of=\/dev\/$i bs=1M\"           fi           j=$((j+1))       done   done    echo -n \"=&gt; Select the option. WARNING: the data on the disk will be DELETED:\"   read SEL    j=1   for i in $LI_DISK; do       for image in $YO_IMAGE_NAME; do           if [ $SEL == \"$j\" ]; then               mount | grep \"^\/dev\/$i\" | awk '{print $1}' | xargs -r sudo umount               if echo \"$image\" | grep -q \"\\.wic\\.bz2\"; then                   echo \"bzip2 -dc $image | sudo dd of=\/dev\/$i bs=1M\"                   bzip2 -dc $image | sudo dd of=\/dev\/$i bs=1M; sync               else                   echo \"sudo dd if=$image of=\/dev\/$i bs=1M\"                   sudo dd if=$image of=\/dev\/$i bs=1M; sync               fi           fi           j=$((j+1))       done   done } <\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u0434\u0438\u0441\u043a\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b, \u0442\u043e \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b. \u0414\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>sdcard_deploy<\/code>:<\/p>\n<pre><code class=\"lua\">sdcard_deploy() {   if find_sd_card &amp;&amp; find_name_image; then       cd \"${YO_DIR_IMAGE}\/${YO_M}\"       select_dd_info   fi } <\/code><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0437 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 .vscode\/yo\/func.sh \u043b\u0443\u0447\u0448\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043a\u043e\u043b\u043e\u0442\u0438\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438 \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c, \u043e\u043d\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f:<\/p>\n<p>\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0435, \u0442\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435, \u0442\u043e \u0435\u0449\u0435 \u043a\u0430\u043a\u0438\u0435 \u043d\u0438\u0431\u0443\u0434\u044c \u0438 \u0442\u043e \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043d\u043e\u0441\u0438\u0442\u044c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442, \u043f\u043e\u043a\u0430\u0436\u0443 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 <code>.vscode\/yo\/sdcard_deploy.sh<\/code>:<\/p>\n<pre><code class=\"lua\">#!\/bin\/bash this_f=$(readlink -f \"$0\") this_d=$(dirname \"$this_f\") source $this_d\/func.sh sdcard_deploy <\/code><\/pre>\n<p>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043e\u0434\u0438\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e\u0434\u043d\u0443 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f.<\/p>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u044b readlink \u0438 dirname \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0445 \u043f\u0443\u0442\u0435\u0439 \u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0438 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430, \u0430 \u0442\u043e \u0441 \u043f\u0443\u0442\u044f\u043c\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u0443\u0442\u0430\u043d\u0438\u0446\u0430, \u0430 \u0442\u0430\u043a \u043f\u0443\u0442\u044c \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439 \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435.<\/p>\n<p>\u0418\u0442\u0430\u043a \u043d\u0430\u0436\u0430\u043b \u043a\u043d\u043e\u043f\u043a\u0443 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f VSCode, \u0432\u044b\u0431\u0440\u0430\u043b \u043e\u0431\u0440\u0430\u0437 \u0438 \u0434\u0438\u0441\u043a \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438, \u0438 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0441\u044f <code>.vscode\/settings.json<\/code>:<\/p>\n<pre><code class=\"json\">{     \"name\": \"SDcardDeploy\",     \"singleInstance\": true,     \"color\": \"#007fff\",     \"command\": \"cd .vscode\/yo; .\/sdcard_deploy.sh\", } <\/code><\/pre>\n<p>\u0414\u043b\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430 &#171;seunlanlege.action-buttons&#187; \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f .vscode, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u043c\u0435\u043d\u044f\u044e \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u044d\u0442\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u0430, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043e\u043a \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 &#171;YO_R&#187;<br \/> \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0435\u0441\u043b\u0438 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0443\u043a\u0430\u0437\u0430\u043d \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e:<\/p>\n<pre><code class=\"lua\"># \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 yocto, \u0433\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u0442\u0430\u043b\u043e\u0433 build, \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 YO_R=\"..\/..\" find_setup_env() {     if [ -f \"${YO_R}\/setup-environment\" ]; then return 0; fi     local tmp_path=\"..\"     for i in {1..7}; do         if [ -f \"${tmp_path}\/setup-environment\" ]; then             export YO_R=$(realpath \"${tmp_path}\")             return 0;         fi         tmp_path=\"${tmp_path}\/..\"     done     echo \"error: 'setup-environment' not found in parent directories, env: 'YO_R' wrong path ...\"; return 1 } find_setup_env <\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 <code>func.sh<\/code>, \u0437\u0434\u0435\u0441\u044c \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u044e \u0444\u0430\u0439\u043b\u0430 <code>setup-environment<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0435\u0440\u0435\u0432\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432 \u0441\u0431\u043e\u0440\u043a\u0438, \u0442\u0430\u043a\u043e\u0433\u043e \u043a\u0430\u043a:<\/p>\n<pre><code class=\"dart\"> \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 Yocto     \u251c\u2500\u2500 build     \u251c\u2500\u2500 downloads     \u251c\u2500\u2500 setup-environment     \u251c\u2500\u2500 shell.sh     \u2514\u2500\u2500 sources <\/code><\/pre>\n<h3>\u0421\u0431\u043e\u0440\u043a\u0430 Yocto \u043e\u0431\u0440\u0430\u0437\u0430 \u0432 Docker<\/h3>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f VSCode, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u0430, \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 Yocto \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0442\u0443\u043b\u0447\u0435\u0439\u043d\u0430\u043c\u0438. \u0414\u043b\u044f \u0441\u0442\u0430\u0440\u044b\u0445 Yocto \u0432\u0435\u0442\u043e\u043a, \u043d\u0430 \u043d\u043e\u0432\u044b\u0445 \u0445\u043e\u0441\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 Ubuntu 24.04 \u0432\u0441\u0435 \u043d\u0443 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043e\u0442\u0432\u0430\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0442\u043e gcc \u043d\u0435 \u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u0442\u043e \u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a, \u0430 \u0442\u043e \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 cmake \u043d\u0443 \u0441\u043e\u0432\u0441\u0435\u043c \u0441\u0442\u0430\u0440\u044b\u0439 \u043d\u0443\u0436\u0435\u043d.<\/p>\n<p>\u041a\u0430\u043a \u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u0430\u044f \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u044f \u0445\u043e\u0447\u0443 \u0441\u043e\u0431\u0440\u0430\u0442\u044c, \u0441\u0435\u0439\u0447\u0430\u0441 \u0431\u0435\u0437 Docker(\u0430) \u0432 \u0441\u0442\u0430\u0440\u044b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u043b\u0443\u0447\u0448\u0435 \u0438 \u043d\u0435 \u0441\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u043f\u0440\u044f\u043c\u043e \u0431\u0435\u0434\u0430, \u0431\u0435\u0434\u0430.<\/p>\n<p>\u0414\u0430 \u0438 \u0432 \u043d\u043e\u0432\u044b\u0435 \u0442\u043e\u0436\u0435, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u0432\u0441\u0435\u0433\u0434\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0434\u043e\u043a\u0435\u0440\u0435.<\/p>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0434\u043e\u043a\u0435\u0440\u0430(\u043e\u0432) \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <code>.vscode\/yo\/docker<\/code>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 =&gt; <code>ubuntu_22_04<\/code><\/p>\n<pre><code class=\"dart\">    yo     \u251c\u2500\u2500 build_image.sh     \u251c\u2500\u2500 docker     \u2502\u00a0\u00a0 \u2514\u2500\u2500 ubuntu_22_04     \u2502\u00a0\u00a0     \u251c\u2500\u2500 Dockerfile     \u2502\u00a0\u00a0     \u2514\u2500\u2500 Makefile     \u251c\u2500\u2500 func.sh     \u2514\u2500\u2500 sdcard_deploy.sh <\/code><\/pre>\n<p>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 Dockerfile \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"dart\">FROM ubuntu:22.04 # \u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u044e Ubuntu \u0432 \u043d\u0435\u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u2014 \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 ENV DEBIAN_FRONTEND noninteractive  # WARNING PUB = \"\/mnt\/data\" # RUN mkdir -p \"\/mnt\/data\"  # \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e mc \u0438 \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e locales RUN apt update &amp;&amp; \\     apt -y install \\     mc language-pack-ru \\     &amp;&amp; locale-gen ru_RU.UTF-8 en_US.UTF-8 \\     &amp;&amp; dpkg-reconfigure locales  RUN echo \"LANG=ru_RU.UTF-8\" &gt;&gt; \/etc\/default\/locale \\     &amp;&amp; echo \"LANGUAGE=ru_RU.UTF-8\" &gt;&gt; \/etc\/default\/locale  ENV LANG ru_RU.UTF-8 ENV LANGUAGE ru_RU.UTF-8  # \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 Yocto Project RUNapt -y install \\     gawk wget git-core diffstat unzip texinfo gcc-multilib \\     build-essential chrpath socat libsdl1.2-dev xterm cpio lz4 zstd  RUN echo 'root:docker' | chpasswd  # \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0434\u043e\u043a\u0435\u0440\u0430 RUN groupadd -f --gid 1000 user \\     &amp;&amp; useradd --uid 1000 --gid user --shell \/bin\/bash --create-home user  # \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u043c\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443 \u043f\u043e\u0434 root (hash \u0441\u043c. docker ps) # docker exec -u 0 -it hash_container bash USER user WORKDIR \/mnt\/data ENTRYPOINT [\".\/shell.sh\"] <\/code><\/pre>\n<p>\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c user, \u043d\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u0430\u043a\u0438\u0445 \u043b\u0438\u0431\u043e \u043d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u043e\u043b\u044c &#171;docker&#187; \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f root \u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u043c\u0443 \u043a \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443 \u043f\u043e\u0434 root(\u043e\u043c), \u0438 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0439 \u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0430\u043a\u0435\u0442, \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b apt.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u0438\u0445 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 Dockerfile \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0430 \u043a\u0430\u043a \u043e\u0442\u043b\u0430\u0434\u0438\u043b\u0438 \u043e\u0431\u0440\u0430\u0437 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u0441\u0442\u0440\u043e\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u043e\u043a\u0435\u0440\u043e\u043c \u0441\u043b\u0443\u0436\u0438\u0442 Makefile:<\/p>\n<pre><code class=\"dart\">IMAGE = ubuntu_22_04 # \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043f\u0443\u0442\u044c \u043d\u0430\u0434\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u0444\u0430\u0439\u043b\u0435 Dockerfile \u0441\u043c. \u043c\u0435\u0442\u043a\u0443 WARNING PUB   = \"\/mnt\/data\" # \u043f\u0443\u0442\u044c \u0434\u043e \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u0441\u0431\u043e\u0440\u043a\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0444\u0430\u0439\u043b setup-environment (\u0435\u0441\u043b\u0438 \u043d\u0435 \u0437\u0430\u0434\u0430\u043d, \u0442\u043e ..\/docker) YO_R ?= $(shell dirname $(shell pwd))  run:     docker run --rm \\     --network=host \\     -v ${HOME}\/.ssh:\/home\/user\/.ssh:z \\     -v $(shell readlink -f ${SSH_AUTH_SOCK}):\/ssh-agent -e SSH_AUTH_SOCK=\/ssh-agent \\     --cap-add=cap_sys_admin --cap-add=cap_net_admin --cap-add=cap_net_raw \\     --mount type=bind,source=${YO_R},target=${PUB} -ti ${IMAGE}  run_detach:     docker run --rm \\     --network=host \\     -v ${HOME}\/.ssh:\/home\/user\/.ssh:z \\     -v $(shell readlink -f ${SSH_AUTH_SOCK}):\/ssh-agent -e SSH_AUTH_SOCK=\/ssh-agent \\     --cap-add=cap_sys_admin --cap-add=cap_net_admin --cap-add=cap_net_raw \\     --mount type=bind,source=${YO_R},target=${PUB} -d -t ${IMAGE}  build:     docker build -f Dockerfile --tag ${IMAGE} .  rebuild:     docker build -f Dockerfile --no-cache --tag ${IMAGE} .  install:     sudo apt-get update     sudo apt-get install -y docker.io  # \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, clean-all-container:     sudo docker rm $(docker ps -qa)  .PHONY: run build clean-all-container <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0434\u043e\u043a\u0435\u0440 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cmake\">docker run --rm \\   --network=host \\   -v ${HOME}\/.ssh:\/home\/user\/.ssh:z \\   -v $(shell readlink -f ${SSH_AUTH_SOCK}):\/ssh-agent \\   -e SSH_AUTH_SOCK=\/ssh-agent \\   --cap-add=cap_sys_admin \\   --cap-add=cap_net_admin \\   --cap-add=cap_net_raw \\   --mount type=bind,source=${YO_R},target=${PUB} \\   -d -t ${IMAGE} <\/code><\/pre>\n<p>\u0433\u0434\u0435<\/p>\n<ul>\n<li>\n<p>rm \u2014 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b;<\/p>\n<\/li>\n<li>\n<p>network=host \u2014 c \u044d\u0442\u0438\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0435\u0442\u0435\u0432\u0430\u044f \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c; \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u043c \u0438 \u0445\u043e\u0441\u0442\u043e\u043c Docker \u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0445\u043e\u0441\u0442\u0430, \u044d\u0442\u043e \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0434\u043b\u044f \u0445\u043e\u0441\u0442\u0430, \u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0439 \u0438\u0437\u0432\u043d\u0435 \u0441\u0435\u0442\u0438;<\/p>\n<\/li>\n<li>\n<p>v (\u0438\u043b\u0438 &#8212;volume) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f docker(\u043e\u043c) \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u043e \u043e\u0442 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u0442\u043e\u043c \u043d\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u043a\u0435\u0442 c ssh-agent(\u043e\u043c) \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u043c \u043d\u0430 \u0445\u043e\u0441\u0442\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b ssh \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430;<\/p>\n<\/li>\n<li>\n<p>cap-add=cap_net_admin \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0440\u0430\u0437\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b;<\/p>\n<\/li>\n<li>\n<p>cap-add=cap_sys_admin \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443 \u043d\u0430\u0431\u043e\u0440 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439, \u043d\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c;<\/p>\n<\/li>\n<li>\n<p>cap-add=cap_net_raw \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u044f \u0434\u0430\u044e\u0449\u0430\u044f \u043f\u0440\u0430\u0432\u043e \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 RAW \u0438 PACKET \u0441\u043e\u043a\u0435\u0442\u043e\u0432 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u0430 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 ICMP \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435;<\/p>\n<\/li>\n<li>\n<p>mount \u043e\u043f\u0446\u0438\u044f \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 yocto \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u0442\u0430\u043b\u043e\u0433 build, \u043e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u0441\u0431\u043e\u0440\u043a\u0438, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u0435\u0441\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0445\u043e\u0441\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u044d\u0442\u0438\u043c \u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e \u0442\u043e, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0441\u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0438 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u0430 \u0432 \u043d\u043e\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430\u0445. \u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u044b yocto (setup-environment), \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0436\u0435\u0441\u0442\u043a\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u0445 \u0438 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0442\u043e\u0447\u043a\u0438 \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f PUB \/mnt\/data \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043f\u0443\u0442\u0435\u0439 \u0441\u0431\u043e\u0440\u043a\u0438 \u0432 bitbake \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 (\u043d\u043e \u044d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441\u0431\u043e\u0440\u043a\u0438 yocto);<\/p>\n<\/li>\n<li>\n<p>d \u0437\u0430\u043f\u0443\u0441\u043a \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0432 \u0444\u043e\u043d\u0435;<\/p>\n<\/li>\n<li>\n<p>t \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443 \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0441\u0435\u0432\u0434\u043e\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 tty, \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442 \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443, \u043f\u043e\u043a\u0430 \u0441\u0435\u0430\u043d\u0441 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c\u0441\u044f.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>IMAGE<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0438\u043c\u044f \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d.<\/p>\n<p>\u0422\u0430\u043a \u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0434\u043e\u043a\u0435\u0440 \u043d\u0435 \u0432 \u0444\u043e\u043d\u0435, \u0430 \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u043d\u0435\u043c \u043f\u043b\u0430\u043d\u0435, \u043d\u0443\u0436\u043d\u043e \u0443\u0431\u0440\u0430\u0442\u044c \u043e\u043f\u0446\u0438\u044e &#171;-d&#187; \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u043f\u0446\u0438\u044e &#171;-i&#187;, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f \u0432 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0439 \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u0432 Makefile \u044f \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e \u044d\u0442\u0438 \u0440\u0435\u0436\u0438\u043c\u044b:<\/p>\n<ul>\n<li>\n<p>make run &#8212; \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0441 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 yocto (\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 setup-environment);<\/p>\n<\/li>\n<li>\n<p>make run_detatch &#8212; \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0443\u0436\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u043c\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443, \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b bitbake, \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f shell \u0441\u0435\u0430\u043d\u0441 \u0441 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 setup-environment \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u0432 \u043d\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u044d\u0442\u0438\u043c Makefile(\u043b\u043e\u043c) \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0432 <code>.vscode\/yo\/func.sh<\/code> \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u043e\u0438\u0441\u043a\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0433\u043e Docker \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430:<\/p>\n<pre><code class=\"lua\">CONTAINER_ID=\"\" CONTAINER_NAME=\"\" DOCKER_DIR=\"\" find_docker_id() {     local id=$(docker ps | grep -m1 $CONTAINER_NAME | cut -d\" \" -f1)     if [ -z \"$id\" ]; then CONTAINER_ID=\"\"; return 1;     else CONTAINER_ID=$id; return 0; fi } <\/code><\/pre>\n<p>\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043e\u0439 <code>CONTAINER_ID<\/code><br \/> \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 start_cmd_docker():<\/p>\n<pre><code class=\"lua\">start_cmd_docker() {   if [ -z \"$1\" ]; then       echo \"error: start_cmd_docker(), arg1 command name empty ...\"       return 1;   fi    local cmd_args=$1   check_build_dir_exist   [[ $? -eq 2 ]] &amp;&amp; return 2    cd \"${DOCKER_DIR}\" &amp;&amp; make build   if ! find_docker_id; then       make run_detach       if ! find_docker_id; then           echo \"failed to start container =&gt; make run_detach ...\"           cd \"${CURDIR}\"           return 3;       fi   fi    echo \"docker exec -it ${CONTAINER_ID} bash -c \\\"$cmd_args\\\"\"   docker exec -it ${CONTAINER_ID} bash -c \"$cmd_args\"   cd \"${CURDIR}\" } <\/code><\/pre>\n<p>\u0433\u0434\u0435 \u043f\u0435\u0440\u0432\u044b\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043c\u0430\u043d\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c &#171;;&#187;<br \/> \u0417\u0434\u0435\u0441\u044c \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>DOCKER_DIR<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0434\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u0441 Makefile \u0434\u043b\u044f Docker(a).<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>start_cmd_docker<\/code> \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u0438\u0449\u0435\u0442 hash \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u043f\u043e \u0438\u043c\u0435\u043d\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 Makefile, \u0441\u043c. IMAGE=ubuntu_22_04, \u0438 \u0435\u0441\u043b\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043d\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d, \u0442\u043e \u043e\u043d \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432 \u0444\u043e\u043d\u043e\u0432\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 (make run_detach) \u0438 \u0434\u0430\u043b\u0435\u0435 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 docker exec \u0438\u0434\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a \u043d\u043e\u0432\u043e\u0433\u043e bash \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0432\u044b\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u043a\u043e\u043c\u0430\u043d\u0434 \u0441\u043c. <code>$cmd_args<\/code><\/p>\n<p>\u0415\u0441\u0442\u044c \u0435\u0449\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 build, \u0438 \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u043d\u0435\u0442, \u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b \u043d\u0435 \u0431\u0443\u0434\u0443\u0442.<\/p>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 shell \u0441\u043a\u0440\u0438\u043f\u0442\u0435 <code>.vscode\/yo\/build_image.sh<\/code><\/p>\n<pre><code class=\"lua\">  #!\/bin\/bash   this_f=$(readlink -f \"$0\")   this_d=$(dirname \"$this_f\")   source $this_d\/func.sh    cmd_runs=\"$1\"   DOCKER_DIR=\"docker\/ubuntu_22_04\"   CONTAINER_NAME=\"ubuntu_22_04\"   cmd_init=\"cd \/mnt\/data; MACHINE=$YO_M source .\/setup-environment build\"   start_cmd_docker \"${cmd_init}; ${cmd_runs}\" <\/code><\/pre>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0435 \u0447\u0430\u0441\u0442\u0438:<br \/> \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e: cmd_init \u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e cmd_run, \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043a\u043e\u043c\u0430\u043d\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 Yocto \u0441\u0440\u0435\u0434\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<ul>\n<li>\n<p>bitbake \u0438\u043c\u044f_\u043e\u0431\u0440\u0430\u0437\u0430_\u0434\u043b\u044f_\u0441\u0431\u043e\u0440\u043a\u0438;<\/p>\n<\/li>\n<li>\n<p>bibbake \u0438\u043c\u044f_\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e_\u0440\u0435\u0446\u0435\u043f\u0442\u0430_\u0434\u043b\u044f_\u0441\u0431\u043e\u0440\u043a\u0438;<\/p>\n<\/li>\n<li>\n<p>\u0438 \u0442.\u0434.<\/p>\n<\/li>\n<\/ul>\n<p>cmd_init \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442  \u0437\u0430\u043f\u0443\u0441\u043a Yocto \u0441\u0440\u0435\u0434\u044b \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u043e\u0434 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0443\u044e \u0446\u0435\u043b\u0435\u0432\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443, \u0441\u043a\u0440\u0438\u043f\u0442\u0443 setup-environment<br \/> \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b (\u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0438\u0437 build\/conf\/local.conf).<\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a \u0441\u043a\u0440\u0438\u043f\u0442\u0430 build_image.sh, \u043f\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044e \u043a\u043d\u043e\u043f\u043a\u0438 \u0432 status bar \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 <code>.vscode\/settings.json<\/code> \u0442\u0430\u043a:<\/p>\n<pre><code class=\"json\">... \"actionButtons\": {   \"reloadButton\": null,   \"loadNpmCommands\": false,   \"commands\": [     {       \"name\": \"Build\",       \"singleInstance\": true,       \"color\": \"#007fff\",       \"command\": \"cd .vscode\/yo; source func.sh; DOCKER_DIR='docker\/ubuntu_22_04' start_session_docker\",     },     {       \"name\": \"BuildImage\",       \"singleInstance\": true,       \"color\": \"#007fff\",       \"command\": \"cd .vscode\/yo; .\/build_image.sh 'bitbake core-image-minimal'\",     }   ] } <\/code><\/pre>\n<p>\u0442\u0430\u043a\u0436\u0435 \u043f\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044e \u043a\u043d\u043e\u043f\u043a\u0438 Build \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u0435\u0430\u043d\u0441 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 bitbake, \u0437\u0430 \u044d\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>start_session_docker<\/code>, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u0432 .vscode\/yo\/func.sh:<\/p>\n<pre><code class=\"lua\">  start_session_docker() {       cd \"${DOCKER_DIR}\"       make build &amp;&amp; make run       cd \"${CURDIR}\"   } <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0441\u0430\u043c \u0437\u0430\u043f\u0443\u0441\u043a shell \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043e\u043f\u0438\u0441\u0430\u043d \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0435:<br \/> Dockerfile: ENTRYPOINT [&#171;.\/shell.sh&#187;]<\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u043c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0432 VSCode, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0432\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0432\u0430\u0448\u0435\u0439 Yocto \u0441\u0431\u043e\u0440\u043a\u043e\u0439.<\/p>\n<h3>\u0417\u0430\u043f\u0443\u0441\u043a Yocto \u0441\u0431\u043e\u0440\u043a\u0438 \u0434\u043b\u044f Raspberry Pi \u043f\u043e\u0434 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u043e\u0439 Qemu<\/h3>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u0437\u0430\u0445\u043e\u0442\u0435\u043b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u043b\u044f VSCode \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 Yocto \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 \u0431\u0435\u0437 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043f\u043b\u0430\u0442\u044b Raspberry Pi, \u0438\u043d\u043e\u0433\u0434\u0430 \u043a\u043e\u0433\u0434\u0430 \u043f\u043b\u0430\u0442\u044b \u043d\u0435\u0442 \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u043d\u043e\u0432\u044c \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 Yocto \u043e\u0431\u0440\u0430\u0437, \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u043a\u0430\u0436\u0443 \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u044b Raspberry Pi 3, \u0442\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437.<\/p>\n<pre><code class=\"lua\">start_qemu_rpi3_64() {   local curdir=$(pwd)   local kernel=\"Image\"   local dtb=\"${IMAGE_DTB}\"   local image=\"${IMAGE_NAME}\"    cd \"${YO_R}\/${YO_M}\"   [[ -f \"${kernel}\" || -f \"${dtb}\" || -f \"${image}\" ]] &amp;&amp; return 1    size_mb=$(( ($(stat -c %s \"$image\") + 1048575) \/ 1048576 ))   thresholds=(64 128 256 512)    for threshold in \"${thresholds[@]}\"; do       if [ \"$size_mb\" -lt \"$threshold\" ]; then           qemu-img resize \"${image}\" \"${threshold}M\"       fi   done    qemu-system-aarch64 \\       -m 1G \\       -M raspi3b \\       -dtb ${dtb} \\       -kernel ${kernel} \\       -serial mon:stdio \\       -drive file=${image},format=raw,if=sd,readonly=off \\       -append \"console=ttyAMA0,115200 root=\/dev\/mmcblk0p2 rw earlycon=pl011,0x3f201000\" \\       -nographic   cd ${CURDIR} } <\/code><\/pre>\n<p>\u0433\u0434\u0435:<\/p>\n<p><code>qemu-system-aarch64<\/code> &#8212; \u0437\u0430\u043f\u0443\u0441\u043a Qemu \u0434\u043b\u044f 64 \u0431\u0438\u0442\u043d\u044b\u0445 \u0441\u0431\u043e\u0440\u043e\u043a, \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0432\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434 32 \u0431\u0438\u0442\u043d\u0443\u044e \u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0441\u0442\u044c, \u0442\u043e \u0432\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u0436\u0434\u0430\u0442\u044c \u043f\u0443\u0441\u0442\u043e\u0439 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b, \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u0443\u0441\u0442\u043e\u0439, \u044f\u0434\u0440\u043e \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u0438\u043a\u043d\u0435\u0442, \u0438 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043e\u043f\u0446\u0438\u044f:<\/p>\n<p><code>-d in_asm -D QEMU_log.txt<\/code> \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u0441\u0435\u0445 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u044d\u0442\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e, \u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0442\u043e \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0431 \u044d\u0442\u043e\u043c \u0443\u0437\u043d\u0430\u0442\u044c.<\/p>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:<\/p>\n<ul>\n<li>\n<p><code>m 1G<\/code> &#8212; \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438;<\/p>\n<\/li>\n<li>\n<p><code>M raspi3b<\/code> &#8212; \u0442\u0438\u043f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b Raspberry Pi 3;<\/p>\n<\/li>\n<li>\n<p><code>dtb bcm2837-rpi-3-b.dtb<\/code> &#8212; \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u043f\u043b\u0430\u0442\u044b, \u0431\u0435\u0437 \u043d\u0435\u0433\u043e \u044f\u0434\u0440\u043e \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 RPI3, DTB (Device Tree Blob) \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u043b\u0430\u0442\u044b: CPU, \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f, \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432;<\/p>\n<\/li>\n<li>\n<p><code>kernel Image<\/code> &#8212; \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0441 \u044f\u0434\u0440\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f;<\/p>\n<\/li>\n<li>\n<p><code>serial mon:stdio<\/code> \u0432 qemu \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0430\u043c \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430 \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0432\u0432\u043e\u0434-\u0432\u044b\u0432\u043e\u0434 (stdout) \u0432\u0430\u0448\u0435\u0439 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u0441\u0451, \u0447\u0442\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b, \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 Qemu, \u0438 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443 \u0447\u0435\u0440\u0435\u0437 \u0442\u043e\u0442 \u0436\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b;<\/p>\n<\/li>\n<li>\n<p>drive file=${image},format=raw,if=sd,readonly=off &#8212; \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u0438\u0441\u043a \u043a\u0430\u043a SD \u043a\u0430\u0440\u0442\u0443 \u0432 raw (\u0441\u044b\u0440\u043e\u043c) \u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u0441\u0430\u043c\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u0438 \u0434\u0432\u0430 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0438\u0441\u043a\u0430 (\u0441\u043c. <code>fdisk -l $image<\/code>), \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u043c \u0434\u0438\u0441\u043a\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u043e\u0440\u043d\u0435\u0432\u0430\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 rootfs, \u0434\u0438\u0441\u043a \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438;<\/p>\n<\/li>\n<li>\n<p>append &#171;console=ttyAMA0,115200 root=\/dev\/mmcblk0p2 rw earlycon=pl011,0x3f201000&#187; \u0437\u0434\u0435\u0441\u044c \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0430\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u044c: <\/p>\n<ul>\n<li>\n<p><code>console=ttyAMA0,115200<\/code> \u044d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u0430\u043d\u0430\u043b \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u044f\u0434\u0440\u043e\u043c Linux \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c;<\/p>\n<\/li>\n<li>\n<p><code>root=\/dev\/mmcblk0p2 rw<\/code> \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0430\u0437\u0434\u0435\u043b \u0431\u043b\u043e\u0447\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u0430\u043a \u043a\u043e\u0440\u043d\u0435\u0432\u0443\u044e \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0447\u0442\u0435\u043d\u0438\u0435\/\u0437\u0430\u043f\u0438\u0441\u044c;<\/p>\n<\/li>\n<li>\n<p><code>earlycon=&lt;\u0434\u0440\u0430\u0439\u0432\u0435\u0440&gt;,&lt;\u043e\u043f\u0446\u0438\u0438&gt;,&lt;\u0430\u0434\u0440\u0435\u0441&gt;<\/code> \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432, \u0444\u043e\u0440\u043c\u0430\u0442 \u0432\u0432\u043e\u0434\u0430: <\/p>\n<ul>\n<li>\n<p><code>pl011<\/code> \u2014 \u044d\u0442\u043e \u0442\u0438\u043f UART-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u0432 Raspberry Pi;<\/p>\n<\/li>\n<li>\n<p><code>\u0430\u0434\u0440\u0435\u0441 0x3f201000<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u0445\u043e\u0447\u0443 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u043d \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0436\u0435\u043b\u0435\u0437\u0430 Raspberry Pi, \u0432 \u043f\u043b\u0430\u0442\u0435 Raspberry Pi ttyAMA0 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c UART pl011;<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><code>nographic<\/code> &#8212; \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435, \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 Qemu, \u0432\u0441\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u043c\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0432\u044b\u0432\u043e\u0434 \u0438\u0437 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u041e\u0421) \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u044b\u043b\u0430 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430, \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0435\u0441\u0442\u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u043d\u0435\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f Qemu raspi3b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f DTB, \u0431\u043e\u043b\u0435\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 \u0441 \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0435\u0439: dtb=&#187;bcm2837-rpi-3-b.dtb&#187;.<\/p>\n<p>\u0415\u0449\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0446\u0438\u0438 \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438:<br \/> &#171;-d guest_errors,unimp,cpu_reset -D QEMU.log&#187;:<\/p>\n<p>\u041e\u043f\u0446\u0438\u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435:<\/p>\n<ul>\n<li>\n<p><code>guest_errors<\/code>: \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0438, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0435 \u0443 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b;<\/p>\n<\/li>\n<li>\n<p><code>unimp<\/code>: \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0438\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432 \u044d\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435;<\/p>\n<\/li>\n<li>\n<p><code>cpu_reset<\/code>: \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u0441 \u0441\u0431\u0440\u043e\u0441\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0435 Raspberry Pi 3 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f GPU, \u043e\u043d \u0442\u0430\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u0433\u043b\u0430\u0432\u043d\u044b\u0439, \u0430 CPU \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u044d\u0442\u043e\u0439 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438. \u041f\u0440\u043e\u043f\u0440\u0438\u0435\u0442\u0430\u0440\u043d\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a bootcode.bin \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 SD \u043a\u0430\u0440\u0442\u044b, \u0438 \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043e\u043d \u0433\u0440\u0443\u0437\u0438\u0442 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0434\u043b\u044f GPU =&gt; start.elf \u0438 fixup.dat (\u0438\u043b\u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043b\u0430\u0442\u044b start4.elf), \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0435\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0434\u043b\u044f GPU \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 <a href=\"https:\/\/www.raspberrypi.com\/documentation\/computers\/config_txt.html\" rel=\"noopener noreferrer nofollow\">config.txt<\/a><\/p>\n<p>\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u0434\u0440\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 CPU \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u044f\u0434\u0440\u0430.<\/p>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0432\u044b\u0448\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 &#171;qemu-system-aarch64 &#8230;&#187; \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0430\u0447\u0435:<\/p>\n<p>\u0412\u043e \u043f\u0435\u0440\u0432\u044b\u0445 \u043c\u044b \u0441 \u0432\u0430\u043c\u0438 \u0443\u0431\u0438\u0440\u0430\u0435\u043c GPU \u0438\u0437 \u044d\u0442\u043e\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0438, \u043c\u044b \u0435\u0433\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c, \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u044f \u043f\u0440\u044f\u043c\u0443\u044e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u044f\u0434\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 -kernel, \u0442\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0438 \u043c\u0435\u043d\u044c\u0448\u0435 \u043e\u0448\u0438\u0431\u043e\u043a, \u0443 \u043d\u0430\u0441 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 SD \u043a\u0430\u0440\u0442\u044b \u0441\u043c <code>-drive file=${image}<\/code> (\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u044d\u0442\u043e \/dev\/mmcblk0p1), \u043d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u0430\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0445 \u0438 \u0442\u0440\u0435\u0442\u0438\u0447\u043d\u044b\u0445 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u043e\u0432 \u043a\u0430\u043a \u0442\u043e \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0414\u0430 \u0438 \u043d\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043d\u0430 \u043a\u0430\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u044f GPU \u0432 QEmu \u0434\u043b\u044f <code>-M raspi3b<\/code>, \u0437\u0434\u0435\u0441\u044c \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u044f\u0434\u0440\u0443 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 dtb=&#187;bcm2837-rpi-3-b.dtb&#187;, \u0431\u0435\u0437 \u043d\u0435\u0433\u043e \u0442\u043e \u0436\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<p>\u042f\u0434\u0440\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043a\u043e\u0440\u043d\u0435\u0432\u0443\u044e \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u041e\u0421 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u043d\u0443\u0436\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044b <code>tty<\/code> \u0447\u0435\u0440\u0435\u0437 getty \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0441\u0435\u0441\u0441\u0438\u0438 \u0434\u043b\u044f \u0432\u0432\u043e\u0434\u0430\/\u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043b\u0438 <code>getty<\/code> c \u043d\u0430\u0448\u0438\u043c \u044d\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c <code>UART pl011 =&gt; \/dev\/ttyAMA0<\/code> \u0442\u043e \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 login: \u0438 \u0434\u0430\u043b\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043d\u044e\u0430\u043d\u0441:<br \/> \u0415\u0441\u043b\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0442\u044c \u0432 \u043e\u0431\u0440\u0430\u0437\u0435, \u0442\u043e <code>getty<\/code> \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 <code>\/dev\/ttyAMA0<\/code>, \u0438<br \/> \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043d\u0443\u0436\u043d\u043e \u0435\u0449\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c:<\/p>\n<pre><code class=\"dart\">  # \u044d\u0442\u043e \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 SysVinit,   # \u043f\u043e\u0434 Systemd \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u043e\u0441\u044c (\u0442\u0430\u043c \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443)   SERIAL_CONSOLES = \"115200;ttyAMA0\"   SERIAL_CONSOLES_CHECK = \"ttyAMA0:ttyS0\"    # \u044d\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f   # \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \/etc\/inittab \u0432 \u043e\u0431\u0440\u0430\u0437\u0435   # \u0438 \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u0443\u044e\u0442 getty \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u043e\u0440\u0442\u043e\u043c    # \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432   # \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0441\u043b\u043e\u044f \u0432 `local.conf` <\/code><\/pre>\n<p>\u0412\u043e\u043e\u0431\u0449\u0435\u043c \u0442\u043e, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0442\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0443\u0434\u043e\u0431\u043d\u043e, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0442\u043e\u0442 \u0436\u0435 core-image-minimal \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u043e\u0434 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443 Qemu, \u043d\u043e \u043c\u043e\u0436\u043d\u043e <code>\/etc\/inittab<\/code> \u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430 \u043b\u0435\u0442\u0443 \u0432 <code>core-image-minimal.wic<\/code>, \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e c \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>mount_raw_image<\/code> (\u0441\u043c. \u043d\u0438\u0436\u0435), \u0441\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c <code>umount_raw_image<\/code> (\u0431\u0443\u0434\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u044f \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044e).<\/p>\n<h3>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u0435\u043c\u0430 \u0411\u0430\u0440\u043e\u043d\u0430 \u041c\u044e\u043d\u0445\u0433\u0430\u0443\u0437\u0435\u043d\u0430 \u0434\u043b\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f bash<\/h3>\n<p>\u0417\u0434\u0435\u0441\u044c \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0441\u0430\u043c\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f bash \u043a\u043e\u0434\u0430:<\/p>\n<pre><code class=\"lua\">#!\/bin\/bash  help() {     local script_path=$(realpath \"${BASH_SOURCE[0]}\")     grep -A 1 \"^# \" \"${script_path}\" | sed 's\/--\/\/g' }  # \u041f\u0440\u0438\u043c\u0435\u0440 bash \u0444\u0443\u043d\u043a\u0446\u0438\u0438 1 (\u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432) example_bash_function1() {     echo \"example_bash_function1\" }  # \u041f\u0440\u0438\u043c\u0435\u0440 bash \u0444\u0443\u043d\u043a\u0446\u0438\u0438 2 (\u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432) example_bash_function2() {     echo \"example_bash_function2\" }  #\u041f\u0440\u0438\u043c\u0435\u0440 bash \u0444\u0443\u043d\u043a\u0446\u0438\u0438 3, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 example_bash_function3() {     echo \"example_bash_function3\" }  help <\/code><\/pre>\n<p>\u042d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0442\u0435\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c \u0447\u0435\u0440\u0435\u0437:<br \/> <code>source name_script.sh<\/code><br \/> \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u043f\u0430\u043b\u0430 \u0432 \u044d\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0437\u0430 \u043d\u0438\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u0435\u043b, \u0430 \u0435\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0431\u0440\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f, \u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0431\u0440\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0431\u0435\u043b.<\/p>\n<p>\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 bash \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0443\u0436\u0435 \u0432 help \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0443\u0442 \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u0438\u0434\u0443\u0442 \u043d\u0435 \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u0430 \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044b \u0445\u043e\u0442\u044f \u0431\u044b \u043d\u0430 4 \u043f\u0440\u043e\u0431\u0435\u043b\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u0445 \u044f \u043d\u0430\u0434\u0435\u044e\u0441\u044c \u0435\u0449\u0435 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043e\u0442\u043c\u0435\u043d\u044f\u043b.<\/p>\n<p>\u041a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<\/p>\n<ul>\n<li>\n<p>realpath \u2014 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0432 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439;<\/p>\n<\/li>\n<li>\n<p>grep -A 1 &#171;^# &#187; \u2014 \u0438\u0449\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0438, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441 &#171;# &#187; \u0438 \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443;<\/p>\n<\/li>\n<li>\n<p>sed &#8216;s\/&#8212;\/\/g&#8217; \u2014 \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0441\u0438\u043c\u0432\u043e\u043b\u044b &#8212;, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f grep.<\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0441\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438: \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432, \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u043e \u0438 \u0435\u0441\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043c\u043d\u043e\u0433\u043e, \u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043e.<\/p>\n<p>\u0418\u0437 \u0434\u043e\u0441\u0442\u043e\u0438\u043d\u0441\u0442\u0432: \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0443\u0434\u0443\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0438 \u043d\u0443\u0436\u043d\u043e \u0435\u0449\u0435 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u0435\u043c\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443, \u0430 \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u0434\u043d\u0443, \u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0434\u0443\u043c\u0430\u0442\u044c\u0441\u044f, \u0430 \u043d\u0443\u0436\u043d\u0430 \u043b\u0438 \u043e\u043d\u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u0442\u0430\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f?<\/p>\n<h3>\u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 YoctoDemoMinimal \u043e\u0431\u0440\u0430\u0437\u0430 \u0438\u0437 Yocto \u043a\u043e\u0440\u043e\u0431\u043a\u0438<\/h3>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Yocto \u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 &#8212; \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e, \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e Yocto \u043e\u0431\u0440\u0430\u0437\u0430<br \/> \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u044b Raspberry Pi 4, \u043f\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044e \u044d\u0442\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"lua\">example_yocto_demo_minimal_rpi4() {   local proj_demo=\"${YO_DIR_PROJECTS}\/yocto-demo-minimal\"   mkdir -p \"${proj_demo}\"   cd ${proj_demo}   repo init -u https:\/\/github.com\/berserktv\/bs-manifest -m raspberry\/scarthgap\/yocto-demo-minimal.xml   repo sync    # \u043f\u0435\u0440\u0432\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 build   echo \"exit\" | .\/shell.sh    # \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 VSCode   echo \"#!\/bin\/bash\" &gt; start-vscode.sh   echo \"cd sources\/meta-raspberrypi\" &gt;&gt; start-vscode.sh   echo \"code .\" &gt;&gt; start-vscode.sh   chmod u+x start-vscode.sh    # \u0437\u0430\u043f\u0443\u0441\u043a \u043d\u043e\u0432\u043e\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 VSCode   cd sources\/meta-raspberrypi   git clone https:\/\/github.com\/berserktv\/vscode-yocto-helper.git .vscode   # rm -fr .vscode\/.git   code . } <\/code><\/pre>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u0442 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0441\u043b\u043e\u0435\u0432 Yocto Project, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0443 \u043c\u0435\u043d\u044f \u044d\u0442\u043e BSP \u0441\u043b\u043e\u0439 \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043f\u043b\u0430\u0442\u044b Raspberry Pi 4 =&gt; &#171;meta-raspberrypi&#187;.<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432\u0442\u043e\u0440\u043e\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 VSCode c \u044d\u0442\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 \u0438 \u0442\u0430\u043c \u0443\u0436\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u0441\u0431\u043e\u0440\u043a\u0438 \u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0432 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u043c \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438, \u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437 &#171;core-image-minimal&#187; \u0438\u0437 Yocto \u043a\u043e\u0440\u043e\u0431\u043a\u0438.<\/p>\n<h3>\u0412\u044b\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c Buster Slim(\u0430) \u0434\u043b\u044f \u043a\u0440\u0443\u0442\u043e\u0439 \u0440\u0430\u0437\u0431\u043e\u0440\u043a\u0435 \u0432 \u0414\u043e\u043a\u0435\u0440\u0435<\/h3>\n<p>\u0414\u0430\u043b\u0435\u0435 \u044f \u0431\u0443\u0434\u0443 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e core-image-minimal \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u044b Raspberry Pi 4. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043d\u0435 \u043d\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u044d\u0442\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 Raspberry Pi 4 \u043f\u043e \u0441\u0435\u0442\u0438. \u0418 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043a\u0430\u0431\u0435\u043b\u044c, \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e. \u0421\u043e\u0431\u0440\u0430\u043b\u0438 \u043a\u0430\u043a\u0443\u044e \u0442\u043e \u0432\u0435\u0440\u0441\u0438\u044e \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430, \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b\u0438 \u043f\u043e \u0441\u0435\u0442\u0438, \u0447\u0442\u043e \u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b\u0438, \u0441\u043d\u043e\u0432\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b\u0438 \u0438 \u0442.\u0434.<\/p>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u043d\u0430 \u0445\u043e\u0441\u0442 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 Wifi \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d, \u0432\u043e\u0442 \u0435\u0433\u043e \u043c\u044b \u0438 \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u043a\u0430\u0431\u0435\u043b\u0435\u043c \u0441 \u0441\u0435\u0442\u0435\u0432\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c Raspberry Pi 4.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0442\u044c \u0432 Yocto \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0438 \u0441\u043b\u043e\u0435 meta-raspberrypi, \u0442\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0430\u0440\u0445\u0438\u0432\u043d\u044b\u0439 wic \u043e\u0431\u0440\u0430\u0437 <code>bz2 =&gt;  core-image-minimal-raspberrypi4-64.rootfs.wic.bz2<\/code><\/p>\n<p>\u0415\u0441\u043b\u0438 \u0435\u0433\u043e \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<p><code>fdisk -l core-image-minimal-raspberrypi4-64.rootfs.wic<\/code><\/p>\n<p>\u042d\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 RAW \u043e\u0431\u0440\u0430\u0437, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0432\u043e\u0435\u043c \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u0438\u0437 \u0434\u0432\u0443\u0445 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0438\u0441\u043a\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>\u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b fat32;<\/p>\n<\/li>\n<li>\n<p>\u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 rootfs \u0440\u0430\u0437\u0434\u0435\u043b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 ext4.<\/p>\n<\/li>\n<\/ul>\n<p>\u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0440\u0430\u0437 \u043f\u043e\u0434\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"lua\">mount_raw_image() {   if [[ -z \"${IMAGE_DIR}\" || -z \"${IMAGE_NAME}\" || -z \"${MOUNT_DIR}\" ]]; then       echo \"\u041e\u0448\u0438\u0431\u043a\u0430: \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f IMAGE_DIR, IMAGE_NAME \u0438 MOUNT_DIR\" &gt;&amp;2       return 1   fi    local image_file=\"${IMAGE_DIR}\/${IMAGE_NAME}\"   if [ ! -f \"${image_file}\" ]; then       echo \"\u041e\u0448\u0438\u0431\u043a\u0430: \u0424\u0430\u0439\u043b \u043e\u0431\u0440\u0430\u0437\u0430 ${image_file} \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\" &gt;&amp;2       return 2   fi    local loop_dev=$(losetup -j \"${image_file}\" | awk -F: '{print $1}')   if [ -z \"${loop_dev}\" ]; then       loop_dev=$(sudo losetup -f --show -P \"${image_file}\")       if [[ $? -ne 0 ]]; then echo \"\u041e\u0448\u0438\u0431\u043a\u0430: \u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c loop-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\" &gt;&amp;2; return 3; fi       echo \"\u0421\u043e\u0437\u0434\u0430\u043d\u043e \u043d\u043e\u0432\u043e\u0435 loop-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e: ${loop_dev}\"   else       echo \"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 loop-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e: ${loop_dev}\"   fi    local uid=$(id -u)   local gid=$(id -g)   get_mount_base   mkdir -p ${MOUNT_BASE_DIR}    for part_num in {1..4}; do       local partition=\"${loop_dev}p${part_num}\"       if [[ -b \"${partition}\" ]]; then           local mount_point=\"${MOUNT_BASE_DIR}\/part${part_num}\"           if mountpoint -q \"${mount_point}\"; then               echo \"\u0420\u0430\u0437\u0434\u0435\u043b ${part_num} \u0443\u0436\u0435 \u0441\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0432 ${mount_point}, \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c...\"               continue           fi            mkdir -p \"${mount_point}\"           local fs_type=$(sudo blkid -o value -s TYPE \"${partition}\")           case \"${fs_type}\" in               vfat)                   sudo mount -o rw,uid=${uid},gid=${gid} \"${partition}\" \"${mount_point}\" ;;               *)                   sudo mount -o rw \"${partition}\" \"${mount_point}\" ;;           esac            if [[ $? -eq 0 ]]; then echo \"\u0420\u0430\u0437\u0434\u0435\u043b ${part_num} \u0441\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0432 ${mount_point}\";           else echo \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 ${part_num}\" &gt;&amp;2; fi       fi   done } <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u044f\u0434\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u0430\u043c \u043a\u0430\u043a \u043a \u0431\u043b\u043e\u0447\u043d\u044b\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c, Loop \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u0430\u043a \u0431\u044b &#171;\u0437\u0430\u043c\u044b\u043a\u0430\u044e\u0442&#187; \u0444\u0430\u0439\u043b \u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u0438\u0441\u043a \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043d\u0438\u043c \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c<br \/> \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c.<\/p>\n<p>\u0418 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0432 Linux \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u044d\u0442\u043e losetup. \u0414\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f fat32 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u043e\u0442 \u0438\u043c\u0435\u043d\u0438 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0431\u0435\u0437 uid\/gid, \u0430 \u043c\u043d\u0435 \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u043e\u0447\u0435\u043d\u044c \u043d\u0443\u0436\u043d\u043e.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0435\u0439 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0442\u0440\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u0432\u0435\u0440\u043d\u0435\u0435 \u0442\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f:<\/p>\n<p><code>IMAGE_NAME<\/code> &#8212; \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0437\u0430<br \/> <code>IMAGE_DIR<\/code>  &#8212; \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0444\u0430\u0439\u043b \u043e\u0431\u0440\u0430\u0437\u0430<br \/> <code>MOUNT_DIR<\/code>  &#8212; \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0444\u0430\u0439\u043b \u043e\u0431\u0440\u0430\u0437\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d<\/p>\n<p>\u0437\u0434\u0435\u0441\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>get_mount_base<\/code>:<\/p>\n<pre><code class=\"lua\">MOUNT_BASE_DIR=\"\" IMAGE_NAME_SHORT=\"\" get_mount_base() {     local name_without_ext=\"${IMAGE_NAME%.*}\"     MOUNT_BASE_DIR=\"${MOUNT_DIR}\/${name_without_ext}\"     IMAGE_NAME_SHORT=\"${name_without_ext}\" } <\/code><\/pre>\n<p>\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u043e\u0431\u0440\u0430\u0437\u0430 <code>IMAGE_NAME<\/code>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <code>MOUNT_DIR<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0437 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c N \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043c\u043e\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 part1, part2 \u0438 \u0442.\u0434. \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u043e\u043c\u0443 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044e, \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e raw \u043e\u0431\u0440\u0430\u0437\u0430.<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u0435\u0449\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0437\u0430:<\/p>\n<p>\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437:<br \/> core-image-minimal-raspberrypi4-64.rootfs.wic<br \/> \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f =&gt; core-image-minimal-raspberrypi4-64.rootfs<\/p>\n<p>\u0434\u043b\u044f \u0440\u0430\u0437\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e umount_raw_image \u0441 \u0442\u0435\u043c\u0435 \u0436\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"lua\">umount_raw_image() {   if [[ -z \"${IMAGE_DIR}\" || -z \"${IMAGE_NAME}\" || -z \"${MOUNT_DIR}\" ]]; then       echo \"\u041e\u0448\u0438\u0431\u043a\u0430: \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f IMAGE_DIR, IMAGE_NAME \u0438 MOUNT_DIR\" &gt;&amp;2; return 1   fi    get_mount_base   local name_without_ext=\"${IMAGE_NAME%.*}\"   if [ ! -d ${MOUNT_BASE_DIR} ]; then       echo \"\u041e\u0448\u0438\u0431\u043a\u0430: \u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f ${MOUNT_BASE_DIR} \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430, \u0432\u044b\u0445\u043e\u0434...\" &gt;&amp;2; return 2   fi    local mounted_parts=(\"${MOUNT_BASE_DIR}\"\/part*)   if [[ -e \"${mounted_parts[0]}\" ]]; then       for mount_point in \"${mounted_parts[@]}\"; do           if mountpoint -q \"${mount_point}\"; then               sudo umount \"${mount_point}\"               if [[ $? -eq 0 ]]; then echo \"\u0420\u0430\u0437\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 ${mount_point} \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e\"               else echo \"\u041e\u0448\u0438\u0431\u043a\u0430: \u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c ${mount_point}\" &gt;&amp;2; fi           else               echo \"\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435: ${mount_point} \u043d\u0435 \u0441\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\" &gt;&amp;2           fi       done   else       echo \"\u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u0441\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u0432 ${MOUNT_DIR}\/${name_without_ext}\"   fi    local image_file=\"${IMAGE_DIR}\/${IMAGE_NAME}\"   if [[ -f \"${image_file}\" ]]; then       local loop_devices       loop_devices=$(losetup -j \"${image_file}\" | awk -F: '{print $1}')       for loop_dev in ${loop_devices}; do           sudo losetup -d \"${loop_dev}\"           if [[ $? -eq 0 ]]; then echo \"Loop-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e ${loop_dev} \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043e\u0442\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043e\"           else echo \"\u041e\u0448\u0438\u0431\u043a\u0430: \u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c loop-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e ${loop_dev}\" &gt;&amp;2; fi       done   else       echo \"\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435: \u0424\u0430\u0439\u043b \u043e\u0431\u0440\u0430\u0437\u0430 ${image_file} \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d, \u043e\u0447\u0438\u0441\u0442\u043a\u0430 loop-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u0430\" &gt;&amp;2   fi } <\/code><\/pre>\n<p>\u0421 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 <code>mount_raw_image()<\/code> \u0438 <code>umount_raw_image()<\/code> \u044f \u043c\u043e\u0433\u0443 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043f\u043e \u0441\u0435\u0442\u0438.<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Buster Slim \u0434\u043e\u043a\u0435\u0440 &#8212; &#171;debian:buster-slim&#187;:<\/p>\n<h3>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 DHCP, TFTP \u0438 NFS \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/h3>\n<pre><code class=\"dart\">docker \u2514\u2500\u2500 dhcp_tftp_nfs     \u251c\u2500\u2500 Dockerfile     \u251c\u2500\u2500 entrypoint.sh     \u251c\u2500\u2500 etc     \u2502\u00a0\u00a0 \u251c\u2500\u2500 default     \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 isc-dhcp-server     \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 nfs-kernel-server     \u2502\u00a0\u00a0 \u251c\u2500\u2500 dhcp     \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 dhcpd.conf     \u2502\u00a0\u00a0 \u251c\u2500\u2500 exports     \u2502\u00a0\u00a0 \u2514\u2500\u2500 network     \u2502\u00a0\u00a0     \u2514\u2500\u2500 interfaces     \u251c\u2500\u2500 Makefile     \u251c\u2500\u2500 reconfig_net.sh     \u2514\u2500\u2500 rpi         \u251c\u2500\u2500 cmdline.txt         \u2514\u2500\u2500 enable_uart.txt <\/code><\/pre>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u0434\u043e\u043a\u0435\u0440\u0430:<\/p>\n<pre><code class=\"dart\">FROM debian:buster-slim  ENV DEBIAN_FRONTEND noninteractive ENV DEBCONF_NONINTERACTIVE_SEEN true  RUN apt-get update &amp;&amp; \\     apt-get install --no-install-recommends -y \\         isc-dhcp-server \\         tftpd-hpa \\         rpcbind \\         nfs-kernel-server &amp;&amp; \\     # Clean rootfs     apt-get clean all &amp;&amp; \\     apt-get autoremove -y &amp;&amp; \\     apt-get purge &amp;&amp; \\     rm -rf \/var\/lib\/{apt,dpkg,cache,log} &amp;&amp; \\     # Configure DHCP     touch \/var\/lib\/dhcp\/dhcpd.leases &amp;&amp; \\     # Configure rpcbind     mkdir -p \/run\/sendsigs.omit.d \/etc\/modprobe.d \/var\/lib\/nfs &amp;&amp; \\     touch \/run\/sendsigs.omit.d\/rpcbind &amp;&amp; \\     touch \/var\/lib\/nfs\/state  WORKDIR \/  COPY entrypoint.sh \/entrypoint.sh # Set correct entrypoint permission RUN chmod u+x \/entrypoint.sh  ENTRYPOINT [\"\/entrypoint.sh\"] <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0442\u0440\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043d\u0443\u0436\u043d\u044b\u0435 \u043c\u043d\u0435 \u0434\u043b\u044f \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438: DHCP, TFTP \u0438 NFS.<\/p>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 <code>entrypoint.sh<\/code> \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"lua\">#!\/bin\/sh  # \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u043e Ctrl+C \u0438\u043b\u0438 docker stop # \u0438 \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 stop \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 trap \"stop; exit 0;\" TERM INT  stop() {     echo \"\u041f\u043e\u043b\u0443\u0447\u0435\u043d SIGTERM, \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b...\"     echo \"\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 NFS...\"     exportfs -uav     service nfs-kernel-server stop     echo \"\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 TFTP...\"     service tftpd-hpa stop     echo \"\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 DHCP...\"     service isc-dhcp-server stop      exit 0 }  start() {     echo \"\u0417\u0430\u043f\u0443\u0441\u043a \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432...\"     echo \"\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f DHCP...\"     service rsyslog start     service isc-dhcp-server start     echo \"\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f TFTP...\"     service tftpd-hpa start     echo \"\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f NFS...\"     service rpcbind start     service nfs-common start     service nfs-kernel-server start     exportfs -rva      echo \"\u0421\u0435\u0440\u0432\u0438\u0441\u044b \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b...\"     while true; do sleep 1; done      exit 0 }  start <\/code><\/pre>\n<p>\u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Buster Slim \u0441\u043b\u0443\u0436\u0438\u0442 Makefile:<\/p>\n<pre><code class=\"lua\">IMAGE=dhcp_tftp_nfs DOCKER_TAG=buster-slim DOCKER_NETWORK=\"--network=host\" TFTP_DIR=\/tmp\/docker\/tftp NFS_DIR=\/tmp\/docker\/nfs  # Host network config =&gt; HOST_NET_IFACE=\"\" IP_ADDR=\"10.0.7.1\" IP_SUBNET=\"10.0.7.0\" IP_MASK=\"255.255.255.0\" IP_MASK2=\"24\" IP_RANGE=\"range 10.0.7.100 10.0.7.200\"  run:     sudo ip addr flush dev $(HOST_NET_IFACE)     sudo ip addr add $(IP_ADDR)\/$(IP_MASK) dev $(HOST_NET_IFACE)     sudo ip link set $(HOST_NET_IFACE) up      sudo modprobe nfsd     if ps aux | grep -q \/sbin\/rpcbind; then sudo systemctl stop rpcbind.socket; sudo systemctl stop rpcbind; fi      docker run --rm -ti --privileged \\     ${DOCKER_NETWORK} \\     -v ${TFTP_DIR}:\/srv\/tftp \\     -v ${NFS_DIR}:\/nfs \\     -v ${PWD}\/etc\/exports:\/etc\/exports \\     -v ${PWD}\/etc\/default\/nfs-kernel-server:\/etc\/default\/nfs-kernel-server \\     -v ${PWD}\/etc\/default\/isc-dhcp-server:\/etc\/default\/isc-dhcp-server \\     -v ${PWD}\/etc\/dhcp\/dhcpd.conf:\/etc\/dhcp\/dhcpd.conf \\     -v ${PWD}\/etc\/network\/interfaces:\/etc\/network\/interfaces \\     ${IMAGE}:${DOCKER_TAG}  build:     docker build --rm -t ${IMAGE}:${DOCKER_TAG} .  rebuild:     docker build --rm --no-cache -t ${IMAGE}:${DOCKER_TAG} .  install:     sudo apt-get update     sudo apt-get install -y docker.io  clean-all-container:     sudo docker rm $(docker ps -qa)  .PHONY: run build clean-all-container <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0434\u043e\u043a\u0435\u0440 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043e\u043d \u043f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0434\u043b\u044f DHCP \u0438 NFS.<\/p>\n<p>\u0412 \u0441\u0430\u043c\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0432 \u0434\u043e\u043a\u0435\u0440\u0435:<\/p>\n<pre><code class=\"lua\">####################################### # \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \/etc\/network\/interfaces ##################################### auto lo iface lo inet loopback  auto eth0 iface eth0 inet static address 10.0.7.1 netmask 255.255.255.0 <\/code><\/pre>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0434\u043e\u043a\u0435\u0440 Buster Slim \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0435\u0442\u0435\u0432\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0445\u043e\u0441\u0442\u0430, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#171;&#8212;network=host&#187;, \u0442\u043e \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u043d\u0430 \u0445\u043e\u0441\u0442\u0435, \u0437\u0434\u0435\u0441\u044c \u044d\u0442\u043e \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 &#171;eth0&#187;.<\/p>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f DHCP \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432 \u0434\u043e\u043a\u0435\u0440\u0435:<\/p>\n<pre><code class=\"lua\">############################################ # \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \/etc\/default\/isc-dhcp-server ########################################## DHCPDv4_CONF=\/etc\/dhcp\/dhcpd.conf DHCPDv4_PID=\/var\/run\/dhcpd.pid INTERFACESv4=\"eth0\"  #################################### # \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \/etc\/dhcp\/dhcpd.conf ################################## option domain-name \"example.org\"; option domain-name-servers ns1.example.org; default-lease-time 600; max-lease-time 7200; ddns-update-style none;  subnet 10.0.7.0 netmask 255.255.255.0 {     range 10.0.7.100 10.0.7.200;     option routers 10.0.7.1;     option subnet-mask 255.255.255.0;     option tftp-server-name \"10.0.7.1\";     option bootfile-name \"bootcode.bin\"; } <\/code><\/pre>\n<p>\u0414\u043b\u044f DHCP \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u043b\u0443\u0448\u0430\u044e\u0449\u0438\u0439 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0435 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u0438\u043c\u044f, \u0447\u0442\u043e \u0438 \u043d\u0430 \u0445\u043e\u0441\u0442\u0435, \u0434\u0430\u043b\u0435\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043f\u0443\u043b\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432, \u0430\u0434\u0440\u0435\u0441 \u0448\u043b\u044e\u0437\u0430, \u043c\u0430\u0441\u043a\u0430 \u0441\u0435\u0442\u0438, \u0430\u0434\u0440\u0435\u0441 TFTP \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0437\u0434\u0430\u0435\u0442 \u0438 \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0434\u043b\u044f \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 &#171;bootcode.bin&#187; (\u0437\u0434\u0435\u0441\u044c \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043b\u0438 \u0435\u0433\u043e \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u043c \u0438\u043b\u0438 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u043c, \u043d\u043e \u043d\u0435 \u0432 \u044d\u0442\u043e\u043c \u0441\u0443\u0442\u044c).<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0435 \u043f\u043b\u0430\u0442\u0443 Raspberry Pi 4 \u043f\u043e \u0441\u0435\u0442\u0438, \u0442\u043e \u044d\u0442\u043e\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432 \u043a\u043e\u0440\u043d\u0435 TFTP \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0438\u043d\u0430\u0447\u0435 \u043d\u0438\u043a\u0442\u043e \u043d\u0438 \u043a \u043a\u043e\u043c\u0443 \u043f\u043e \u0441\u0435\u0442\u0438 \u043d\u0435 \u043f\u0440\u0438\u0435\u0434\u0435\u0442.<\/p>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043f\u043b\u0430\u0442\u0430 Raspberry Pi 4 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043d\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0441 microSD \u043a\u0430\u0440\u0442\u044b \u043f\u0430\u043c\u044f\u0442\u0438, \u0434\u0430\u043b\u0435\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u044d\u0442\u043e USB, \u0438 \u0434\u0430\u043b\u0435\u0435 \u0438\u0434\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b.<\/p>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u044d\u0442\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0432 \u043a \u043f\u043b\u0430\u0442\u0435 \u043c\u043e\u043d\u0438\u0442\u043e\u0440 \u043f\u043e HDMI \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u0438 \u0432\u044b\u0442\u0430\u0449\u0438\u0432 SD \u043a\u0430\u0440\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e\u0434\u0430\u0439\u0442\u0435 \u043d\u0430 \u043d\u0435\u0435 \u043f\u0438\u0442\u0430\u043d\u0438\u0435. \u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0435 SD \u043a\u0430\u0440\u0442\u044b, \u043d\u0435 USB \u0434\u0438\u0441\u043a\u0430 \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e, \u0442\u043e \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0441\u0435\u0442\u0435\u0432\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430, \u044d\u0442\u043e \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430, \u043f\u043e \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0439 \u0437\u0430\u0441\u0442\u0430\u0432\u043a\u0435 \u0441 \u043d\u0430\u0434\u043f\u0438\u0441\u044c\u044e \u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u00ab\u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438\u00bb.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0447\u0442\u043e \u0442\u043e \u043d\u0435 \u0442\u0430\u043a, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0432 EEPROM \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0443\u044e \u0437\u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 Raspberry Pi 4:<\/p>\n<pre><code class=\"lua\">################################ # \u043d\u0430 Desktop \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 ################################ # \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 Raspberry Pi Imager sudo apt install rpi-imager  # \u0432\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0432 \u043a\u0430\u0440\u0442\u0440\u0438\u0434\u0435\u0440 microSD \u043a\u0430\u0440\u0442\u0443 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f EEPROM # \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b rpi-imager rpi-imager  # \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 (CHOOSE OS) =&gt; Misc utility images (Bootloader EEPROM configuration) =&gt; Bootloader (Pi 4 family)  # \u0412\u044b\u0431\u0438\u0440\u0430\u0439\u0442\u0435 \u043e\u0434\u0438\u043d \u0438\u0437 \u0442\u0440\u0435\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432, \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430\u043c\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 # \u0441\u043e\u0432\u0435\u0442\u0443\u044e \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 SD =&gt; USB =&gt; network # \u0442.\u0435. \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u043e \u0441\u0435\u0442\u0438 \u0441 \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0438\u043c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c  # \u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438, \u0438 \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u041e\u041a, # \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0435 SD \u043a\u0430\u0440\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u043a Raspberry Pi 4 # \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 USB-uart \u043a GPIO \u0442\u043e \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f sudo picocom --baud 115200 \/dev\/ttyUSB0  # \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u0430\u0447\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u043d\u0430 \u043f\u043b\u0430\u0442\u0443 \u043f\u043e UAR\u0422 \u0445\u043e\u0442\u044f \u0431\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: ... Reading EEPROM: 524288 Writing EEPROM ......................................................................................+....+ Verify BOOT EEPROM Reading EEPROM: 524288 BOOT-EEPROM: UPDATED  # \u0435\u0441\u043b\u0438 UART(A) \u043d\u0435\u0442 \u0442\u043e \u0441\u043b\u0435\u0434\u0438\u0442\u0435 \u0437\u0430 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430\u043c\u0438, \u043e\u043d\u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0436\u0443\u0442 <\/code><\/pre>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f NFS \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432 \u0434\u043e\u043a\u0435\u0440\u0435:<\/p>\n<pre><code class=\"lua\">############################################## # \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \/etc\/default\/nfs-kernel-server ############################################ # Number of servers to start up RPCNFSDCOUNT=8 # Runtime priority of server (see nice(1)) RPCNFSDPRIORITY=0 # Options for rpc.mountd. (rpcinfo -p) RPCMOUNTDOPTS=\"--nfs-version 4.2 --manage-gids\" NEED_SVCGSSD=\"\" # Options for rpc.svcgssd. RPCSVCGSSDOPTS=\"\" # Options for rpc.nfsd. (cat \/proc\/fs\/nfsd\/versions) RPCNFSDOPTS=\"--nfs-version 4.2\"  ########################### # \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \/etc\/export ######################### \/nfs  *(rw,fsid=0,sync,no_subtree_check,no_root_squash,no_all_squash,crossmnt) <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u044f \u0432\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u044e \u0432\u0435\u0440\u0441\u0438\u044e 4, \u043d\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0442\u043e \u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<\/p>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f NFS \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430:<\/p>\n<ul>\n<li>\n<p><code>rw<\/code> \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u0438;<\/p>\n<\/li>\n<li>\n<p><code>fsid=0<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u0434\u043b\u044f NFSv4. \u0412 NFSv4 \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u043c\u043e\u043d\u0442\u0438\u0440\u0443\u044e\u0442 &#171;\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e&#187; \u043a\u043e\u0440\u043d\u0435\u0432\u0443\u044e \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \/), \u0430 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u044b \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0435\u0451 \u043f\u043e\u0434\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f\u043c\u0438;<\/p>\n<\/li>\n<li>\n<p><code>sync<\/code> \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0434\u0438\u0441\u043a \u043f\u0435\u0440\u0435\u0434 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u044d\u0442\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0443 \u0438 \u043c\u0435\u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e;<\/p>\n<\/li>\n<li>\n<p><code>no_subtree_check<\/code> \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435;<\/p>\n<\/li>\n<li>\n<p><code>no_root_squash<\/code> \u043d\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f root \u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0432 \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0434\u0430\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c \u043f\u043e\u043b\u043d\u044b\u0439 root-\u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0444\u0430\u0439\u043b\u0430\u043c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u043d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u0443 \u043d\u0430\u0441 \u043a\u043e\u0440\u043d\u0435\u0432\u0430\u044f rootfs \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u041e\u0421, \u043e\u043d \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d, \u0438\u043d\u0430\u0447\u0435 \u043d\u0430\u0448\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u0430\u044f \u041e\u0421 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442;<\/p>\n<\/li>\n<li>\n<p><code>no_all_squash<\/code> \u043d\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0430 \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, c\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 UID\/GID \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0442\u043e\u0436\u0435 \u043d\u0443\u0436\u0435\u043d, \u0441\u043c. \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043f\u0443\u043d\u043a\u0442.<\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0449\u0435 \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0441 NFS \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c, \u0443 \u043c\u0435\u043d\u044f \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u043b\u0438\u0441\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b:<\/p>\n<ul>\n<li>\n<p>\u0412\u043e \u043f\u0435\u0440\u0432\u044b\u0445 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0434\u0438\u043d\u043e\u043b\u0438\u0447\u043d\u043e, \u0442.\u0435. \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0434\u0432\u0430 \u0442\u0430\u043a\u0438\u0445 \u0434\u043e\u043a\u0435\u0440\u0430, \u0442\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u0448\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u043e\u043c\u0443, \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u044d\u0442\u043e \u0442\u0435\u043c, \u0447\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u044d\u0442\u043e\u0442 \u0434\u043e\u043a\u0435\u0440 \u0431\u0435\u0437 \u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430 (\u0443\u0431\u0438\u0440\u0430\u044e make run_detach), \u0438 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e \u0432\u0441\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0434\u043e\u043a\u0435\u0440\u044b \u0441 \u0442\u0430\u043a\u0438\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c;<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e \u0432\u0442\u043e\u0440\u044b\u0445 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 network=host \u0434\u043e\u043a\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u0445\u043e\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u044f\u0434\u0440\u0430, \u043d\u0443\u0436\u0435\u043d &#171;modprobe nfsd&#187; \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0434\u043e\u043a\u0435\u0440\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0442\u0440\u0435\u0442\u044c\u0438\u0445 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0434\u043e\u043a\u0435\u0440\u0430, \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c rpcbind \u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0430 \u0445\u043e\u0441\u0442\u0435, \u043e\u043d \u0442\u043e\u0436\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u0434\u043e\u043a\u0435\u0440\u0443 \u0442\u0430\u043a \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u0430\u0448 Desktop \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 <code>rpcbind<\/code>, \u0442\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0438 \u043e\u0442\u043b\u043e\u0436\u0438\u0442\u044c, \u0438\u043c\u0435\u0439\u0442\u0435 \u044d\u0442\u043e \u0432\u0432\u0438\u0434\u0443.<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"cmake\">if ps aux | grep -q \/sbin\/rpcbind; then     sudo systemctl stop rpcbind.socket;     sudo systemctl stop rpcbind; fi <\/code><\/pre>\n<p>\u0415\u0449\u0435 \u0440\u0430\u0437 \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a Makefile Buster Slim(\u0430):<\/p>\n<pre><code class=\"lua\">... TFTP_DIR=\/tmp\/docker\/tftp NFS_DIR=\/tmp\/docker\/nfs  # Host network config =&gt; HOST_NET_IFACE=\"\" IP_ADDR=\"10.0.7.1\" IP_SUBNET=\"10.0.7.0\" IP_MASK=\"255.255.255.0\" IP_MASK2=\"24\" IP_RANGE=\"range 10.0.7.100 10.0.7.200\" <\/code><\/pre>\n<p>\u0412 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>HOST_NET_IFACE<\/code> \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0442\u043e\u0433\u043e \u0436\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0445\u043e\u0441\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u043d \u0432 <code>\/etc\/network\/interfaces<\/code> \u0438 <code>\/etc\/default\/isc-dhcp-server<\/code>.<\/p>\n<p>\u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0434\u043e\u043a\u0435\u0440\u043e\u043c \u0443 \u043c\u0435\u043d\u044f \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f shell \u0441\u043a\u0440\u0438\u043f\u0442 <code>docker\/dhcp_tftp_nfs\/reconfig_net.sh<\/code> \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 <code>\/etc\/network\/interfaces<\/code> \u0438 <code>\/etc\/default\/isc-dhcp-server<\/code>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<p>\u0418 \u044d\u0442\u0430 \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438<br \/> \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f Makefile:  HOST_NET_IFACE=&#187;&#187; \u043f\u0443\u0441\u0442\u0430\u044f.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u0441\u043a\u0440\u0438\u043f\u0442 \u043c\u0435\u043d\u044f\u0435\u0442 \u044d\u0442\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u0432\u043d\u043e\u0441\u0438\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430  (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 HOST_NET_IFACE=&#187;eth0&#8243;), \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437.<\/p>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 reconfig_net.sh \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u0437 <code>Makefile<\/code>:<br \/> <code>IP_ADDR<\/code> <code>IP_SUBNET<\/code> <code>IP_MASK IP_RANGE<\/code>, \u0442\u0430\u043a \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0438 \u0441\u0432\u043e\u044e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c. \u041d\u043e \u0437\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0445\u043e\u0441\u0442 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"lua\">ip link show | awk -F: '$0 !~ \"lo|vir|docker|veth|br|wl\" {print $2; getline; print $2}' | tr -d ' ' | head -n 1  # \u0438 \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0443 \u0432\u0430\u0441 \u0434\u0432\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, # \u0442\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c # \u0438 \u0432\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c # \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435 \u0444\u0430\u0439\u043b\u044b \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e  # \u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441 # \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 IP_TFTP=\"10.0.7.1\" \u0432 func.sh # \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u043d\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f # \u0438 \u043d\u0443\u0436\u043d\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f IP_ADDR \u0432 Makefile # \u0442\u0430\u043a\u0436\u0435 \u0438 \u0435\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c. <\/code><\/pre>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0432 Makefile \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435, \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 <code>TFTP_DIR<\/code> \u0438 <code>NFS_DIR<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u043e\u043a\u0438\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0434\u043e\u043a\u0435\u0440 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435, \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0442\u043e\u0447\u043a\u0443 \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>mount_raw_image<\/code>.<\/p>\n<p>\u0414\u043b\u044f core-image-minimal-raspberrypi4-64.rootfs.wic \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \/tmp\/docker\/tftp =&gt; core-image-minimal-raspberrypi4-64.rootfs\/part1<br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \/tmp\/docker\/nfs  =&gt; core-image-minimal-raspberrypi4-64.rootfs\/part2<\/p>\n<p>\u0417\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b \u043e\u0442\u0434\u0430\u0435\u043c \u0432 \u0440\u0430\u0441\u043f\u043e\u0440\u044f\u0436\u0435\u043d\u0438\u0435 TFTP, \u0430 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 rootfs \u0440\u0430\u0437\u0434\u0435\u043b \u043e\u0442\u0434\u0430\u0435\u043c NFS \u0441\u0435\u0440\u0432\u0435\u0440\u0443.<\/p>\n<p>\u041d\u0430 \u0447\u0442\u043e \u0436\u0435 \u044d\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435: Buster Slim \u043d\u0435 \u043f\u043e\u0434\u0432\u0435\u043b, \u0443 \u043d\u0430\u0441 \u043d\u0430\u043c\u0435\u0447\u0430\u0435\u0442\u0441\u044f <strong>\u00ab\u0411\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u0430\u0441\u043f\u0438\u043b \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u00bb<\/strong>.<\/p>\n<h3>\u0420\u0430\u0441\u043f\u0438\u043b \u043e\u0431\u0440\u0430\u0437\u043e\u0432<\/h3>\n<p>\u0418\u0442\u0430\u043a \u0447\u0435\u043c \u0436\u0435 \u0445\u043e\u0440\u043e\u0448 \u0440\u0430\u0441\u043f\u0438\u043b \u043e\u0431\u0440\u0430\u0437\u043e\u0432, \u0430 \u0442\u0435\u043c \u0447\u0442\u043e \u0432\u0430\u043c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e, \u0447\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0433\u0440\u0443\u0437\u0438\u0442\u044c, \u0445\u043e\u0447\u0435\u0448\u044c \u00abRaspbian\u00bb, \u0445\u043e\u0447\u0435\u0448\u044c \u00ab\u0411\u0443\u0431\u0443\u043d\u0442\u0443\u00bb, \u0445\u043e\u0447\u0435\u0448\u044c \u00abmcom03\u00bb (\u043d\u043e \u044d\u0442\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0434\u0440\u0443\u0437\u0435\u0439 \u042d\u043b\u0432\u0438\u0441\u0430), \u0438 \u0434\u0430\u043b\u0435\u0435 \u043c\u044b \u0441 \u0432\u0430\u043c\u0438 \u0447\u0442\u043e \u0442\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0447\u043d\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0441\u0442\u0440\u043e\u043a bash \u043a\u043e\u0434\u0430 \u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u0443\u044f \u0434\u043e\u043a\u0435\u0440.<\/p>\n<p>\u0414\u043e\u043a\u0435\u0440 Buster Slim \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0432\u043e\u0440\u0438\u0442 \u0447\u0443\u0434\u0435\u0441\u0430. \u042d\u0442\u043e \u043a\u0440\u0443\u0442\u0430\u044f <strong>\u0440\u0430\u0437\u0431\u043e\u0440\u043a\u0430<\/strong>.<\/p>\n<p>\u0415\u0449\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0447\u0442\u043e \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0433\u0440\u0443\u0437\u0438\u0442\u044c, \u043d\u043e \u0438 \u043a\u0443\u0434\u0430 \u0433\u0440\u0443\u0437\u0438\u0442\u044c, \u0442.\u0435. \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c Raspberry Pi 4, \u0446\u0435\u043f\u043b\u044f\u0435\u043c \u0441\u0435\u0442\u0435\u0432\u044b\u043c \u043a\u0430\u0431\u0435\u043b\u0435\u043c \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 (\u0435\u0441\u043b\u0438 \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 pxe \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438), \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0441 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u0432 BIOS, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0449\u0435 \u0441\u0435\u043a\u0446\u0438\u044e bash \u043a\u043e\u0434\u0430 \u0438 \u0433\u0440\u0443\u0437\u0438\u043c \u044d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440.<\/p>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430: \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432\u0441\u0435 \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u043f\u0440\u044f\u043c\u043e\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u043e\u0431\u0440\u0430\u0437 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u0442\u0438\u0432\u043d\u043e, \u0434\u043b\u044f Raspbian \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u0440\u0430\u0437 \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0438\u0441\u043a\u0438, \u043f\u043e\u0441\u043b\u0435 \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 losetup \u043e\u0431\u0440\u0430\u0437 \u0440\u0430\u0441\u043f\u0438\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0438\u0441\u043a\u043e\u0432 (\u043e\u0431\u044b\u0447\u043d\u043e \u0434\u0432\u0430), \u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u0442\u043e\u0447\u0435\u043a \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0442\u0438 \u0441\u0435\u0431\u044f \u0442\u0430\u043a, \u043a\u0430\u043a \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0435\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u0432 ext4 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c, \u0432 ISO \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u0442.\u0434.<\/p>\n<p>\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u0432 \u043e\u0431\u0440\u0430\u0437\u0435 \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u043c\u043d\u043e\u0433\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u044b\u0439 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0439 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0444\u0430\u0439\u043b\u0430 \u043e\u0431\u0440\u0430\u0437\u0430, \u043d\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u043b\u044f \u0434\u043e\u043b\u0433\u043e\u0441\u0440\u043e\u0447\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u043e\u0431\u0440\u0430\u0437\u0430, \u0432\u0435\u0434\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043e\u0431\u0440\u0430\u0437 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u044b\u0442\u044c \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439.<\/p>\n<h3>\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 core-image-minimal (wic) \u043e\u0431\u0440\u0430\u0437\u0430 \u043d\u0430 Raspberry Pi 4 \u043f\u043e \u0441\u0435\u0442\u0438<\/h3>\n<p>\u0418\u0442\u0430\u043a \u043a\u043e\u0434 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043f\u043e \u0441\u0435\u0442\u0438:<\/p>\n<pre><code class=\"lua\">start_netboot_rpi4() {     DOCKER_DIR='docker\/dhcp_tftp_nfs'     stop_docker \"dhcp_tftp_nfs:buster-slim\"     mount_raw_rpi4 &amp;&amp; start_session_docker } <\/code><\/pre>\n<p>\u0434\u0430\u043b\u0435\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f mount_raw_rpi4:<\/p>\n<pre><code class=\"lua\">mount_raw_rpi4() {     if ! set_env_raw_rpi4; then return 1; fi      mount_raw_image     change_bootloader_name_in_dhcp \"raspberry\"     raspberry_pi4_cmdline_for_nfs \"${MOUNT_BASE_DIR}\/part1\"     create_mount_point_for_docker \"tftp\" \"${MOUNT_BASE_DIR}\/part1\"     create_mount_point_for_docker \"nfs\" \"${MOUNT_BASE_DIR}\/part2\"     # problem with video adapter: used fake kms (old driver)     sed -i \"s|^dtoverlay=vc4-kms-v3d|#&amp;\\n dtoverlay=vc4-fkms-v3d|g\" \"${MOUNT_BASE_DIR}\/part1\/config.txt\" } <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u044f \u043c\u043e\u043d\u0442\u0438\u0440\u0443\u044e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u0447\u0435\u0440\u0435\u0437 losetup \u0438 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432\u0441\u0435 \u043f\u043e\u0434\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c:<\/p>\n<ul>\n<li>\n<p>\u043c\u0435\u043d\u044f\u044e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 \u0434\u043b\u044f DHCP \u0441\u0435\u0440\u0432\u0435\u0440\u0430 =&gt; \u043d\u0430 option bootfile-name &#171;bootcode.bin&#187;;<\/p>\n<\/li>\n<li>\n<p>\u043c\u0435\u043d\u044f\u044e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u0434\u0440\u0430 \u0434\u043b\u044f \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 \u0448\u0442\u0430\u0442\u043d\u043e\u043c cmdline.txt \u0444\u0430\u0439\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e, \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u043e\u0431\u0440\u0430\u0437\u0430 =&gt; \u043d\u0430 <code>console=serial0,115200 console=tty1 root=\/dev\/nfs nfsroot=10.0.7.1:\/nfs,hard,nolock,vers=3 rw ip=dhcp rootwait<\/code><\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u043e\u043a\u0438\u0434\u044b\u0432\u0430\u044e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043d\u0430\u0448 TFTP \u0438 NFS \u0441\u0435\u0440\u0432\u0435\u0440;<\/p>\n<\/li>\n<li>\n<p>\u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f, \u043f\u0440\u0438 \u0432\u044b\u0432\u043e\u0434\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0432\u043a\u043b\u044e\u0447\u0430\u044e \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0430\u0440\u044b\u0439 \u0432\u0438\u0434\u0435\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440 (\u0441\u0438\u043b\u044c\u043d\u043e \u043d\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u0438\u0437 \u0437\u0430 \u0447\u0435\u0433\u043e, \u043d\u043e \u0441\u043b\u043e\u0439 meta-raspberry \u0431\u0435\u0440\u0443 \u043a\u0430\u043a \u0435\u0441\u0442\u044c, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u044f)<\/p>\n<\/li>\n<\/ul>\n<p>\u0427\u0442\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c:<\/p>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u0444\u0430\u0439\u043b\u043e\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u043d\u0430\u0448 \u043f\u0440\u043e\u043f\u0440\u0438\u0435\u0442\u0430\u0440\u043d\u044b\u0439 <strong>bootcode.bin<\/strong> \u043f\u043e\u0445\u043e\u0436\u0435 \u0436\u0435\u0441\u0442\u043a\u043e \u0432 \u043d\u0435\u043c \u0437\u0430\u0448\u0438\u0442\u044b, \u0443 \u043c\u0435\u043d\u044f \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u044f\u0434\u0440\u0430, \u043c\u0435\u043d\u044f\u044f \u0448\u0442\u0430\u0442\u043d\u044b\u0439 <strong>config.txt<\/strong> \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435:<\/p>\n<pre><code class=\"lua\">kernel=\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435_\u0444\u0430\u0439\u043b\u0430_\u044f\u0434\u0440\u0430 <\/code><\/pre>\n<p>\u0415\u0441\u0442\u044c \u0435\u0449\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u043a \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443 \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u044b \u0432 \u043a\u043e\u0440\u043d\u0435 tftp<br \/> <code>&lt;serial_number&gt;\/config.txt<\/code><br \/> \u043d\u043e \u043c\u043d\u0435 \u044d\u0442\u043e \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442, \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043b\u044e\u0431\u0443\u044e \u043f\u043b\u0430\u0442\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e<br \/> \u043f\u043e\u0434\u0441\u0443\u043d\u0443\u0442\u044c <code>bootcode.bin<\/code> \u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u043d \u0445\u043e\u0447\u0435\u0442, \u0441\u043e\u0437\u0434\u0430\u0432 \u043a\u043e\u043f\u0438\u044e \u044f\u0434\u0440\u0430 (\u043d\u0430 fat \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442) \u0438\u043b\u0438<br \/> \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0432 \u0442\u043e \u044f\u0434\u0440\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0435\u0441\u0442\u044c \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435, \u0432 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u043e\u043c, \u0435\u0441\u043b\u0438 \u043c\u0435\u0441\u0442\u0430 \u0442\u0430\u043c \u0432\u043f\u0440\u0438\u0442\u044b\u043a.<\/p>\n<p>\u0414\u043b\u044f <code>YoctoDemoMinimal<\/code> (\u0432\u0435\u0442\u043a\u0430 scarthgap), \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0443\u0436\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e <code>bootcode.bin<\/code> \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 \u0445\u043e\u0441\u0442\u0435:<\/p>\n<pre><code class=\"lua\">sudo tcpdump -i eth0 -vvv -n \"(port 67 or port 68) or (udp port 69)\" <\/code><\/pre>\n<p>\u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0432\u0430\u0448\u0435\u0433\u043e \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0445\u043e\u0441\u0442\u0430<\/p>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:<\/p>\n<ul>\n<li>\n<p>console=serial0,115200 console=tty1: \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432\u044b\u0432\u043e\u0434 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 (serial0) \u0438 \u043a\u043e\u043d\u0441\u043e\u043b\u044c (tty1);<\/p>\n<\/li>\n<li>\n<p>root=\/dev\/nfs: \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u043e\u0440\u043d\u0435\u0432\u0430\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u0430 \u043f\u043e NFS;<\/p>\n<\/li>\n<li>\n<p>nfsroot=10.0.7.1:\/nfs,hard,nolock: <\/p>\n<ul>\n<li>\n<p>IP-\u0430\u0434\u0440\u0435\u0441 NFS-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433;<\/p>\n<\/li>\n<li>\n<p>hard: \u2014 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u044b \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0431\u043e\u044f;<\/p>\n<\/li>\n<li>\n<p>nolock \u2014 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a (\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f NFSv4);<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>rw \u043c\u043e\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u0440\u043d\u0435\u0432\u0443\u044e \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441 \u043f\u0440\u0430\u0432\u0430\u043c\u0438 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c;<\/p>\n<\/li>\n<li>\n<p>ip=dhcp \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e IP-\u0430\u0434\u0440\u0435\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d \u0447\u0435\u0440\u0435\u0437 DHCP;<\/p>\n<\/li>\n<li>\n<p>rootwait \u043e\u0436\u0438\u0434\u0430\u0435\u0442, \u043f\u043e\u043a\u0430 \u043a\u043e\u0440\u043d\u0435\u0432\u0430\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0433\u043e\u0442\u043e\u0432\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 `mount_raw_rpi41 \u0438\u0434\u0435\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u044b \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430:<\/p>\n<pre><code class=\"lua\">set_env_raw_rpi4() {   if find_name_image &amp;&amp; select_yocto_image; then       IMAGE_NAME=\"${IMAGE_SEL}\"       IMAGE_DIR=\"${YO_DIR_IMAGE}\/${YO_M}\"       MOUNT_DIR=\"${IMAGE_DIR}\/tmp_mount\"       if check_bz2_archive \"${IMAGE_SEL}\"; then           mkdir -p \"${MOUNT_DIR}\"           IMAGE_NAME=\"${IMAGE_SEL%.bz2}\"           extract_bz_archive \"${IMAGE_DIR}\/${IMAGE_SEL}\" \"${MOUNT_DIR}\" \"${IMAGE_NAME}\"           IMAGE_DIR=\"${MOUNT_DIR}\"       fi       return 0   fi   return 1 } <\/code><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>find_name_image<\/code> \u0438\u0449\u0435\u0442 \u0435\u0441\u0442\u044c \u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0445\u043e\u0442\u044c \u043a\u0430\u043a\u0438\u0435 \u043b\u0438\u0431\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u043e\u0431\u0440\u0430\u0437\u044b, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0435\u0441\u0442\u044c, \u0432\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 N \u043f\u0443\u043d\u043a\u0442\u043e\u0432 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438, \u0433\u0434\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0432\u0435\u0441\u0442\u0438 \u043d\u043e\u043c\u0435\u0440 \u043e\u0442 1 \u0434\u043e N, \u0435\u0441\u043b\u0438 \u0432\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u0430\u0440\u0445\u0438\u0432\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d \u0438 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u044b \u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0443\u044e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 \u0447\u0435\u0440\u0435\u0437 mount_raw_image.<\/p>\n<p>\u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0444\u0430\u0439\u043b\u044b \u043e\u0431\u0440\u0430\u0437\u0430 <code>config.txt<\/code> \u0438 <code>cmdline.txt<\/code> \u0432 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0432\u0434\u0440\u0443\u0433 \u0432\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u044d\u0442\u043e\u0442 \u043e\u0431\u0440\u0430\u0437 \u043f\u0440\u043e\u0448\u0438\u0442\u044c \u043d\u0430 SD \u043a\u0430\u0440\u0442\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 dd, \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u043a\u0438\u0445 \u043d\u0438\u0431\u0443\u0434\u044c \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0439, \u0432\u0441\u044f\u043a\u043e\u0435 \u0431\u044b\u0432\u0430\u0435\u0442.<\/p>\n<pre><code class=\"lua\">restore_image_rpi4() {   if ! set_env_raw_rpi4; then return 1; fi    mount_raw_image   local mount_dir=\"${MOUNT_BASE_DIR}\/part1\"   for file in config.txt cmdline.txt; do       restore_orig \"${mount_dir}\/${file}\"   done   umount_raw_image } <\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u0447\u0442\u043e \u0442\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c, \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435, \u0447\u0442\u043e \u043d\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u043c \u043e\u0431\u0440\u0430\u0437\u0435 \u043b\u0443\u0447\u0448\u0435 \u043d\u0430\u0431\u0440\u0430\u0442\u044c poweroff \u0438 \u043f\u043e\u0434\u043e\u0436\u0434\u0430\u0442\u044c, \u043f\u043e\u043a\u0430 \u043a\u043e\u0440\u043d\u0435\u0432\u0430\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 NFS \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u0442\u043c\u043e\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f Raspberry Pi 4, \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438 \u0432\u0441\u0435 \u0442\u043e\u0447\u043a\u0438 \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041d\u043e \u0435\u0449\u0435 \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0430\u043c \u0434\u043e\u043a\u0435\u0440, \u043e\u043d \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 VSCode \u0438 \u0436\u0434\u0435\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u043e Ctrl+C \u0438\u043b\u0438 docker stop hash_container, \u044d\u0442\u043e \u043d\u0430\u0434\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c <code>restore_image_rpi4<\/code> \u0438 \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u041ek, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c. \u0415\u0441\u043b\u0438 \u043e\u0431\u0440\u0430\u0437 \u0430\u0440\u0445\u0438\u0432\u043d\u044b\u0439, \u0442\u043e \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>sdcard_deploy<\/code> \u0432\u0430\u043c \u0435\u0449\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0438\u0437 tmp_mount \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0441 \u043e\u0431\u0440\u0430\u0437\u0430\u043c\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e (\u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u043f\u043e\u043a\u0430).<\/p>\n<p>\u0417\u0430\u043e\u0434\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u0435, \u0435\u0441\u0442\u044c \u043b\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 <code>dtoverlay=vc4-kms-v3d<\/code> (\u0438\u043b\u0438 \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0443 \u043c\u0435\u043d\u044f \u0442\u0430\u043a\u043e\u0435). \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0435\u0441\u0442\u044c, \u0442\u043e \u0432\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 UART, \u0432\u0438\u0434\u0435\u043e \u043d\u0435\u0442, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u0438\u0434\u043d\u043e, \u0438\u043b\u0438 \u0436\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0440\u0430\u0437\u0443 \u043d\u0430 SD \u043a\u0430\u0440\u0442\u0435 \u043f\u043e\u0434\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c <code><strong>config.txt<\/strong><\/code> \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f raw \u043e\u0431\u0440\u0430\u0437\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 dd.<\/p>\n<h3>\u0421\u0435\u0442\u0435\u0432\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 Raspbian \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u044b Raspberry Pi 4<\/h3>\n<p>\u0418\u0442\u0430\u043a \u043a\u043e\u0434 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u043e \u0441\u0435\u0442\u0438 \u0434\u043b\u044f Raspbian:<\/p>\n<pre><code class=\"lua\">start_netboot_raspios() {     set_env_raw_raspios     stop_docker \"dhcp_tftp_nfs:buster-slim\"     mount_raw_raspios &amp;&amp; start_session_docker } <\/code><\/pre>\n<p>\u0434\u0430\u043b\u0435\u0435:<\/p>\n<pre><code class=\"lua\">set_env_raw_raspios() {   IMAGE_DIR=\"${DOWNLOAD_RASPIOS}\"   IMAGE_NAME=\"2024-11-19-raspios-bookworm-arm64.img\"   MOUNT_DIR=\"${DOWNLOAD_RASPIOS}\/tmp_mount\"   DOCKER_DIR='docker\/dhcp_tftp_nfs' }  mount_raw_raspios() {   download_raspios || return 1   mount_raw_image || return 2   add_cmdline_for_nfs_raspios   disable_partuuid_fstab_for_raspios   docker_dhcp_tftp_reconfig_net   change_bootloader_name_in_dhcp \"raspberry\"   create_mount_point_for_docker \"tftp\" \"${MOUNT_BASE_DIR}\/part1\"   create_mount_point_for_docker \"nfs\" \"${MOUNT_BASE_DIR}\/part2\" } <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u0435\u043d\u044f\u044e \u043d\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 fat \u0448\u0442\u0430\u0442\u043d\u044b\u0439 <code>cmdline.txt<\/code> \u043d\u0430 \u0442\u0430\u043a\u043e\u0439:<\/p>\n<pre><code class=\"lua\">console=serial0,115200 console=tty1 root=\/dev\/nfs nfsroot=10.0.7.1:\/nfs,hard,nolock,vers=3 rw ip=dhcp rootwait <\/code><\/pre>\n<p>\u0418 \u0435\u0449\u0435, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u0433\u043b\u0430\u0434\u043a\u043e, \u043d\u0443\u0436\u043d\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0448\u0442\u0430\u0442\u043d\u044b\u0439 <code>\/etc\/fstab<\/code> \u0432 \u043e\u0431\u0440\u0430\u0437\u0435 Raspbian:<br \/> (\u0438\u043d\u0430\u0447\u0435 \u043d\u0435 \u043f\u043e\u043b\u0435\u0442\u0438\u0442, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0431\u0443\u0434\u0435\u0442, \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0438 \u0434\u043e\u043b\u0433\u043e \u0442\u0430\u043a)<\/p>\n<pre><code class=\"lua\">disable_partuuid_fstab_for_raspios() {   local fstab_file=\"${MOUNT_BASE_DIR}\/part2\/etc\/fstab\"   [[ -f \"${fstab_file}\" ]] || return 1    if cat \"${fstab_file}\" | grep -q \"^PARTUUID=\"; then       echo \"Disable the PARTUUID entries in ${fstab_file}\"       echo \"This is an NFS root filesystem for RaspiOS, and the root password is required.\"       sudo sed -i \"s|^PARTUUID=|#PARTUUID=|g\" \"${fstab_file}\"   fi }  restore_partuuid_fstab_for_raspios() {   local fstab_file=\"${MOUNT_BASE_DIR}\/part2\/etc\/fstab\"   [[ -f \"${fstab_file}\" ]] || return 1    if cat \"${fstab_file}\" | grep -q \"^#PARTUUID=\"; then       echo \"Need to restore the PARTUUID entries in ${fstab_file}\"       echo \"This is an NFS root filesystem for RaspiOS, and the root password is required.\"       sudo sed -i \"s|^#PARTUUID=|PARTUUID=|g\" \"${fstab_file}\"   fi } <\/code><\/pre>\n<p>\u0410 \u043c\u044b \u0435\u0433\u043e \u0441 \u0432\u0430\u043c\u0438 \u043e\u0431\u043c\u0430\u043d\u0435\u043c \u0438 \u0434\u0438\u0441\u043a\u0438 <code>PARTUUID=<\/code> \u0437\u0430\u043a\u043e\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u0434 root(\u043e\u043c), \u0430 \u043f\u043e\u0442\u043e\u043c \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e, \u0441\u043d\u043e\u0432\u0430 \u0432\u043a\u043b\u044e\u0447\u0438\u043c,<br \/> \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u043e\u0431\u0440\u0430\u0437 \u0434\u043b\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0448\u0438\u0442\u044c \u043d\u0430 SD \u043a\u0430\u0440\u0442\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 dd:<\/p>\n<pre><code class=\"lua\">restore_image_raspios() {     set_env_raw_raspios     mount_raw_image     local mount_dir=\"${MOUNT_BASE_DIR}\/part1\"     for file in config.txt cmdline.txt; do         restore_orig \"${mount_dir}\/${file}\"     done     restore_partuuid_fstab_for_raspios     umount_raw_image } <\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0432 config.txt \u0435\u0449\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u043f\u043e UART, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043a GPIO \u043f\u0438\u043d\u0430\u043c \u043f\u043e\u0434\u0446\u0435\u043f\u0438\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d \u0442\u043e\u0436\u0435 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0431\u044b\u043b \u0443 <code>Raspbian<\/code>(RaspiOS).<\/p>\n<h3>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u044b\u0445 Yocto \u043b\u043e\u0433\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 Deepseek<\/h3>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043d\u0435 \u0435\u0449\u0435 \u043d\u0443\u0436\u043d\u0430, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043a\u0430\u043a\u0438\u0445 \u043b\u0438\u0431\u043e \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u044b\u0445 \u043b\u043e\u0433\u043e\u0432 \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f Yocto \u043e\u0448\u0438\u0431\u043e\u043a, \u0447\u0442\u043e \u0431\u044b \u0441\u043e\u0432\u0441\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u0430\u043a\u0430\u044f \u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u0430\u044f \u0441\u0435\u0442\u044c, \u043f\u0443\u0441\u0442\u044c \u043e\u043d\u0430 \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u0435\u0442 \u0441\u043e\u0432\u0435\u0442\u044b \u043f\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043e\u0448\u0438\u0431\u043e\u043a, \u0432 \u0438\u0434\u0435\u0430\u043b\u0435 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043b\u043e\u0433 \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u0432\u0445\u043e\u0434 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438, \u0431\u0435\u0437 \u043f\u043e\u0441\u0440\u0435\u0434\u043d\u0438\u043a\u043e\u0432.<\/p>\n<p>\u0410 \u0442\u043e \u0441\u0438\u0434\u0438\u0448\u044c \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0448\u044c \u043e\u0434\u043d\u0443 \u043f\u0440\u043e\u0441\u0442\u044b\u043d\u044e \u043e\u0448\u0438\u0431\u043e\u043a \u0438\u0437 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u0438, \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0448\u044c \u0435\u0435 \u0432 \u043e\u043a\u043d\u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u043a\u0443\u0434\u0430 \u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0430 chat.deepseek.com \u044d\u0442\u043e \u0436\u0443\u0442\u043a\u043e \u0434\u043e\u043b\u0433\u043e, \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u0442\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0438\u0442\u0430\u043a \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c:<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a DeepSeek \u0447\u0435\u0440\u0435\u0437 Ollama \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0430 \u0440\u0435\u0434\u043a\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c, \u0442\u043e\u0442 \u0436\u0435 Stable Diffusion \u043f\u043e\u043c\u043d\u044e \u043f\u043e\u043b \u0434\u043d\u044f \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u043b, \u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u043e, \u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0435, \u0430 \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u0430\u0433\u0438\u044f \u043a\u0430\u043a\u0430\u044f \u0442\u043e, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043a\u0440\u044b\u0442\u0430\u044f \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043a\u0440\u0443\u0442\u043e.<\/p>\n<pre><code class=\"lua\"># \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u0435\u0441\u0438\u0442 4.9 \u0413\u0431 \u0438 \u0441\u0430\u043c\u0430 ollama ~3 \u0413\u0431 DEEPSEEK_MODEL=\"deepseek-r1:8b\" install_deepseek() {     curl -fsSL https:\/\/ollama.com\/install.sh | sh     ollama serve     ollama run ${DEEPSEEK_MODEL} } <\/code><\/pre>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u044f \u0432\u0437\u044f\u043b \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043a \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c &#171;deepseek-r1:8b&#187; \u043d\u0430 4.9 \u0413\u0431, \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0441\u0435\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u043e\u0442\u044f\u043d\u0443\u043b \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430 8\u0413\u0431 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0438 \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0447\u0442\u043e \u043e\u043d\u0430 \u043a\u0430\u043a \u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0434\u0440\u0443\u0436\u0435\u043b\u044e\u0431\u043d\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0443, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0431\u043e\u043b\u0435\u0435 \u0442\u044f\u0436\u0435\u043b\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f deepseek-r1:14b \u0432\u0435\u0434\u0435\u0442 \u0441\u0435\u0431\u044f \u043d\u0435\u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e, \u0442\u044b \u0435\u0435 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c, \u0430 \u043e\u043d\u0430 \u0442\u0435\u0431\u0435 \u0442\u0430\u043b\u0434\u044b\u0447\u0438\u0442 \u043f\u043e \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438, \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044f \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439, \u0430 \u044d\u0442\u0430 \u0442\u0430\u043a \u0441\u0440\u0430\u0437\u0443 \u043f\u043e \u0440\u0443\u0441\u0441\u043a\u0438.<\/p>\n<p>\u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e deepseek-r1 \u0435\u0449\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a, \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e, \u0430 \u0437\u0430 \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u0441\u043e\u0432\u0435\u0442\u043e\u043c \u0432\u0441\u0435 \u0436\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0438\u0434\u0442\u0438 \u043d\u0430 chat.deepseek.com, \u043d\u0443 \u0438\u043b\u0438 \u043a\u0443\u0434\u0430 \u0432\u044b \u0442\u0430\u043c \u0445\u043e\u0434\u0438\u0442\u0435.<\/p>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u0430 curl \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e URL:<\/p>\n<ul>\n<li>\n<p>\u043e\u043f\u0446\u0438\u044f -f \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 &#171;fail silently&#187; (\u0442\u0438\u0445\u0443\u044e \u043d\u0435\u0443\u0434\u0430\u0447\u0443);<\/p>\n<\/li>\n<li>\n<p>\u043e\u043f\u0446\u0438\u044f -s \u0434\u0435\u043b\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0431\u0435\u0437 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441-\u0431\u0430\u0440\u0430, \u0430 <code>-S<\/code> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0438, \u0435\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0438\u0434\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a;<\/p>\n<\/li>\n<li>\n<p>\u043e\u043f\u0446\u0438\u044f -L (\u043e\u043f\u0446\u0438\u044f &#171;follow redirects&#187;) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043a \u043d\u043e\u0432\u043e\u043c\u0443 URL, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e. \u0437\u0430\u0442\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 (<code>|<\/code>) \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0432 <code>sh<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u043a\u0430\u0447\u0430\u043d\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f ollama \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c. \u041f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043c\u043e\u0434\u0435\u043b\u044c, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440.<\/p>\n<p>\u0418 \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043a\u043e\u0434 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f ollama \u0438 \u0432\u0441\u0435\u0445 \u0435\u0435 \u00ab\u043c\u043e\u0434\u0435\u043b\u0435\u0439\u00bb, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0438 \u0445\u0432\u0430\u0442\u0438\u0442:<\/p>\n<pre><code class=\"lua\">unistall_ollama() {     #Remove the ollama service:     sudo systemctl stop ollama     sudo systemctl disable ollama     sudo rm \/etc\/systemd\/system\/ollama.service     #Remove the ollama binary from your bin directory:     sudo rm $(which ollama)     #Remove the downloaded models and Ollama service user and group:     sudo rm -r \/usr\/share\/ollama     sudo userdel ollama     sudo groupdel ollama     #Remove installed libraries:     sudo rm -rf \/usr\/local\/lib\/ollama } <\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a \u043ellama, \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0432\u0435\u0441\u0438\u0442\u044c \u043d\u0430 \u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438:<\/p>\n<pre><code class=\"lua\">run_deepseek() {     ollama run ${DEEPSEEK_MODEL} } <\/code><\/pre>\n<p>\u0410 \u0432\u043e\u0442 \u0442\u0430\u043a \u0432 \u043c\u043e\u0435\u043c \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437 Yocto \u043b\u043e\u0433\u043e\u0432 \u0432 Deepseek, \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u043d\u0430\u0434\u0435\u044e\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u044e, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0443\u0441\u043f\u0435\u0432\u0430\u044e, \u043d\u0443 \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e. \u041d\u0443\u0436\u043d\u043e \u0438\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043b\u0438 \u043a\u043e\u0434 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f. \u0422\u0443\u0442 \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e\u0431\u044b \u043b\u043e\u0433\u0438 \u0431\u044b\u043b\u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438,  \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0437\u0430\u043c\u0435\u0442\u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c. \u041d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043b\u043e\u0433\u0430\u0445 \u0442\u043e\u0447\u043d\u043e \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044c \u0437\u0430\u0432\u0430\u043b\u0438\u0442\u0435, \u0431\u0443\u0444\u0435\u0440 \u043a\u0430\u043a\u043e\u0439 \u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0438\u0442\u044c\u0441\u044f \u0438 \u0432\u0441\u0435 (\u043a\u0430\u043a \u043f\u043e \u043c\u043d\u0435).<\/p>\n<pre><code class=\"lua\">yocto_analyze_deepseek() {   local cmd_runs=\"$1\"   DOCKER_DIR=\"docker\/ubuntu_22_04\"   CONTAINER_NAME=\"ubuntu_22_04\"   cmd_init=\"cd \/mnt\/data; MACHINE=$YO_M source .\/setup-environment build\"   start_cmd_docker \"${cmd_init}; ${cmd_runs}\" | ollama run ${DEEPSEEK_MODEL} '\u043f\u0440\u043e\u0432\u0435\u0434\u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u043b\u043e\u0433\u043e\u0432' } <\/code><\/pre>\n<h3>\u041f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u0441\u0431\u043e\u0440\u043a\u0438, \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 ISO \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 Ubuntu \u043f\u043e \u0441\u0435\u0442\u0438<\/h3>\n<p>\u0418\u0442\u0430\u043a \u043a\u043e\u0434 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043f\u043e \u0441\u0435\u0442\u0438:<\/p>\n<pre><code class=\"lua\">start_ubuntu_24_04() {   IMAGE_NAME=\"ubuntu-24.04.2-desktop-amd64.iso\"   IMAGE_UBUNTU_URL=\"http:\/\/releases.ubuntu.com\/24.04.2\"   DOCKER_DIR='docker\/dhcp_tftp_nfs'   stop_docker \"dhcp_tftp_nfs:buster-slim\"   mount_raw_ubuntu &amp;&amp; start_session_docker } <\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 <code>mount_raw_ubuntu<\/code> ISO \u043e\u0431\u0440\u0430\u0437\u0430 \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430 \u0441\u0435\u0441\u0441\u0438\u044f \u0434\u043e\u043a\u0435\u0440\u0430 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438:<\/p>\n<pre><code class=\"lua\">mount_raw_ubuntu() {   IMAGE_DIR=\"${DOWNLOAD_UBUNTU}\"   MOUNT_DIR=\"${DOWNLOAD_UBUNTU}\/tmp_mount\"   download_ubuntu || return 1   download_netboot_ubuntu || return 2   mount_raw_image || return 3    local pxe_default=\"${DOWNLOAD_UBUNTU}\/netboot\/pxelinux.cfg\/default\"   local kernel=\"${MOUNT_BASE_DIR}\/part1\/casper\/vmlinuz\"   local initrd=\"${MOUNT_BASE_DIR}\/part1\/casper\/initrd\"   local netboot=\"${DOWNLOAD_UBUNTU}\/netboot\"   add_menu_item_netboot \"${pxe_default}\"  \"${MENU_ITEM_UBUNTU}\"   initrd_and_kernel_to_netboot \"${kernel}\" \"${initrd}\" \"${netboot}\"   docker_dhcp_tftp_reconfig_net   change_bootloader_name_in_dhcp \"pxe\"   create_mount_point_for_docker \"tftp\" \"${netboot}\"   create_mount_point_for_docker \"nfs\" \"${MOUNT_BASE_DIR}\/part1\" } <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u0436\u0435, \u043a\u0430\u043a \u0438 \u0432 <code><strong>mount_raw_rpi4<\/strong><\/code> \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432 ISO \u043c\u043d\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c, \u0430 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u0435 \u043c\u0435\u043d\u044e \u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 (\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a) \u0434\u043b\u044f \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b <code><strong>pxelinux.0<\/strong><\/code> \u0432 \u043a\u043e\u0440\u043d\u0435 TFTP \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u044d\u0442\u043e\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0438\u0437 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u0440\u0445\u0438\u0432\u0430 netboot.tar.gz, \u0432 \u043d\u0435\u043c \u0443\u0436\u0435 \u0432\u0441\u0435 \u0435\u0441\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u043a\u0430\u0437\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044e.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u044e \u043f\u0443\u043d\u043a\u0442 \u043c\u0435\u043d\u044e \u0432 \u0448\u0442\u0430\u0442\u043d\u044b\u0439 \u0423\u0431\u0443\u043d\u0442\u043e\u0432\u0441\u043a\u0438\u0439 Netboot, \u0434\u0435\u043b\u0430\u044e \u0435\u0433\u043e \u0441\u0430\u043c\u044b\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c:<\/p>\n<pre><code class=\"lua\">... label ubuntu menu label ^ubuntu-24.04.2-desktop-amd64 kernel ubuntu-24.04.2-desktop-amd64\/vmlinuz append initrd=ubuntu-24.04.2-desktop-amd64\/initrd root=\/dev\/nfs netboot=nfs nfsroot=10.0.7.1:\/nfs ip=dhcp nomodeset <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u044f\u0434\u0440\u043e \u0438 initrd, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u0442\u043e\u0433\u043e \u0436\u0435 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 \u0447\u0442\u043e \u0438 \u043a\u043e\u0440\u043d\u0435\u0432\u0430\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u043f\u043e NFS. \u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u0434\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0447\u0442\u043e \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 PXE \u043e NFS \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u0438 \u043d\u0435 \u0443\u043c\u0435\u0435\u0442, \u0442\u0430\u043a \u0447\u0442\u043e \u044f\u0434\u0440\u043e \u0438 initrd \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043d\u0430 tftp \u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043f\u0443\u043d\u043a\u0442 \u043c\u0435\u043d\u044e, \u0442\u043e \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 <code>ubuntu-24.04.2-desktop-amd64<\/code>, \u043e\u043d \u043d\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u043f\u0435\u0442\u044c \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 5 \u0441\u0435\u043a.<\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u0441 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0440\u0435\u0436\u0438\u043c\u043e\u043c (\u0443 \u043c\u0435\u043d\u044f 4k \u043c\u043e\u043d\u0438\u0442\u043e\u0440 \u0438 \u043b\u043e\u0433\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u044f\u0434\u0440\u0430 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435), \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 nomodeset, \u0442\u0430\u043a \u044f \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u043b \u0436\u0443\u0442\u043a\u043e \u043d\u0430\u0434\u043e\u0435\u0434\u043b\u0438\u0432\u043e\u0435 \u043e\u043a\u043d\u043e:<\/p>\n<pre><code>Oh no! Something has gone wrong A problem has occured and the system can't recover Please log out and try again <\/code><\/pre>\n<p>\u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e\u0435 \u043e\u043a\u043d\u043e  &#171;What do you want &#8230;&#187;<br \/> \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c:<\/p>\n<pre><code>   Install Ubuntu    Try Ubuntu <\/code><\/pre>\n<p>\u0432\u044b\u0431\u0440\u0430\u0432 Try Ubuntu, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0436\u0430\u0442\u044c \u043f\u043e\u044f\u0432\u0438\u0432\u0448\u0443\u044e\u0441\u044f \u043a\u043d\u043e\u043f\u043a\u0443 Close \u0438 \u043e\u043a\u0443\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u043c\u0438\u0440 \u043f\u0430\u043c\u044f\u0442\u0438 \u0442.\u0435. \u0435\u0441\u0442\u044c \u0432 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u044b\u0439 live \u043e\u0431\u0440\u0430\u0437 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435, \u043a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f \u043d\u0435 \u043e\u0442\u0445\u043e\u0434\u044f \u043e\u0442 \u0436\u0435\u043b\u0435\u0437\u0430, \u043d\u0443 \u043e \u043f\u0443\u043d\u043a\u0442\u0435 Install Ubuntu \u044f \u043d\u0430\u0432\u0435\u0440\u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u0432\u044b \u0438 \u0442\u0430\u043a \u0432\u0441\u0435 \u0437\u043d\u0430\u0435\u0442\u0435.<\/p>\n<p>\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b, \u0442\u0430\u043a \u044d\u0442\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0432 Ubuntu \u0447\u0435\u0440\u0435\u0437 Wifi \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442.\u0435. \u043f\u043e \u0441\u0435\u0442\u0435\u0432\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c rootfs \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 (NFS), \u0430 \u0432\u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u043f\u043e\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u0447\u0435\u0440\u0435\u0437 Wifi. \u0412 Ubuntu \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0430\u043c\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f. \u0412\u0435\u0434\u044c \u0448\u043b\u044e\u0437\u043e\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043f\u043e NFS \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u0430\u0448 \u0445\u043e\u0441\u0442 (10.0.7.1), \u0430 \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 WiFi \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430, \u043d\u0443\u0436\u043d\u043e \u044d\u0442\u043e\u0442 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u043f\u0435\u0440\u0435\u0431\u0438\u0442\u044c. Ubuntu \u0441\u0430\u043c\u0430 \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0430\u0441\u044c, \u0430 \u0432\u043e\u0442 Raspbian \u0443\u0436\u0435 \u043d\u0435\u0442.<\/p>\n<p>\u0415\u0449\u0435 \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 &#171;ubuntu-24.04.2-desktop-amd64.iso&#187; \u043d\u0430 \u0436\u0435\u0441\u0442\u043a\u0438\u0439 \u0434\u0438\u0441\u043a, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0440\u0435\u0440\u0432\u0430\u043b\u0430\u0441\u044c \u0438\u0437 \u0437\u0430 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u044b hash \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0435\u0445\u0430\u043b\u0438 \u043f\u043e NFS c \u0445\u043e\u0441\u0442\u0430. \u0414\u0438\u0441\u043a ISO \u0431\u043e\u043b\u044c\u0448\u0435 5\u0413\u0431, \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0435\u0449\u0435 \u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0443\u043c\u043c\u0430\u043c\u0438, \u0433\u0434\u0435 \u0442\u043e \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u044b\u0441\u0442\u0440\u0435\u043d\u044c\u043a\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 22.04, \u0441 \u043d\u0438\u043c \u0443 \u043c\u0435\u043d\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435 \u0431\u044b\u043b\u043e, \u0438\u043c\u0435\u0439\u0442\u0435 \u0438 \u044d\u0442\u043e \u0432\u0432\u0438\u0434\u0443.<\/p>\n<pre><code class=\"lua\">    IMAGE_NAME=\"ubuntu-22.04.1-desktop-amd64.iso\"     #IMAGE_NAME=\"ubuntu-24.04.2-desktop-amd64.iso\" <\/code><\/pre>\n<h3>\u0421\u0430\u043c\u0430\u044f \u043a\u0440\u0430\u0441\u0438\u0432\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430 \u0434\u043b\u044f \u0434\u0440\u0443\u0437\u0435\u0439 \u042d\u043b\u0432\u0438\u0441\u0430<\/h3>\n<p>\u0412\u044b \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u043f\u043e\u0447\u0435\u043c\u0443 \u042d\u043b\u0432\u0438\u0441:<\/p>\n<p>\u0412\u043e \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u043e\u0447\u0442\u0438 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0444\u0438\u0440\u043c\u0435 \u0435\u0441\u0442\u044c RockStar(s), \u044d\u0442\u0430\u043a\u0438\u0435 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u044b \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0441\u0435 \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f, \u043e\u043d\u0438 \u043f\u043e\u0439\u043c\u0443\u0442.<\/p>\n<p>\u0412\u043e \u0432\u0442\u043e\u0440\u044b\u0445 \u044f \u0438\u0441\u043a\u0430\u043b \u0441\u0430\u043c\u0443\u044e \u0434\u043e\u0440\u043e\u0433\u0443\u044e \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u043f\u043b\u0430\u0442\u0443. \u0414\u043e\u043c\u0430 \u043d\u0435 \u043d\u0430\u0448\u0435\u043b, \u0443 \u043c\u0435\u043d\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u043d\u0430\u043d\u043e\u0432\u0430\u044f \u0440\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u043a\u0430\u043a\u0430\u044f \u0442\u043e, \u043f\u043b\u0430\u0442\u044b \u0434\u0435\u0448\u0435\u0432\u044b\u0435 \u0438 \u044d\u0442\u043e \u043d\u0435 \u0441\u043e\u043b\u0438\u0434\u043d\u043e. \u0410 \u0432\u043e\u0442 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0435, \u0442\u0430\u043a\u0430\u044f \u043f\u043b\u0430\u0442\u0430 \u043d\u0430\u0448\u043b\u0430\u0441\u044c \u0438 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u0441\u0442\u043e\u043b\u0435, \u043e\u043d\u0430 \u0441\u0442\u043e\u0438\u0442 \u043a\u0430\u043a \u0434\u0432\u0430 \u043c\u043e\u0438\u0445 \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430, \u043e\u043d\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442. \u0415\u0435 \u0438 \u0431\u0443\u0434\u0443 \u0433\u0440\u0443\u0437\u0438\u0442\u044c.<\/p>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u044c U-Boot \u043e\u0434\u043d\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439. \u041f\u043b\u0430\u0442\u0430 \u043e\u0442 &#171;\u042d\u043b\u0432\u0438\u0441&#187;, \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435 &#171;Skif&#187;. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u043b\u0430\u0442\u044b \u0434\u0432\u0435 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u0430\u044f, \u043d\u043e \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u0441\u0432\u044f\u0437\u043a\u0435, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043c \u0438\u0445 \u0437\u0430 \u043e\u0434\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c U-Boot.<\/p>\n<p>\u0418 \u043a\u0441\u0442\u0430\u0442\u0438, \u0432 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u043d\u0430 \u043f\u043b\u0430\u0442\u0443 \u043d\u0435 \u043d\u0430\u0448\u0435\u043b \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0440\u0435\u0448\u0438\u043b \u044d\u0442\u043e \u043a\u0430\u043a \u043d\u0438\u0431\u0443\u0434\u044c \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c. \u0412\u043e\u0442 \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0434\u043e\u043a\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043f\u043e \u0441\u0435\u0442\u0438:<\/p>\n<pre><code class=\"lua\">start_elvees_skif_24_06() {   local files=(       \"Image\"       \"rootfs.tar.gz\"       \"elvees\/mcom03-elvmc03smarc-r1.0-elvsmarccb-r3.2.1.dtb\"   )   IMAGE_DTB=\"${files[2]}\"   IMAGE_NAME_SHORT=\"empty\"   IMAGE_DIR=\"${BUILD_DIR}\/buildroot\/output\/images\"   local dtb=\"${IMAGE_DIR}\/${IMAGE_DTB}\"   local kernel=\"${IMAGE_DIR}\/${files[0]}\"   local rootfs=\"${IMAGE_DIR}\/${files[1]}\"   local nfs_dir=\"${DOCKER_DIR_MOUNT}\/nfs\"   clean_tmp_mount_dir \"${nfs_dir}\"    if [[ -f \"${dtb}\" &amp;&amp; -f \"${kernel}\" &amp;&amp; -f \"${rootfs}\"  ]]; then       echo \"The version build from source code is loaded: ${IMAGE_DIR}\"       extract_tar_archive \"${rootfs}\" \"${nfs_dir}\" \"sudo\" || return 1   else       IMAGE_DIR=\"${DOWNLOAD_SKIF}\/2024.06\"       echo \"The version will be downloaded: ${IMAGE_DIR}\"       IMAGE_SKIF_URL=\"https:\/\/dist.elvees.com\/mcom03\/buildroot\/2024.06\/linux510\/images\"       download_files \"${IMAGE_DIR}\" \"${IMAGE_SKIF_URL}\" \"${files[@]}\" || return 2       extract_tar_archive \"${IMAGE_DIR}\/${files[1]}\" \"${nfs_dir}\" \"sudo\" || return 3   fi    mkdir -p \"${IMAGE_DIR}\/pxelinux.cfg\"   local pxe_default=\"${IMAGE_DIR}\/pxelinux.cfg\/default\"   touch \"${pxe_default}.orig\"   add_menu_item_netboot \"${pxe_default}\" \"${MENU_ITEM_SKIF}\"   docker_dhcp_tftp_reconfig_net   create_mount_point_for_docker \"tftp\" \"${IMAGE_DIR}\"    stop_docker \"dhcp_tftp_nfs:buster-slim\"   DOCKER_DIR='docker\/dhcp_tftp_nfs'   start_session_docker } <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0434\u0432\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438:<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0441\u043e\u0431\u0440\u0430\u043d\u0430 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Buildroot, \u044d\u0442\u043e \u0440\u0435\u0436\u0438\u043c \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0434\u043e\u043a\u0435\u0440, \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0440\u0435\u0436\u0438\u043c \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 (\u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0438\u0436\u0435), \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b\u0438 \u043f\u043b\u0430\u0442\u0443, \u0447\u0442\u043e \u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b\u0438.<\/p>\n<p>\u0412\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u0438 \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430\u044f, \u0442\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043a \u043f\u043b\u0430\u0442\u0435 \u043f\u043e ssh \u043f\u0440\u044f\u043c\u043e \u0437\u0434\u0435\u0441\u044c \u0436\u0435 \u043d\u0430 \u0445\u043e\u0441\u0442\u0435, \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c <code>rootfs.tar.gz<\/code> \u0430\u0440\u0445\u0438\u0432 \u043f\u043e \u0441\u0435\u0442\u0438 \u043d\u0430 EMMC \u0434\u0438\u0441\u043a \u043f\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 &#171;\u042d\u043b\u0432\u0438\u0441&#187;, \u0442.\u0435. \u0432\u0441\u0435 \u043a\u0430\u043a \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043e.<\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u0440\u0435\u0436\u0438\u043c &#171;\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c&#187;, \u044d\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u0441\u0435 \u0437\u0434\u0435\u0441\u044c \u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u0438 \u0443 \u0432\u0430\u0441 \u043d\u0435\u0442 4 \u0438\u043b\u0438 5 \u0447\u0430\u0441\u043e\u0432 \u043d\u0430 \u0441\u0431\u043e\u0440\u043a\u0443. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043f\u0440\u0435\u0434\u043a\u043e\u043c\u043f\u0438\u043b\u0435\u043d\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u044b \u0441 \u0438\u0445 \u0441\u0430\u0439\u0442\u0430.<\/p>\n<p>\u0412\u0441\u0435\u0433\u043e \u0442\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0438 \u0444\u0430\u0439\u043b\u0430 \u0438 \u044d\u0442\u043e \u0437\u0434\u043e\u0440\u043e\u0432\u043e, \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0442\u043e \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u043e\u0432.<\/p>\n<p>\u0412\u043e\u0442 \u043e\u043d\u0438 \u044d\u0442\u0438 \u0444\u0430\u0439\u043b\u044b: \u044f\u0434\u0440\u043e, dtb \u0438 \u043a\u043e\u0440\u043d\u0435\u0432\u0430\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043f\u0440\u0438\u0447\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0432 \u0430\u0440\u0445\u0438\u0432\u0435.<\/p>\n<pre><code class=\"lua\">local files=(     \"Image\"     \"rootfs.tar.gz\"     \"elvees\/mcom03-elvmc03smarc-r1.0-elvsmarccb-r3.2.1.dtb\" ) <\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e, \u043e\u0442\u0434\u0430\u0435\u043c \u044f\u0434\u0440\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0443 TFTP \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0433\u0434\u0435 \u044d\u0442\u043e \u0432\u0441\u0435 \u0438\u043b\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0438\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f, \u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u0440\u043d\u0435\u0432\u0443\u044e \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043f\u043e \u043f\u0443\u0442\u0438 <code>\/tmp\/docker\/nfs<\/code>, \u043f\u043e\u0434 \u0440\u0443\u0442\u043e\u043c. \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0430 \u043d\u0430 \u0444\u0430\u0439\u043b\u044b \u043e\u0442 \u0438\u043c\u0435\u043d\u0438 root, \u0438\u043d\u0430\u0447\u0435 systemd \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u0439 rootfs \u043f\u043e NFS \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u0434\u0430 \u0438 \u0435\u0449\u0435 \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e \u043e\u0442\u0432\u0430\u043b\u0438\u0442\u044c\u0441\u044f, \u043f\u0440\u0430\u0432\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u043d\u0430\u0434\u043e \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u0442\u044c, \u0438\u043d\u0430\u0447\u0435 \u043d\u0438\u043a\u0430\u043a.<\/p>\n<p>\u041f\u0440\u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0435 \u0430\u0440\u0445\u0438\u0432\u0430 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d \u043f\u0430\u0440\u043e\u043b\u044c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430. \u0414\u043b\u044f U-Boot \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c &#171;pxelinux.cfg\/default&#187; \u0432 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 TFTP \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a\u043e\u0439:<\/p>\n<pre><code class=\"dart\">default linux prompt 0 timeout 50 label linux menu label Download Linux kernel Image devicetree IMAGE_DTB append root=\/dev\/nfs nfsroot=NFS_IP_ADDRESS:\/nfs,vers=3 rw earlycon console=ttyS0,115200 console=tty1 ip=dhcp <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430, \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0430 \u0437\u0430\u043c\u0435\u043d\u0430 \u0441\u0442\u0440\u043e\u043a:<\/p>\n<p>&#171;IMAGE_DTB&#187; \u043d\u0430 =&gt;<br \/> elvees\/mcom03-elvmc03smarc-r1.0-elvsmarccb-r3.2.1.dtb<\/p>\n<p>\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 &#171;NFS_IP_ADDRESS&#187; =&gt; \u043d\u0430 10.0.7.1 (\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f &#171;IP_TFTP&#187; \u0432 func.sh)<\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u0439 \u043f\u043b\u0430\u0442\u0435 Skif \u043e\u0442 \u042d\u043b\u0432\u0438\u0441\u0430, \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u0440\u043d\u0443\u0442\u044c U-Boot \u0438 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0435\u0433\u043e <strong>\u00ab\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u043f\u043e \u0441\u0435\u0442\u0438\u00bb<\/strong>, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u0430\u0431\u0435\u043b\u044c USB-typeC, \u043d\u0443\u0436\u043d\u043e \u0438\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0432\u0430\u0448 \u0445\u043e\u0441\u0442 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0438 \u043f\u043b\u0430\u0442\u0443.<\/p>\n<p>\u0418 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"bash\">start_elvees_skif_netboot() {     expect_script=$(mktemp)     cat &lt;&lt; 'EOF' &gt; \"$expect_script\" #!\/usr\/bin\/expect -f set timeout -1 set server_ip [lindex $argv 0]; spawn picocom --baud 115200 \/dev\/ttyUSB0  expect {     \"Hit any key to stop autoboot\" {         send \" \\r\"         exp_continue     }     \"=&gt;\" {         send \"setenv serverip $server_ip\\r\"         send \"run bootcmd_pxe\\r\"         exp_continue     }     \"login:\" {         sleep 0.5         interact         exit 0     }     eof     timeout } EOF     chmod +x \"$expect_script\"     \"$expect_script\" \"${IP_TFTP}\"     rm -f \"$expect_script\" } <\/code><\/pre>\n<p>\u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0442\u043e \u043e\u043d\u0430 bash, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a, \u044d\u0442\u043e \u0433\u0438\u0431\u0440\u0438\u0434, \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u044f\u0446\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e EOF(\u0430) &#8212; \u043c\u0430\u0440\u043a\u0435\u0440\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u043a\u043e\u043d\u0446\u0430 \u0444\u0430\u0439\u043b\u0430.<br \/> \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0435\u043a\u0446\u0438\u044f \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0441 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \/tmp, bash \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0435\u043c\u0443 \u043e\u0434\u043d\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0441\u0440\u0435\u0434\u044b \u0441 IP \u0430\u0434\u0440\u0435\u0441\u043e\u043c NFS \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (\u0443 \u043c\u0435\u043d\u044f \u043e\u0434\u0438\u043d \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043b\u044f TFTP \u0438 NFS).<\/p>\n<p>\u041e\u0431\u043e\u0436\u0430\u044e expect, \u043e\u043d \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e\u0442 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0435\u0433\u043e \u043d\u0430\u0442\u0440\u0430\u0432\u0438\u043b\u0438.<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u044d\u0442\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0443\u0441\u043a \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 (UART), \u0430 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u0438 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0448 U-Boot, \u0437\u0430\u043f\u0443\u0441\u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c, \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0435\u043c\u0443 ip \u0430\u0434\u0440\u0435\u0441, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u043d \u0441\u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a TFTP \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0438 \u0434\u0430\u043b\u0435\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0440\u0435\u0436\u0438\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438.<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e U-Boot \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 \u043d\u0430\u0439\u0434\u0435\u0442 \u0435\u0435 \u043f\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c\u0443 \u043f\u0443\u0442\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e &#171;pxelinux.cfg\/default&#187;, \u043d\u0443 \u0430 \u0434\u0430\u043b\u044c\u0448\u0435 U-Boot \u0433\u0440\u0443\u0437\u0438\u0442 \u044f\u0434\u0440\u043e, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u0433\u0440\u0443\u0437\u0438\u0442 DTB \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u044b, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u044f\u0434\u0440\u0430 \u0443 \u043d\u0435\u0433\u043e \u0442\u0430\u043a\u0436\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u043d \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044f\u0434\u0440\u0443 \u0438 \u0435\u0433\u043e \u043c\u0438\u0441\u0441\u0438\u044f \u043d\u0430 \u044d\u0442\u043e\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0438 \u044f\u0434\u0440\u043e \u0441\u043c\u043e\u0433\u043b\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0435\u0442\u0435\u0432\u0443\u044e \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 NFS, \u0442\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043f\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u044e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f &#171;login:&#187; \u0438 \u0442\u043e\u0433\u0434\u0430 expect \u0441\u043d\u043e\u0432\u0430 \u0432\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0432 \u0438\u0433\u0440\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0430\u0437 \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u0432 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c.<\/p>\n<p>\u0418 \u043d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0435, \u043c\u043e\u0436\u043d\u043e \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u043b\u043e\u0433\u0438\u043d \u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<\/p>\n<p>\u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u044b Skif \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439:<\/p>\n<pre><code class=\"lua\">DOWNLOAD_DIR=\"$HOME\/distrib\" DOWNLOAD_SKIF=\"${DOWNLOAD_DIR}\/skif\" BUILD_DIR=\"${DOWNLOAD_SKIF}\/mcom03-defconfig-src\"  build_elvees_skif_24_06() {   local download=\"${DOWNLOAD_SKIF}\"   local base_url=\"https:\/\/dist.elvees.com\/mcom03\/buildroot\/2024.06\/linux510\"   local file=\"mcom03-defconfig-src.tar.gz\"   if [ ! -d \"${BUILD_DIR}\" ]; then       download_files \"${download}\" \"${base_url}\" \"${file}\" || return 1       extract_tar_archive \"${download}\/${file}\" \"${download}\" || return 2   fi   [[ -d \"${BUILD_DIR}\" ]] || { echo \"Build dir ${BUILD_DIR} =&gt; not found for Skif board, exiting ...\"; return 1; }   cd \"${BUILD_DIR}\"   export DOCKERFILE=Dockerfile.centos8stream; export ENABLE_NETWORK=1;   .\/docker-build.sh make mcom03_defconfig   .\/docker-build.sh make   cd ${CURDIR} } <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0441\u0431\u043e\u0440\u043a\u0430 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 buildroot \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0434\u043e\u043a\u0435\u0440\u0435 \u043e\u0442 &#171;\u042d\u043b\u0432\u0438\u0441\u0430&#187;, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0433\u0434\u0435 \u0442\u043e 4 \u0438\u043b\u0438 5 \u0447\u0430\u0441\u043e\u0432, \u044d\u0442\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430.<\/p>\n<p>\u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0441\u0430\u043c\u0430\u044f \u043a\u0440\u0430\u0441\u0438\u0432\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430 \u0443 \u043c\u0435\u043d\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<br \/> (\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043e\u043d\u0430 \u043d\u0435 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0430\u0441\u0438\u0432\u0430\u044f, \u043a\u0430\u043a \u0437\u043e\u043b\u043e\u0442\u0430\u044f, \u043d\u043e \u0442\u043e\u0436\u0435 \u043d\u0438\u0447\u0435\u0433\u043e)<\/p>\n<pre><code class=\"json\">\"actionButtons\": {     \"reloadButton\": null,     \"loadNpmCommands\": false,     \"commands\": [         {             \"name\": \"StartElveesSkif-24.06\",             \"singleInstance\": true,             \"color\": \"#00008b\",             \"command\": \"cd .vscode\/yo; source func.sh; start_elvees_skif_24_06\",         },         {             \"name\": \"Elvees\ud83d\uddb2Netboot\",             \"singleInstance\": true,             \"color\": \"#000000\",             \"command\": \"cd .vscode\/yo; source func.sh; start_elvees_skif_netboot\",         }     ] } <\/code><\/pre>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u0442\u0435\u043a\u0441\u0442\u0430 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0432\u0435\u0441\u0438\u0442\u044c UTF-8 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b, \u0438\u0445 \u043d\u0435 \u0442\u0430\u043a \u043c\u043d\u043e\u0433\u043e, \u043d\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0438 \u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432:<\/p>\n<pre><code class=\"json\">{     \"name\": \"Build\ud83d\uddb2Elvees\",     \"singleInstance\": true,     \"color\": \"#007fff\",     \"command\": \"cd .vscode\/yo; source func.sh; build_elvees_skif_24_06\", }, <\/code><\/pre>\n<p>\u041e\u0431\u0449\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:<\/p>\n<ul>\n<li>\n<p>\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u0430\u0431\u0435\u043b\u044c USB-typeC;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043a\u0430\u0431\u0435\u043b\u044c \u043e\u0442 \u0445\u043e\u0441\u0442\u0430 \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0438\u0437 \u043f\u043e\u0440\u0442\u043e\u0432 \u043f\u043b\u0430\u0442\u044b;<\/p>\n<\/li>\n<li>\n<p>\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u043a\u0435\u0440 (\u043a\u043d\u043e\u043f\u043a\u0430 StartElveesSkif-24.06);<\/p>\n<\/li>\n<li>\n<p>\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441\u0435\u0441\u0441\u0438\u044f \u0434\u043b\u044f U-Boot (\u043a\u043d\u043e\u043f\u043a\u0430 Elvees\ud83d\uddb2Netboot);<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u043b\u0430\u0442\u0443.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0412\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0438 \u0432 VSCode \u043f\u0430\u0440\u043e\u0432\u043e\u0437\u0438\u043a\u043e\u043c<\/h3>\n<p>\u041a\u043d\u043e\u043f\u043a\u0438 \u044f \u0431\u0443\u0434\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u043f\u043b\u0430\u0433\u0438\u043d <strong>\u00abseunlanlege.action-buttons\u00bb<\/strong> \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043f\u0430\u0440\u043e\u0432\u043e\u0437\u0438\u043a\u0430, \u0442\u0430\u043a \u0447\u0442\u043e\u0431\u044b \u043d\u0430 \u0432\u0441\u0435\u0445 \u0445\u0432\u0430\u0442\u0438\u043b\u043e. \u042d\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u043a\u043d\u043e\u043f\u043a\u0430 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043c\u0435\u043d\u044e, \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0435\u0433\u043e \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u043c\u0435\u043d\u044e, \u0430 \u0441\u0430\u043c\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u043a\u043d\u043e\u043f\u043a\u0430 &#171;MenuN&#187; \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0435 \u043c\u0435\u043d\u044e, \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 (\u043a\u0440\u0443\u0433\u043e\u0432\u043e\u0439), \u043f\u043e\u043a\u0430\u0436\u0443 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435:<\/p>\n<pre><code class=\"json\">\"actionButtons\": {   \"reloadButton\": null,   \"loadNpmCommands\": false,   \"commands\": [     ...     {       \"name\": \"\u2b95 Menu2\",       \"singleInstance\": true,       \"color\": \"#000000\",       \"command\": \"cp -f .vscode\/settings.json.Menu2 .vscode\/settings.json; exit\",     }   ] } <\/code><\/pre>\n<p>\u0410 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e &#171;MenuN&#187;:<\/p>\n<pre><code class=\"json\">... {   \"name\": \"\u2b95 Menu1\",   \"singleInstance\": true,   \"color\": \"#000000\",   \"command\": \"cp -f .vscode\/settings.json.Menu1 .vscode\/settings.json; exit\", } <\/code><\/pre>\n<p>\u041e\u0447\u0435\u043d\u044c \u0440\u0430\u0441\u0441\u0442\u0440\u043e\u0438\u043b\u0441\u044f \u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043d\u0430\u0448\u0435\u043b \u0442\u0430\u043a\u0443\u044e \u0436\u0435, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0432\u0443\u044e (\u044d\u0442\u043e \u043a\u0430\u0442\u0430\u0441\u0442\u0440\u043e\u0444\u0430).<\/p>\n<pre><code class=\"dart\">\u0441\u0438\u043c\u0432\u043e\u043b \u2b95 (U+2B95) \u2014 \"Rightwards Arrow With Equilateral Arrowhead\" <\/code><\/pre>\n<p>\u041c\u043d\u0435 \u043a\u0440\u0443\u0433\u043e\u0432\u043e\u0439 \u043c\u0435\u0442\u043e\u0434 \u043d\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u0438 \u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u043d\u0430 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435, \u043a\u043e\u0433\u0434\u0430 \u0432\u0438\u0434\u043d\u043e \u0432 \u043a\u0430\u043a\u043e\u043c \u0440\u044f\u0434\u0443 \u043a\u043d\u043e\u043f\u043e\u043a \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f, \u044d\u0442\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"dart\">    #          BUILD   \u25b6Load     # Build\u25c0   LOAD    \u25b6Install     # Build\u25c0   INSTALL <\/code><\/pre>\n<p>\u0412\u0441\u0435\u0433\u043e \u0443 \u043c\u0435\u043d\u044f \u0431\u0443\u0434\u0435\u0442 \u0442\u0440\u0438 \u0443\u0440\u043e\u0432\u043d\u044f \u043c\u0435\u043d\u044e, \u044d\u0442\u043e \u0444\u0430\u0439\u043b\u044b:<\/p>\n<ul>\n<li>\n<p>settings.json.build<\/p>\n<\/li>\n<li>\n<p>settings.json.load<\/p>\n<\/li>\n<li>\n<p>settings.json.install<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043d\u043e\u043f\u043a\u0430 \u0441 \u0437\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u043c\u0438 \u0431\u0443\u043a\u0432\u0430\u043c\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0438 \u0435\u0449\u0435 \u043d\u0430 \u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0432\u0435\u0441\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435, \u0434\u043b\u044f <code>BUILD<\/code>, \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"json\">{   \"name\": \"BUILD\",   \"singleInstance\": true,   \"color\": \"#000000\",   \"command\": \"cd .vscode\/yo; source func.sh; DOCKER_DIR='docker\/ubuntu_22_04'; start_session_docker\", } <\/code><\/pre>\n<p>\u041d\u0443 \u043a\u0430\u043a \u0442\u043e \u0442\u0430\u043a, \u0447\u0435\u043c \u044d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e?<br \/> T\u0435\u043c \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0432\u0435\u0441\u0438\u0442\u044c \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0438 \u0432\u0441\u0435 \u0432\u0430\u0448\u0438 \u0444\u0438\u0440\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0442\u043e\u0440\u044b \u0438 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439, \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043a\u0430\u043a\u043e\u0439 \u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e \u0433\u0440\u0443\u043f\u043f\u0430\u043c, \u0433\u0440\u0443\u043f\u043f\u0430\u043c \u0433\u0440\u0443\u043f\u043f, \u0432\u0441\u0435 \u043a\u0430\u043a \u0432\u044b \u043b\u044e\u0431\u0438\u0442\u0435.<\/p>\n<p>\u0414\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 &#171;vscode-yocto-helper&#187; \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code class=\"bash\">curl -fsSL https:\/\/raw.githubusercontent.com\/berserktv\/vscode-yocto-helper\/refs\/heads\/master\/install.sh | sh <\/code><\/pre>\n<p>\u0438\u043b\u0438 \u0442\u0430\u043a \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c:<\/p>\n<pre><code class=\"bash\">    mkdir vscode-yocto-helper     cd vscode-yocto-helper     git clone https:\/\/github.com\/berserktv\/vscode-yocto-helper.git .vscode     code . <\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u2014 \u044d\u0442\u043e \u00ab\u0421\u0435\u0442\u0435\u0432\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438\u00bb, NFS \u044f \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b, \u043d\u0435 \u0437\u043d\u0430\u043b, \u0447\u0442\u043e \u043e\u043d\u0430 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0443\u0442\u0430\u044f. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0447\u0442\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043d\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u043e\u043a\u0435\u0440 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0445\u043e\u0441\u0442\u0430, \u044d\u0442\u043e \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e.<\/p>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0434\u043b\u044f \u041c\u0430\u0440\u0433\u0430\u0440\u0438\u0442\u044b, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 bash \u0434\u043b\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e Makefile \u0444\u0430\u0439\u043b\u043e\u0432, \u043d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0421 \u0438\u043b\u0438 \u0421++ \u0444\u0430\u0439\u043b\u0430, \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u043e\u043b\u044b\u0439 bash \u043d\u0430 Docker(\u0435) \u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e \u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0435.<\/p>\n<h3>\u041f\u043e\u0441\u0442\u0441\u043a\u0440\u0438\u043f\u0442\u0443\u043c:<\/h3>\n<p>\u041f\u043e\u043b \u0433\u043e\u0434\u0430 \u0431\u0435\u0433\u0430\u043b \u0437\u0430 \u0432\u0441\u0435\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u0430, \u043d\u0443 \u043f\u0440\u044f\u043c\u043e \u0437\u0430 \u0432\u0441\u0435\u043c\u0438 &#8212; \u0437\u0430 \u0432\u0441\u0435\u043c\u0438 \u0434\u0432\u0443\u043c\u044f. \u041a\u043d\u043e\u043f\u043a\u0443 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043b (\u0435\u0449\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e), \u043d\u0435 \u0431\u0435\u0440\u0443\u0442, \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0443 \u043d\u0438\u0445, \u043d\u0435 \u0434\u043e \u043a\u043d\u043e\u043f\u043a\u0438 \u0441\u0435\u0439\u0447\u0430\u0441, \u043d\u0443 \u0442\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u0432\u0430\u0448\u0430. \u0410 \u044f, \u0430 \u0447\u0442\u043e \u044f, \u0430 \u044f \u0432\u0441\u0435 \u0442\u0430\u043a\u0436\u0435 \u0441\u0438\u0436\u0443 \u0432 \u043f\u043e\u043b\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u0438, ebash(u) \u043d\u0430 bash(e), \u043c\u0435\u0447\u0442\u0430\u044e \u043e <strong>\u00abLUA\u00bb<\/strong> \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u044e \u0441\u043f\u0435\u0446\u0442\u0435\u0445\u043d\u0438\u043a\u0438.<\/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\/899796\/\"> https:\/\/habr.com\/ru\/articles\/899796\/<\/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<figure class=\"\"><\/figure>\n<p>\u0418\u0434\u0435\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0434\u0440\u0443\u0433 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0443 \u043c\u0435\u043d\u044f \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 2025 \u0433\u043e\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u044f \u043f\u0440\u043e\u0441\u043d\u0443\u043b\u0441\u044f 2 \u044f\u043d\u0432\u0430\u0440\u044f \u0441 \u0442\u044f\u0436\u0435\u043b\u043e\u0439 \u0433\u043e\u043b\u043e\u0432\u043e\u0439 \u0438 \u0432\u0434\u0440\u0443\u0433 \u043f\u043e\u043d\u044f\u043b \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0435, \u0447\u0442\u043e \u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u0434\u043b\u044f \u0432\u0430\u0441, \u043a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043c\u043e\u044f \u0434\u043e\u0447\u044c \u041c\u0430\u0440\u0433\u0430\u0440\u0438\u0442\u0430 \u00ab\u0434\u043b\u044f \u0442\u0435\u0445 \u043a\u0442\u043e \u0432 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435\u00bb. \u041a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043c\u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u043d\u0430 Raspberry Pi4, \u043d\u0443 \u0438\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u0444\u0435\u0440\u043c\u0430 docker(\u043e\u0432).<\/p>\n<p>\u042f \u043e\u0431\u043e\u0436\u0430\u044e Visual Studio Code, \u043d\u043e \u043c\u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0447\u0442\u043e\u0431\u044b \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0435\u0433\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445, \u0442\u0430\u0441\u043a\u0430\u0445 \u0438 launch(\u0430\u0445) \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 json \u0438 \u044f \u0440\u0435\u0448\u0438\u043b \u044d\u0442\u043e \u043e\u0431\u043e\u0439\u0442\u0438. \u041f\u043e \u0441\u0443\u0442\u0438 \u043c\u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u0430\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432 \u043c\u0435\u043d\u044e, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u043e\u0447\u0435\u043d\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043d\u0443\u0436\u043d\u044b\u0435 \u043c\u043d\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 Yocto Project \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0445 (Embedded) \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a.<\/p>\n<p>\u041d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0435 \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e\u0435 \u043c\u043d\u0435 \u043c\u0435\u043d\u044e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439, \u0430 \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u0447\u0435\u043c \u043f\u0430\u043d\u0435\u043b\u044c Status Bar \u0432 VSCode \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c, \u0431\u043b\u0438\u0436\u0435 \u043d\u0435\u043a\u0443\u0434\u0430 \u0438 \u044f \u043d\u0430\u0447\u0430\u043b \u0438\u0441\u043a\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439 \u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043b\u0430\u0433\u0438\u043d \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u044d\u0442\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c. \u0421\u0442\u0430\u0442\u044c\u044f \u0438\u0437 \u0441\u0435\u0440\u0438\u0438 DockerFace.<\/p>\n<p>\u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438:<\/p>\n<ul>\n<li>\n<p>\u0412\u044b\u0431\u043e\u0440 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043b\u044f VSCode<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0438\u0441\u044c Yocto \u043e\u0431\u0440\u0430\u0437\u0430 \u043d\u0430 SD \u043a\u0430\u0440\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438<\/p>\n<\/li>\n<li>\n<p>\u0421\u0431\u043e\u0440\u043a\u0430 Yocto \u043e\u0431\u0440\u0430\u0437\u0430 \u0432 Docker(\u0435)<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438\u0435\u043c \u0411\u0430\u0440\u043e\u043d\u0430 \u041c\u044e\u043d\u0445\u0433\u0430\u0443\u0437\u0435\u043d\u0430 \u0434\u043b\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f bash<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a Yocto \u043e\u0431\u0440\u0430\u0437\u0430 RPi \u043f\u043e\u0434 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u043e\u0439 Qemu<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 DemoMinimal \u043e\u0431\u0440\u0430\u0437\u0430 \u0438\u0437 Yocto \u043a\u043e\u0440\u043e\u0431\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c Buster Slim(\u0430) \u0434\u043b\u044f \u043a\u0440\u0443\u0442\u043e\u0439 \u0440\u0430\u0437\u0431\u043e\u0440\u043a\u0435 \u0432 \u0414\u043e\u043a\u0435\u0440\u0435<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 DHCP, TFTP \u0438 NFS \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 core-image-minimal (wic) \u043e\u0431\u0440\u0430\u0437\u0430 \u043d\u0430 rpi4 \u043f\u043e \u0441\u0435\u0442\u0438<\/p>\n<\/li>\n<li>\n<p>\u0421\u0435\u0442\u0435\u0432\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 Raspbian \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u044b Raspberry Pi4<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u0441\u0431\u043e\u0440\u043a\u0438, \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 ISO \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 Ubuntu \u043f\u043e \u0441\u0435\u0442\u0438<\/p>\n<\/li>\n<li>\n<p>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 Yocto \u043b\u043e\u0433\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Deepseek<\/p>\n<\/li>\n<li>\n<p>\u0441\u0430\u043c\u0430\u044f \u043a\u0440\u0430\u0441\u0438\u0432\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430 \u0434\u043b\u044f \u0434\u0440\u0443\u0437\u0435\u0439 \u042d\u043b\u0432\u0438\u0441\u0430<\/p>\n<\/li>\n<li>\n<p>\u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0438 \u0432 VSCode \u043f\u0430\u0440\u043e\u0432\u043e\u0437\u0438\u043a\u043e\u043c<\/p>\n<\/li>\n<\/ul>\n<h3>\u0412\u044b\u0431\u043e\u0440 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043b\u044f VSCode<\/h3>\n<p>\u041f\u043b\u0430\u0433\u0438\u043d \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f &#171;VsCode Action Buttons&#187; (seunlanlege.action-buttons), \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e \u0447\u0442\u043e \u043c\u043d\u0435 \u0438 \u0431\u044b\u043b\u043e \u043d\u0443\u0436\u043d\u043e, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u043b\u044e\u0431\u043e\u0439 bash \u043a\u043e\u0434 \u043f\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044e \u043a\u043d\u043e\u043f\u043a\u0438.<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u0441\u0430\u043c VSCode (\u0435\u0441\u043b\u0438 \u043e\u043d \u0443 \u0432\u0430\u0441 \u0435\u0449\u0435 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d), \u0442\u0430\u043a \u0438 \u0441\u0430\u043c \u043f\u043b\u0430\u0433\u0438\u043d:<\/p>\n<pre><code class=\"bash\">sudo apt install -y snap sudo snap install --classic code code --install-extension seunlanlege.action-buttons <\/code><\/pre>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 <code>.vscode\/settings.json<\/code> \u0438 \u0432\u044b\u0437\u043e\u0432 shell \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"json\">... \"actionButtons\": {     \"reloadButton\": null,     \"loadNpmCommands\": false,     \"commands\": [         {             \"name\": \"Button-1\",             \"singleInstance\": true,             \"color\": \"#007fff\",             \"command\": \".vscode\/script1.sh\",         },         {             \"name\": \"Button-N\",             \"singleInstance\": true,             \"color\": \"#ff007f\",             \"command\": \".vscode\/scriptN.sh\",         }     ] } <\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e bash \u043a\u043e\u0434, \u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438 \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u043c\u043e\u0436\u043d\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u043a\u043e\u043c\u0443 \u043a\u0430\u043a \u043d\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f.<\/p>\n<h3>\u0417\u0430\u043f\u0438\u0441\u044c Yocto \u043e\u0431\u0440\u0430\u0437\u0430 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438<\/h3>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0432 Yocto \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 microSDHC \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u0443\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u0430\u0440\u0442\u0440\u0438\u0434\u0435\u0440\u0430. \u042d\u0442\u0430 SD \u043a\u0430\u0440\u0442\u0430 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 Raspberry Pi 4, \u0438 \u043f\u043b\u0430\u0442\u0430 \u0441 \u043d\u0435\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0412\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u043c\u043d\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u043e\u0431\u0449\u0435\u043c \u0444\u0430\u0439\u043b\u0435 <code>.vscode\/yo\/func.sh<\/code><br \/> \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044f \u0431\u0443\u0434\u0443 \u043e\u0442\u0442\u0443\u0434\u0430.<\/p>\n<p>\u0418\u0442\u0430\u043a \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043e\u0431\u0440\u0430\u0437\u043e\u0432, \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 SD, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b YO_M \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 &#171;build\/conf\/local.conf&#187;, \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 dd \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>YO_EXT<\/code>.<\/p>\n<pre><code class=\"lua\">YO_EXT=\".wic .rootfs.wic .rootfs.wic.bz2 .rpi-sdimg .wic.bz2\"  find_name_image() {   IFS=$' '   YO_IMAGE_NAME=\"\"   if [ -z \"$YO_M\" ]; then echo \"MACHINE variable not found\"; return -1; fi    for ext in ${YO_EXT}; do       local find_str=$(ls -1 ${YO_DIR_IMAGE}\/${YO_M} | grep \"${YO_M}${ext}$\")       if [ -z \"$find_str\" ]; then           echo \"NAME IMAGE ${YO_M}${ext} is not found =&gt; ${YO_DIR_IMAGE}\/${YO_M}\"       else           YO_IMAGE_NAME=\"$YO_IMAGE_NAME $find_str\"           echo \"find: YO_IMAGE_NAME=$YO_IMAGE_NAME\"       fi   done    [[ -z \"${YO_IMAGE_NAME}\" ]] &amp;&amp; return 1   YO_IMAGE_NAME=$(echo \"$YO_IMAGE_NAME\" | tr '\\n' ' ')   return 0 } <\/code><\/pre>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>find_name_image<\/code> \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>YO_IMAGE_NAME<\/code>, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b \u043f\u0440\u043e\u0431\u0435\u043b\u0430\u043c\u0438.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043c\u043d\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0439\u0442\u0438 SD \u043a\u0430\u0440\u0442\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u0443\u044e \u0447\u0435\u0440\u0435\u0437 usb \u0438\u043b\u0438 \u043a\u0430\u0440\u0442\u0440\u0438\u0434\u0435\u0440, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0432\u044b\u0432\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0447\u0442\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0443\u0436\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 dd \u0432\u0441\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u0438 \u0442\u0443\u0442 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043d\u0435 \u043e\u0448\u0438\u0431\u0438\u0442\u044c\u0441\u044f.<\/p>\n<pre><code class=\"lua\">find_sd_card() {   IFS=$'\\n'   LI_DISK=\"\"   echo \"Disk devices in the system:\"   echo \"\u250c\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\"   echo \"Name | Type | Size | Model                        |\"   echo \"\u251c\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\"   lsblk -o NAME,TYPE,SIZE,MODEL | grep -E 'disk|mmcblk|sd.*'   echo \"\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\"   local bn;   local list=$(ls -l \/dev\/disk\/by-id\/usb* 2&gt;\/dev\/null)   if [ $? -eq 0 ]; then       for i in $list; do           bn=$(basename $i)           if ! echo \"$bn\" | grep -q \"[0-9]\"; then LI_DISK+=\"$bn \"; fi       done   fi    list=$(ls -l \/dev\/disk\/by-id\/mmc* 2&gt;\/dev\/null)   if [ $? -eq 0 ]; then       for i in $list; do           bn=$(basename $i)           if ! echo \"$bn\" | grep -q \"p[0-9]\"; then LI_DISK+=\"$bn \"; fi       done   fi   if [ -n \"$LI_DISK\" ]; then echo \"LIST SD card =&gt; $LI_DISK\"; return 0;   else echo \"SD card not found =&gt; exiting ...\"; return 1; fi } <\/code><\/pre>\n<p>\u0412\u0441\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>LI_DISK<\/code> \u0438 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>select_dd_info<\/code> \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0443\u043d\u043a\u0442\u043e\u0432 \u043e\u0442 1 \u0434\u043e N, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b dd \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0437\u0430 \u0438 \u0434\u0438\u0441\u043a\u0430.<\/p>\n<p>\u0414\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0442\u043e \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c, \u0432\u0432\u0435\u0441\u0442\u0438 \u043d\u043e\u043c\u0435\u0440 \u0438 \u043d\u0430\u0436\u0430\u0442\u044c \u0432\u0432\u043e\u0434, \u0437\u0430\u043f\u0438\u0441\u044c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b sudo, \u0442\u0430\u043a \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0431\u043e\u0440\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043e\u0431\u0440\u0430\u0437\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u0430\u0440\u0445\u0438\u0432\u0435 bz2, \u0442\u043e \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u043e\u0431\u0440\u0430\u0437 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d.<\/p>\n<pre><code class=\"lua\">select_dd_info() {   local j=1   IFS=$' '   for i in $LI_DISK; do       for image in $YO_IMAGE_NAME; do           if echo \"$image\" | grep -q \"\\.wic\\.bz2\"; then               echo \"$j) bzip2 -dc $image | sudo dd of=\/dev\/$i bs=1M\"           else               echo \"$j) dd if=$image of=\/dev\/$i bs=1M\"           fi           j=$((j+1))       done   done    echo -n \"=&gt; Select the option. WARNING: the data on the disk will be DELETED:\"   read SEL    j=1   for i in $LI_DISK; do       for image in $YO_IMAGE_NAME; do           if [ $SEL == \"$j\" ]; then               mount | grep \"^\/dev\/$i\" | awk '{print $1}' | xargs -r sudo umount               if echo \"$image\" | grep -q \"\\.wic\\.bz2\"; then                   echo \"bzip2 -dc $image | sudo dd of=\/dev\/$i bs=1M\"                   bzip2 -dc $image | sudo dd of=\/dev\/$i bs=1M; sync               else                   echo \"sudo dd if=$image of=\/dev\/$i bs=1M\"                   sudo dd if=$image of=\/dev\/$i bs=1M; sync               fi           fi           j=$((j+1))       done   done } <\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u0434\u0438\u0441\u043a\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b, \u0442\u043e \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b. \u0414\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>sdcard_deploy<\/code>:<\/p>\n<pre><code class=\"lua\">sdcard_deploy() {   if find_sd_card &amp;&amp; find_name_image; then       cd \"${YO_DIR_IMAGE}\/${YO_M}\"       select_dd_info   fi } <\/code><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0437 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 .vscode\/yo\/func.sh \u043b\u0443\u0447\u0448\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043a\u043e\u043b\u043e\u0442\u0438\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438 \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c, \u043e\u043d\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f:<\/p>\n<p>\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0435, \u0442\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435, \u0442\u043e \u0435\u0449\u0435 \u043a\u0430\u043a\u0438\u0435 \u043d\u0438\u0431\u0443\u0434\u044c \u0438 \u0442\u043e \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043d\u043e\u0441\u0438\u0442\u044c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442, \u043f\u043e\u043a\u0430\u0436\u0443 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 <code>.vscode\/yo\/sdcard_deploy.sh<\/code>:<\/p>\n<pre><code class=\"lua\">#!\/bin\/bash this_f=$(readlink -f \"$0\") this_d=$(dirname \"$this_f\") source $this_d\/func.sh sdcard_deploy <\/code><\/pre>\n<p>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043e\u0434\u0438\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e\u0434\u043d\u0443 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f.<\/p>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u044b readlink \u0438 dirname \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0445 \u043f\u0443\u0442\u0435\u0439 \u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0438 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430, \u0430 \u0442\u043e \u0441 \u043f\u0443\u0442\u044f\u043c\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u0443\u0442\u0430\u043d\u0438\u0446\u0430, \u0430 \u0442\u0430\u043a \u043f\u0443\u0442\u044c \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439 \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435.<\/p>\n<p>\u0418\u0442\u0430\u043a \u043d\u0430\u0436\u0430\u043b \u043a\u043d\u043e\u043f\u043a\u0443 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f VSCode, \u0432\u044b\u0431\u0440\u0430\u043b \u043e\u0431\u0440\u0430\u0437 \u0438 \u0434\u0438\u0441\u043a \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438, \u0438 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0441\u044f <code>.vscode\/settings.json<\/code>:<\/p>\n<pre><code class=\"json\">{     \"name\": \"SDcardDeploy\",     \"singleInstance\": true,     \"color\": \"#007fff\",     \"command\": \"cd .vscode\/yo; .\/sdcard_deploy.sh\", } <\/code><\/pre>\n<p>\u0414\u043b\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430 &#171;seunlanlege.action-buttons&#187; \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f .vscode, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u043c\u0435\u043d\u044f\u044e \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u044d\u0442\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u0430, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043e\u043a \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 &#171;YO_R&#187;<br \/> \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0435\u0441\u043b\u0438 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0443\u043a\u0430\u0437\u0430\u043d \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e:<\/p>\n<pre><code class=\"lua\"># \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 yocto, \u0433\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u0442\u0430\u043b\u043e\u0433 build, \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 YO_R=\"..\/..\" find_setup_env() {     if [ -f \"${YO_R}\/setup-environment\" ]; then return 0; fi     local tmp_path=\"..\"     for i in {1..7}; do         if [ -f \"${tmp_path}\/setup-environment\" ]; then             export YO_R=$(realpath \"${tmp_path}\")             return 0;         fi         tmp_path=\"${tmp_path}\/..\"     done     echo \"error: 'setup-environment' not found in parent directories, env: 'YO_R' wrong path ...\"; return 1 } find_setup_env <\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 <code>func.sh<\/code>, \u0437\u0434\u0435\u0441\u044c \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u044e \u0444\u0430\u0439\u043b\u0430 <code>setup-environment<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0435\u0440\u0435\u0432\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432 \u0441\u0431\u043e\u0440\u043a\u0438, \u0442\u0430\u043a\u043e\u0433\u043e \u043a\u0430\u043a:<\/p>\n<pre><code class=\"dart\"> \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 Yocto     \u251c\u2500\u2500 build     \u251c\u2500\u2500 downloads     \u251c\u2500\u2500 setup-environment     \u251c\u2500\u2500 shell.sh     \u2514\u2500\u2500 sources <\/code><\/pre>\n<h3>\u0421\u0431\u043e\u0440\u043a\u0430 Yocto \u043e\u0431\u0440\u0430\u0437\u0430 \u0432 Docker<\/h3>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f VSCode, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u0430, \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 Yocto \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0442\u0443\u043b\u0447\u0435\u0439\u043d\u0430\u043c\u0438. \u0414\u043b\u044f \u0441\u0442\u0430\u0440\u044b\u0445 Yocto \u0432\u0435\u0442\u043e\u043a, \u043d\u0430 \u043d\u043e\u0432\u044b\u0445 \u0445\u043e\u0441\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 Ubuntu 24.04 \u0432\u0441\u0435 \u043d\u0443 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043e\u0442\u0432\u0430\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0442\u043e gcc \u043d\u0435 \u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u0442\u043e \u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a, \u0430 \u0442\u043e \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 cmake \u043d\u0443 \u0441\u043e\u0432\u0441\u0435\u043c \u0441\u0442\u0430\u0440\u044b\u0439 \u043d\u0443\u0436\u0435\u043d.<\/p>\n<p>\u041a\u0430\u043a \u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u0430\u044f <\/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-455486","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/455486","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=455486"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/455486\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=455486"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=455486"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=455486"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}