{"id":411879,"date":"2024-06-29T22:13:37","date_gmt":"2024-06-29T22:13:37","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=411879"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=411879","title":{"rendered":"<span>\u0423\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u0434 Embedded Linux<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442, \u0440\u0435\u0448\u0438\u0432\u0448\u0438\u0439 \u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u043f\u043e\u0434 Embedded Linux, \u043f\u0440\u0438\u0434\u044f \u0431\u0443\u0434\u044c \u0442\u043e \u0438\u0437 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043b\u0438\u0431\u043e \u0438\u0437 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u043d\u0430 \u0421\/\u0421++, \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0443\u0434\u0438\u0432\u043b\u0435\u043d \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043d\u0435\u0434\u0440\u0443\u0436\u0435\u043b\u044e\u0431\u043d\u043e\u0441\u0442\u044c\u044e embedded linux. \u0422\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0431\u043b\u043e\u043a\u043d\u043e\u0442 \u0438 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0442\u043e\u043b\u044c \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0445 IDE, \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u043f\u043e \u043b\u043e\u0433\u0430\u043c \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u043e\u043c \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u044e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043a\u0430\u043a \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0434\u043e \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u0436\u0435\u043b\u0435\u0437\u0430 \u043f\u0440\u0438 \u043a\u0440\u043e\u0441\u0441-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0432 10 \u0440\u0430\u0437.<\/p>\n<h2>\u041a\u0440\u043e\u0441\u0441-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f<\/h2>\n<p>\u041f\u043e\u0434 \u043a\u0440\u043e\u0441\u0441-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0435\u0439 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043a\u043e\u0433\u0434\u0430 \u0441\u0431\u043e\u0440\u043a\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0436\u0435\u043b\u0435\u0437\u043a\u0438 (target device) \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c Embedded Linux \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 (host machine), \u043a\u043e\u0442\u043e\u0440\u043e\u0439, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u041f\u041a. \u0421 \u044d\u0442\u0438\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043a\u043e\u0434\u0430 \u043f\u043e\u0434 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043b\u0430\u0431\u044b\u0435 \u043c\u0438\u043a\u0440\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u0431\u044a\u0435\u043c\u0430\u043c\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 (128 \u041c\u0431 \u0438 32 \u041c\u0431 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435).<\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0442\u0438\u043f\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0442\u0440\u0435\u0445 \u044d\u0442\u0430\u043f\u043e\u0432:<\/p>\n<ol>\n<li>\n<p>\u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0434\u043e \u0445\u043e\u0441\u0442\u0430 (\u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438). git clone \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435. <\/p>\n<\/li>\n<li>\n<p>\u0421\u0431\u043e\u0440\u043a\u0430 \u0432\u0441\u0435\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0436\u0435\u043b\u0435\u0437\u043a\u0438 \u043b\u0438\u0431\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043d\u0430 \u0445\u043e\u0441\u0442\u0435. \u0423\u0442\u0438\u043b\u0438\u0442\u043e\u0439 make \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u0441\u0432\u0435\u0436\u0435-\u0441\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438\/\u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0434\u043e \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b. \u0423\u0442\u0438\u043b\u0438\u0442\u044b scp \u0438 sysupgrade \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435.<\/p>\n<\/li>\n<\/ol>\n<p>\u0411\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0443\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u044d\u0442\u0430\u043f. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u043d \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0442\u044f\u0436\u0435\u043b\u043e\u0432\u0435\u0441\u043d\u044b\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438, \u0442\u044f\u043d\u0443\u0449\u0438\u043c\u0438 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u043a\u0443\u0447\u0443 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/tensorflow\/tensorflow\/tree\/master\/tensorflow\/lite\" rel=\"noopener noreferrer nofollow\">tensorflow-lite (\u0434\u043b\u044f \u043d\u0435\u0439\u0440\u043e\u043d\u043e\u043a)<\/a> \u0438 <a href=\"https:\/\/github.com\/alexa\/avs-device-sdk\" rel=\"noopener noreferrer nofollow\">alexa voice sdk (\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0439 \u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442)<\/a>.<\/p>\n<p>\u041d\u0430 \u0432\u0441\u0435 \u0442\u0440\u0438 \u044d\u0442\u0430\u043f\u0430 (\u043f\u043e\u043b\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0438 \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0436\u0435\u043b\u0435\u0437\u043a\u0438) \u0443 \u043d\u0430\u0441 \u0443\u0445\u043e\u0434\u0438\u043b\u043e <strong>150 \u043c\u0438\u043d\u0443\u0442<\/strong>. \u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0440\u0435\u0434\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439.<\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u044d\u0442\u0430\u043f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u043b <strong>30 \u043c\u0438\u043d\u0443\u0442<\/strong>. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0438 \u0442\u044f\u0436\u0435\u043b\u043e\u0432\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0449\u0435\u0433\u043e \u043d\u0435\u0439\u0440\u043e\u043d\u043a\u0438, &#8212; <strong>13 \u043c\u0438\u043d\u0443\u0442<\/strong>.<\/p>\n<p>\u0422\u0440\u0435\u0442\u0438\u0439 \u044d\u0442\u0430\u043f \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 (\u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438) \u0437\u0430\u043d\u0438\u043c\u0430\u043b <strong>\u043c\u0438\u043d\u0443\u0442 5<\/strong>: \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0441 \u0445\u043e\u0441\u0442\u0430 \u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u043e\u0435 \u0436\u0435\u043b\u0435\u0437\u043e \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 scp. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 sysupgrade.<\/p>\n<p>\u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0435\u043b \u0441\u0442\u0430\u043b\u043e \u0432\u044b\u043c\u043e\u0440\u0430\u0436\u0438\u0432\u0430\u0442\u044c, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u044b\u043b\u0438\u0432\u0430\u043b\u0430\u0441\u044c \u0432 \u043c\u043d\u043e\u0433\u043e\u0447\u0430\u0441\u043e\u0432\u044b\u0435 \u043f\u043e\u0442\u0435\u0440\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e. \u0412 \u0438\u0442\u043e\u0433\u0435, \u043d\u0430\u043c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c:<\/p>\n<ul>\n<li>\n<p><strong>16 \u043c\u0438\u043d\u0443\u0442<\/strong> \u0432\u043c\u0435\u0441\u0442\u043e <strong>150 \u043c\u0438\u043d\u0443\u0442<\/strong> \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0442\u0440\u0435\u0445 \u044d\u0442\u0430\u043f\u043e\u0432 \u0432\u043c\u0435\u0441\u0442\u0435 \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438;<\/p>\n<\/li>\n<li>\n<p><strong>3 \u043c\u0438\u043d\u0443\u0442\u044b<\/strong> \u0432\u043c\u0435\u0441\u0442\u043e <strong>30 \u043c\u0438\u043d\u0443\u0442<\/strong> \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u044d\u0442\u0430\u043f\u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0438 \u0432\u0441\u0435\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0438 <strong>1,5 \u043c\u0438\u043d\u0443\u0442\u044b<\/strong> \u0432\u043c\u0435\u0441\u0442\u043e <strong>13 \u043c\u0438\u043d\u0443\u0442<\/strong> \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>10 \u0441\u0435\u043a\u0443\u043d\u0434<\/strong> \u0432\u043c\u0435\u0441\u0442\u043e <strong>5 \u043c\u0438\u043d\u0443\u0442<\/strong> \u0434\u043b\u044f \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u044d\u0442\u0430\u043f\u0430 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u043e \u0441\u0435\u0431\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u0442\u0430\u043f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u043f\u043b\u0430\u0442\u0438\u0442\u044c \u043f\u0430\u0440\u0443 \u0441\u043e\u0442\u0435\u043d \u0440\u0443\u0431\u043b\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0442\u0430\u0440\u0438\u0444 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430.<\/p>\n<h2>\u0423\u0441\u043a\u043e\u0440\u044f\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u0440\u043e\u0441\u0441-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438<\/h2>\n<p>\u0414\u043e\u043b\u0433\u043e \u0441\u043e\u043c\u043d\u0435\u0432\u0430\u043b\u0438\u0441\u044c, \u0431\u0443\u0434\u0435\u0442 \u043b\u0438 \u0441\u043c\u044b\u0441\u043b, \u043d\u043e \u0432\u0441\u0435 \u0436\u0435 \u043f\u043e\u0448\u043b\u0438 \u0432\u0430-\u0431\u0430\u043d\u043a, \u043d\u0430\u0447\u0438\u0442\u0430\u0432\u0448\u0438\u0441\u044c \u0441\u0442\u0430\u0442\u0435\u0439 \u043e <a href=\"https:\/\/www.servethehome.com\/amd-ryzen-threadripper-3970x-review-32-cores-of-madness\/amd-threadripper-3970x-linux-kernel-compile-benchmark\/\" rel=\"noopener noreferrer nofollow\">\u0432\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430\u0445<\/a>, \u0438 \u0440\u0430\u0441\u043a\u043e\u0448\u0435\u043b\u0438\u043b\u0438\u0441\u044c \u043d\u0430  \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u0441\u0442\u0430\u043d\u0446\u0438\u044e \u043d\u0430 \u0431\u0430\u0437\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 AMD Threadripper 3970X (64 \u044f\u0434\u0440\u0430):<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/c6a\/719\/2d2\/c6a7192d2cd47097c96f2eb50a55d915.jpg\" width=\"1156\" height=\"868\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c6a\/719\/2d2\/c6a7192d2cd47097c96f2eb50a55d915.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u043f\u043e\u043f\u0443\u0442\u043d\u043e \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u044f \u0432\u0438\u0434\u0435\u043e-\u043a\u0430\u0440\u0442\u0443 NVIDIA GeForce 3080TI \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0435\u0439\u0440\u043e\u043d\u043a\u0430\u043c\u0438, 128 \u0413\u0431 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 1 \u0422\u0431 ssd \u0434\u0438\u0441\u043a. \u0417\u0430\u043a\u043e\u043d\u0447\u0438\u043b \u0441\u0431\u043e\u0440\u043a\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0438\u043a\u0430 \u0443\u0436\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0439 \u043d\u043e\u0447\u0438, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b Ubuntu \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0435 \u0437\u0430\u0431\u044b\u0432 \u043f\u0440\u043e make -j64&#8230; \u0420\u0430\u0437\u043e\u0447\u0430\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u0435\u0434\u0435\u043b\u0430, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b 30 \u043c\u0438\u043d\u0443\u0442, \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u0435\u0449\u0430\u043d\u043d\u044b\u0445 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430\u043c\u0438 2 \u043c\u0438\u043d\u0443\u0442. \u041f\u043b\u044e\u043d\u0443\u043b \u043d\u0430 \u0432\u0441\u0435 \u0438 \u043b\u0435\u0433 \u0441\u043f\u0430\u0442\u044c.<\/p>\n<p>\u0421 \u0443\u0442\u0440\u0430 \u043f\u0440\u0438\u043d\u044f\u043b\u0441\u044f \u0432\u044b\u0436\u0438\u043c\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u043e\u043a\u0438 \u0438\u0437 \u0434\u043e\u0440\u043e\u0433\u043e\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u043f\u043e\u043a\u0443\u043f\u043a\u0438. \u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b htop \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u041b\u0438\u0448\u044c \u0438\u0437\u0440\u0435\u0434\u043a\u0430 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u043b \u043f\u043e\u0434\u043e\u0431\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7e2\/388\/ef0\/7e2388ef0bedbe9e6186658f377405c5.png\" width=\"1801\" height=\"623\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7e2\/388\/ef0\/7e2388ef0bedbe9e6186658f377405c5.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0438\u043d\u043e\u0433\u0434\u0430 \u0442\u0430\u043a\u0443\u044e:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/adc\/7d9\/fdb\/adc7d9fdb5fa32b3d9902cba3cf0a58a.png\" width=\"1793\" height=\"393\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/adc\/7d9\/fdb\/adc7d9fdb5fa32b3d9902cba3cf0a58a.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u043d\u043e, \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e, \u0442\u0430\u043a\u0443\u044e:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bcc\/09e\/dff\/bcc09edff2e170acc542ea50625e72db.png\" width=\"1801\" height=\"389\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bcc\/09e\/dff\/bcc09edff2e170acc542ea50625e72db.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u042d\u0442\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442\u0441\u044f \u043d\u0435 \u0432\u0441\u0435 \u044f\u0434\u0440\u0430. \u041e\u0442\u0432\u0435\u0442 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043d\u0430\u0448\u0435\u043b \u0431\u044b\u0441\u0442\u0440\u043e: <a href=\"https:\/\/github.com\/openwrt\/packages\/issues\/6841\" rel=\"noopener noreferrer nofollow\">Enable parallel builds by default?<\/a>. \u041d\u0435\u0434\u043e\u043b\u0433\u043e \u0434\u0443\u043c\u0430\u044f \u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0442\u0438\u043b <a href=\"https:\/\/github.com\/wireless-road\/imx6ull-openwrt\/commit\/f783e31644486ed368c9f076e8554a36853bd7a1\" rel=\"noopener noreferrer nofollow\">\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f<\/a> \u043a \u0441\u0435\u0431\u0435 \u0432 \u0440\u0435\u043f\u0443 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0437\u0430\u0432\u0435\u0442\u043d\u044b\u0435 3 \u043c\u0438\u043d\u0443\u0442\u044b \u043d\u0430 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0438 1,5 \u043c\u0438\u043d\u0443\u0442\u044b \u043d\u0430 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. htop \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u043f\u043e\u043b\u043d\u0443\u044e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443. \u0420\u0430\u0434\u043e\u0441\u0442\u0438 \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u0435\u0434\u0435\u043b\u0430! \u0414\u0435\u043d\u044c\u0433\u0438 \u043d\u0435 \u0443\u0448\u043b\u0438 \u043d\u0430 \u0432\u0435\u0442\u0435\u0440!<\/p>\n<p>\u0412\u0434\u043e\u0431\u0430\u0432\u043e\u043a \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u0438\u0437 RAMDISK:<\/p>\n<pre><code>$\u00a0sudo\u00a0mkdir\u00a0\/mnt\/ramdisk $ sudo\u00a0mount\u00a0-t\u00a0tmpfs\u00a0-o\u00a0rw,size=2G tmpfs\u00a0\/mnt\/ramdisk $\u00a0df\u00a0-h $ cd \/mnt\/ramdisk $ git clone ...<\/code><\/pre>\n<p>\u043d\u043e \u043e\u0441\u043e\u0431\u043e\u0433\u043e \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u043b.<\/p>\n<p>\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043e\u043c\u0440\u0430\u0447\u0430\u0432\u0448\u0438\u0439 \u0440\u0430\u0434\u043e\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441, &#8212; \u0441\u0431\u043e\u0440\u043a\u0430 \u0438\u043d\u043e\u0433\u0434\u0430, \u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0430\u0434\u0430\u043b\u0430 \u043d\u0430 \u0441\u0430\u043c\u044b\u043c \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u0430\u0445. \u041f\u043e\u0433\u0443\u0433\u043b\u0438\u0432, \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, &#8212; \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438 \u043c\u043d\u043e\u0433\u043e\u044f\u0434\u0435\u0440\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435. <\/p>\n<p>\u041d\u043e \u044d\u0442\u043e\u0442 \u043a\u0435\u0439\u0441 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0437\u0430\u043a\u0440\u044b\u043b <a href=\"https:\/\/github.com\/wireless-road\/imx6ull-openwrt\/commit\/3e555184ba1bf06edaffc56f153381e83f9bba24\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u0441\u0442\u044b\u043b\u0435\u043c<\/a>. \u0412 \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u043e\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u043b:<\/p>\n<pre><code>make -j $(nproc);<\/code><\/pre>\n<p>\u043d\u0430:<\/p>\n<pre><code>compiled_successful_flag=0;  compile() { compiled_successful_flag=0; if make -j $(nproc); then compiled_successful_flag=1; return else return fi }  ...  while [ $compiled_successful_flag -eq 0 ]; do compile; sleep 1; done<\/code><\/pre>\n<p>\u0442.\u0435., \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u0438 \u043f\u0430\u0434\u0435\u043d\u0438\u0438. \u0417\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u0435 \u0432 \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0431\u044b\u043b\u043e \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0438 \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043f\u0430\u0434\u0435\u043d\u0438\u044f\u0445 \u0443\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437 \u0437\u0430 3-4 \u043c\u0438\u043d\u0443\u0442\u044b.<\/p>\n<h2>\u0423\u0441\u043a\u043e\u0440\u044f\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0436\u0435\u043b\u0435\u0437\u043a\u0438<\/h2>\n<p>\u041f\u043e\u0433\u0443\u043b\u044f\u0432 \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430, \u0443\u0437\u043d\u0430\u043b, \u0447\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 scp \u0438 \u0435\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 sysupgrade \u043c\u043e\u0436\u043d\u043e \u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438 \u044f\u0434\u0440\u043e, \u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043f\u043e \u0441\u0435\u0442\u0438, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/openwrt.org\/docs\/guide-user\/installation\/generic.flashing.tftp\" rel=\"noopener noreferrer nofollow\">tftp<\/a> \u0438 <a href=\"https:\/\/gitlab.ggdns.de\/rizzle\/scripts\/-\/wikis\/tutorials\/openwrt-on-nfs-root\" rel=\"noopener noreferrer nofollow\">nfs<\/a>.<\/p>\n<p>\u0421\u0440\u0430\u0437\u0443 \u0436\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u043e \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438 tftp-\u0441\u0435\u0440\u0432\u0435\u0440 \u0438 nfs-\u0441\u0435\u0440\u0432\u0435\u0440 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043b\u0430\u0434\u0438\u0432 \u0432\u0441\u0435 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043d\u0435 \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0435 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0445\u043e\u0441\u0442. \u0418 \u0432 \u044d\u0442\u043e\u043c \u043f\u043e\u043c\u043e\u0433\u043b\u0438 \u0432\u0435\u043b\u0438\u043a\u0438\u0435 \u0438 \u043c\u043e\u0433\u0443\u0447\u0438\u0435 <a href=\"https:\/\/www.docker.com\/\" rel=\"noopener noreferrer nofollow\">docker<\/a> \u0438 <a href=\"https:\/\/docs.docker.com\/compose\/\" rel=\"noopener noreferrer nofollow\">docker-compose<\/a>. \u0415\u0441\u043b\u0438 \u0432\u043a\u0440\u0430\u0442\u0446\u0435, &#8212; \u0442\u043e \u044d\u0442\u043e \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u0430\u044f \u043f\u0438\u043b\u044e\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0441\u043e\u0444\u0442 \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u043e\u0434\u043d\u0438\u043c \u043d\u0430\u0436\u0430\u0442\u0438\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0438 (<code>$ docker-compose up -d<\/code>) \u043d\u0435 \u0442\u0440\u0430\u0442\u044f \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0435 \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u0438\u043b\u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u041f\u041a.<\/p>\n<p>\u0418\u0442\u0430\u043a,<\/p>\n<h2>\u0417\u0430\u043f\u0443\u0441\u043a TFTP \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u044f\u0434\u0440\u0430<\/h2>\n<p>\u0415\u0433\u043e <code>Dockerfile<\/code>:<\/p>\n<pre><code>FROM debian:stretch-slim  MAINTAINER danrue drue@therub.org # https:\/\/github.com\/danrue\/docker-tftpd-hpa  RUN apt-get update &amp;&amp; \\ apt-get install -y --no-install-recommends \\ tftpd-hpa &amp;&amp; \\ rm -rf \/var\/lib\/apt\/lists\/*  CMD echo -n \"Starting \" &amp;&amp; in.tftpd --version &amp;&amp; in.tftpd -L --user tftp -a 0.0.0.0:69 -s -B1468 -v \/srv\/tftp<\/code><\/pre>\n<p><code>docker-compose.yml<\/code> \u0444\u0430\u0439\u043b:<\/p>\n<pre><code>version: '3.4' services: tftpd-hpa: container_name: tftp build: . volumes: - .\/volume:\/srv\/tftp ports: - 69:69\/udp restart: always<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a \u043d\u0430 \u0445\u043e\u0441\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code>$ docker-compose up -d<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 <em>volume<\/em> \u043e\u0431\u0440\u0430\u0437 \u044f\u0434\u0440\u0430 (<em>uImage<\/em>). \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code>$ cp bin\/targets\/imx6ull\/cortexa7\/openwrt-imx6ull-cortexa7-tensorflow_wifi_dev-uImage\u00a0 _utilities\/tftpd-hpa\/volume\/<\/code><\/pre>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/github.com\/wireless-road\/imx6ull-openwrt\/tree\/tensorflow_lite\/_utilities\/tftpd-hpa\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>.<\/p>\n<p>\u0412\u0441\u0435 \u0433\u043e\u0442\u043e\u0432\u043e \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u044f\u0434\u0440\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u043e\u043c (u-boot, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435). \u041d\u043e \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0436\u0435\u043b\u0435\u0437\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0444\u0430\u0435\u0440\u0432\u043e\u043b\u043b\u0430:<\/p>\n<pre><code>$ sudo ufw status<\/code><\/pre>\n<p>\u0438 \u0435\u0441\u043b\u0438 \u043e\u043d \u0432\u043a\u043b\u044e\u0447\u0435\u043d, \u0442\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0435\u0433\u043e:<\/p>\n<pre><code>$ sudo ufw disable<\/code><\/pre>\n<h2>\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u044f\u0434\u0440\u0430 \u0441 tftp-\u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/h2>\n<p>\u042f\u0434\u0440\u043e \u0433\u0440\u0443\u0437\u0438\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u044d\u0442\u043e u-boot, \u0442\u043e \u043e\u043d, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0443\u043c\u0435\u0435\u0442 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0432\u0430\u0448\u0435\u0439 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0436\u0435\u043b\u0435\u0437\u043a\u0438 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 <code>reboot<\/code>. \u0414\u043e\u0436\u0434\u0438\u0442\u0435\u0441\u044c \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438, \u0443\u0432\u0438\u0434\u0435\u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u043e\u0442\u0441\u0447\u0435\u0442 \u0442\u0430\u0439\u043c\u0435\u0440\u0430,  \u043d\u0430\u0436\u043c\u0438\u0442\u0435 <em>Enter<\/em>. \u0415\u0441\u043b\u0438 \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0437\u043d\u0430\u0447\u043e\u043a \u0441\u0442\u0440\u0435\u043b\u043e\u0447\u043a\u0438: <code>=><\/code>, \u0442\u043e \u0432\u044b \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 U-boot.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438:<\/p>\n<pre><code>=> setenv defbootcmd \"$bootcmd\" => saveenv Saving Environment to SPI Flash... board_spi_cs_gpio bus 2 cs 0 SF: Detected w25q256 with page size 256 Bytes, erase size 4 KiB, total 32 MiB Erasing SPI flash...Writing to SPI flash...done<\/code><\/pre>\n<p>\u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432\u044b \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442:<\/p>\n<pre><code>=> setenv bootcmd \"$defbootcmd\" => saveenv<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0434\u0430\u0435\u043c \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u0447\u0442\u043e\u0431\u044b u-boot \u0437\u043d\u0430\u043b, \u043a\u0443\u0434\u0430 \u0441\u0442\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u0437\u0430 \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u044f\u0434\u0440\u0430:<\/p>\n<pre><code>=> setenv ipaddr 192.168.31.99 => setenv ethaddr 86:72:04:c5:7e:83 => setenv serverip 192.168.31.37 => setenv uimage openwrt-imx6ull-cortexa7-tensorflow_wifi_dev-uImage => printenv loaddadr <\/code><\/pre>\n<p>\u0433\u0434\u0435 <em>192.168.31.99<\/em> &#8212; \u044d\u0442\u043e IP-\u0430\u0434\u0440\u0435\u0441, \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u0436\u0435\u043b\u0435\u0437\u043a\u0435, \u0430 <em>192.168.31.37<\/em> &#8212; \u044d\u0442\u043e IP-\u0430\u0434\u0440\u0435\u0441 \u0445\u043e\u0441\u0442\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u044b \u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 tftp-\u0441\u0435\u0440\u0432\u0435\u0440. <em>openwrt-imx6ull-cortexa7-tensorflow_wifi_dev-uImage<\/em> &#8212; \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 (\u043e\u0431\u0440\u0430\u0437 \u044f\u0434\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u043b\u043e\u0436\u0438\u043b\u0438 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 volume \u043d\u0430 \u0445\u043e\u0441\u0442\u0435), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0441 tftp-\u0441\u0435\u0440\u0432\u0435\u0440\u0430. <code>loadaddr<\/code> &#8212; \u0430\u0434\u0440\u0435\u0441, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0435\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 (\u0443 \u0432\u0430\u0441 \u043e\u043d, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0443\u0436\u0435 \u0437\u0430\u0434\u0430\u043d).<\/p>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u0438\u043d\u0433\u0430\u043d\u0443\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440:<\/p>\n<pre><code>=> ping ${serverip} Using FEC device host 192.168.31.37 is alive<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430:<\/p>\n<pre><code>=> tftp ${loadaddr} ${serverip}:${uimage} Using FEC device TFTP from server 192.168.31.37; our IP address is 192.168.31.99 Filename 'openwrt-imx6ull-cortexa7-tensorflow_wifi_dev-uImage'. Load address: 0x82000000 Loading: ################################################################# ################################################################# ######################################################### 345.7 KiB\/s done Bytes transferred = 2742194 (29d7b2 hex)<\/code><\/pre>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e. \u0417\u043d\u0430\u0447\u0438\u0442 \u043f\u043e\u043a\u0430 \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u043d\u0430\u043f\u043e\u0440\u0442\u0430\u0447\u0438\u043b\u0438 \u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u044f\u0434\u0440\u043e:<\/p>\n<pre><code>=> saveenv => bootm ${loadaddr} ## Booting kernel from Legacy Image at 82000000 ... Image Name: ARM OpenWrt Linux-4.14.199 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 2742130 Bytes = 2.6 MiB Load Address: 80008000 Entry Point: 80008000 Verifying Checksum ... OK Loading Kernel Image ... OKStarting kernel ...[ 0.004494] \/cpus\/cpu@0 missing clock-frequency property [ 0.128440] imx6ul-pinctrl 2290000.iomuxc-snvs: no groups defined in \/soc\/aips-bus@02200000\/iomuxc-snvs@02290000 [ 0.917942] fec 20b4000.ethernet: Invalid MAC address: 00:00:00:00:00:00 [ 1.800403] mxs-dcp 2280000.dcp: Failed to register sha1 hash! [ 7.239994] DHCP\/BOOTP: Reply not for us on eth1, op[2] xid[e2dbd4aa] Press the [f] key and hit [enter] to enter failsafe mode Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level Please press Enter to activate this console.<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043d\u043e\u0432\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0439\u0442\u0435\u0441\u044c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c U-boot \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u044f\u0434\u0440\u0430 \u0441 TFTP-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439:<\/p>\n<pre><code>=> setenv devbootcmd \"tftp ${loadaddr} ${serverip}:${uimage}; bootm ${loadaddr}\" => setenv bootcmd \"$defbootcmd\" => saveenv<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c u-boot \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0437 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u0442\u044c \u0441 \u043d\u0435\u0433\u043e. \u0424\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043f\u043e\u043a\u0430 \u0435\u0449\u0435, \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u0430\u044f. \u0422\u0430, \u0447\u0442\u043e \u0443 \u0432\u0430\u0448\u0435\u0439 \u0436\u0435\u043b\u0435\u0437\u043a\u0438 \u0432\u043e \u0444\u043b\u0435\u0448-\u043f\u0430\u043c\u044f\u0442\u0438\/microSD-\u043a\u0430\u0440\u0442\u0435.<\/p>\n<h2>\u0417\u0430\u043f\u0443\u0441\u043a NFS-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/h2>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433 &#8212; \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0442\u0435\u0432\u0443\u044e \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443. <\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e tftp-\u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0441\u043e\u0431\u0435\u0440\u0435\u043c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 NFS-\u0441\u0435\u0440\u0432\u0435\u0440. <\/p>\n<p><code>Dockerfile<\/code> NFS-\u0441\u0435\u0440\u0432\u0435\u0440\u0430:<\/p>\n<pre><code>FROM alpine:3.6  MAINTAINER Tang Jiujun &lt;jiujun.tang@gmail.com> # https:\/\/github.com\/tangjiujun\/docker-nfs-server  RUN set -ex &amp;&amp; { \\         echo 'http:\/\/mirrors.aliyun.com\/alpine\/v3.6\/main'; \\         echo 'http:\/\/mirrors.aliyun.com\/alpine\/v3.6\/community'; \\     } > \/etc\/apk\/repositories \\     &amp;&amp; apk update &amp;&amp; apk add bash nfs-utils &amp;&amp; rm -rf \/var\/cache\/apk\/*  EXPOSE 111 111\/udp 2049 2049\/udp \\     32765 32765\/udp 32766 32766\/udp 32767 32767\/udp 32768 32768\/udp  COPY entrypoint.sh \/entrypoint.sh RUN chmod +x \/entrypoint.sh ENTRYPOINT [\"\/entrypoint.sh\"]<\/code><\/pre>\n<p><code>entrypoint.sh<\/code>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0432 Dockerfile:<\/p>\n<pre><code>#!\/bin\/bash set -ex  : ${EXPORT_DIR:=\"\/nfsshare\"} : ${EXPORT_OPTS:=\"*(rw,fsid=0,insecure,no_root_squash,no_subtree_check,sync)\"}  mkdir -p $EXPORT_DIR echo \"$EXPORT_DIR   $EXPORT_OPTS\" > \/etc\/exports   mount -t nfsd nfsd \/proc\/fs\/nfsd # Fixed nlockmgr port echo 'fs.nfs.nlm_tcpport=32768' >> \/etc\/sysctl.conf echo 'fs.nfs.nlm_udpport=32768' >> \/etc\/sysctl.conf sysctl -p > \/dev\/null  rpcbind -w rpc.nfsd -N 2 -V 3 -N 4 -N 4.1 8 exportfs -arfv rpc.statd -p 32765 -o 32766 rpc.mountd -N 2 -V 3 -N 4 -N 4.1 -p 32767 -F<\/code><\/pre>\n<p>\u0438 <code>docker-compose.yml<\/code>:<\/p>\n<pre><code>    version: '3.4'     services:       nfs:         build: .               container_name: nfs               volumes:           - .\/volume:\/nfsshare         ports:           - 111:111                 - 111:111\/udp           - 2049:2049           - 2049:2049\/udp             - 32765-32768:32765-32768           - 32765-32768:32765-32768\/udp           privileged: true             restart: always<\/code><\/pre>\n<p>\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0438 TFTP-\u0441\u0435\u0440\u0432\u0435\u0440:<\/p>\n<pre><code>$ docker-compose up -d<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0440\u0430\u0437\u043d\u044b\u0435 (<code>tftp-hpa<\/code> \u0438 <code>nfs-kernel-server<\/code>), \u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u0438 \u0442\u043e\u0439 \u0436\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439).<\/p>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 <code>volume<\/code> \u0430\u0440\u0445\u0438\u0432 \u0441 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443 \u0432\u0430\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u044f\u0434\u0440\u0430. \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435:<\/p>\n<pre><code>$ tar -xzvf bin\/targets\/imx6ull\/cortexa7\/openwrt-imx6ull-cortexa7-device-tensorflow-wifi-dev-rootfs.tar.gz \u2013directory _utilities\/nfs\/volume\/<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0436\u043d\u043e \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b \u0432 \u0442\u043e\u0439 \u0436\u0435 \u0441\u0435\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code>$ sudo mount -v -o vers=3 192.168.31.37:\/nfsshare \/home\/al\/mnt mount.nfs: timeout set for Fri Aug 20 23:28:36 2021 mount.nfs: trying text-based options 'vers=3,addr=192.168.31.37' mount.nfs: prog 100003, trying vers=3, prot=6 mount.nfs: trying 192.168.31.37 prog 100003 vers 3 prot TCP port 2049 mount.nfs: prog 100005, trying vers=3, prot=17 mount.nfs: trying 192.168.31.37 prog 100005 vers 3 prot UDP port 32767 $ ls mnt\/ bin\u00a0 etc\u00a0 mnt\u00a0 \u00a0 overlay\u00a0 rom\u00a0\u00a0 sbin\u00a0 tmp\u00a0 var dev\u00a0 lib\u00a0 \u00a0mobilenet_v1_0.25_128_quant.tflite\u00a0 proc\u00a0\u00a0\u00a0\u00a0 root\u00a0 sys\u00a0\u00a0 usr\u00a0 www<\/code><\/pre>\n<p>\u0433\u0434\u0435 <em>192.168.31.37<\/em> &#8212; IP-\u0430\u0434\u0440\u0435\u0441 \u043c\u0430\u0448\u0438\u043d\u044b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0441\u0435\u0440\u0432\u0435\u0440, \u0430 <em>\/home\/al\/nfs<\/em> &#8212; \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0432\u044b \u043f\u0440\u0438\u043c\u043e\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u0443\u044e \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443. <\/p>\n<h2>\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441 NFS-\u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0441 NFS-\u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c, \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043b\u0438 \u0432 \u0432\u0430\u0448\u0435\u043c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 NFS. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u043d\u0430 \u0445\u043e\u0441\u0442\u0435, \u0432 \u043a\u043e\u0440\u043d\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0441 \u0432\u0430\u0448\u0438\u043c\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438 Linux \u043d\u0443\u0436\u043d\u043e \u0432\u0432\u0435\u0441\u0442\u0438:<\/p>\n<pre><code>make menuconfig<\/code><\/pre>\n<p>\u0412 \u043e\u0442\u043a\u0440\u044b\u0432\u0448\u0435\u043c\u0441\u044f \u043e\u043a\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043e\u043f\u0446\u0438\u044e Compile the kernel with rootfs on NFS. \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0430 \u043f\u043e \u043f\u0443\u0442\u0438: <code>Global build settings-->Kernel build options-->Compile the kernel with rootfs on NFS<\/code>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ddd\/011\/e7b\/ddd011e7ba8a63555542dff9cc037841.png\" width=\"670\" height=\"541\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ddd\/011\/e7b\/ddd011e7ba8a63555542dff9cc037841.png\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6b3\/77f\/624\/6b377f624b07441609c5a8aca0e4cce3.png\" width=\"726\" height=\"541\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6b3\/77f\/624\/6b377f624b07441609c5a8aca0e4cce3.png\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/93b\/c4c\/44c\/93bc4c44ce3e8d7ec6be928f556e97d4.png\" width=\"735\" height=\"541\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/93b\/c4c\/44c\/93bc4c44ce3e8d7ec6be928f556e97d4.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0438\u0434\u0438\u0442\u0435 \u0437\u043d\u0430\u0447\u043e\u043a <code>*<\/code>, \u0437\u043d\u0430\u0447\u0438\u0442 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0441 NFS \u0437\u0430\u0434\u0430\u0432 \u043b\u0438\u0448\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432 u-boot. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442 (\u043a\u0430\u043a \u0431\u044b\u043b\u043e \u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435), \u0442\u043e \u0432\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>\u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u043e\u043f\u0446\u0438\u044e, \u043d\u0430\u0436\u0430\u0432 \u043a\u043d\u043e\u043f\u043a\u0443 <code>Y<\/code><\/p>\n<\/li>\n<li>\n<p>\u0432\u044b\u0439\u0434\u0438\u0442\u0435 \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0430, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0432 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p>\u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0435\u0440\u0438\u0442\u0435 \u043e\u0431\u0440\u0430\u0437 \u044f\u0434\u0440\u0430 \u043f\u043e \u043d\u043e\u0432\u043e\u0439 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 uImage \u0444\u0430\u0439\u043b \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 volume \u0432\u0430\u0448\u0435\u0433\u043e TFTP-\u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<\/li>\n<li>\n<p>\u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 u-boot \u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0432\u044b \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0437 \u044f\u0434\u0440\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>tftp<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0442\u0430\u043a, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0432 u-boot, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0442\u0435\u0432\u0443\u044e \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u043c\u0435\u0441\u0442\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0439 \u043d\u0430 \u0444\u043b\u0435\u0448-\u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u0435:<\/p>\n<pre><code>=> printenv bootargs => setenv defbootargs \"${bootargs}\" => setenv devbootargs \"ip=dhcp console=ttymxc1 rootwait rw root=\/dev\/nfs nfsroot=${serverip}:\/nfsshare,nolock,v3,intr,hard,noacl\" => setenv bootargs \"${devbootargs}\" => saveenv<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0432\u044b\u0432\u043e\u0434 \u043f\u0435\u0440\u0432\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u0435\u0433\u043e.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u0432\u0435\u0434\u0438\u0442\u0435:<\/p>\n<pre><code>=> reset<\/code><\/pre>\n<p>U-boot \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0441\u044f, \u043f\u0435\u0440\u0435\u0434\u0430\u0441\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044f\u0434\u0440\u0443. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u0432\u0435\u0434\u0438\u0442\u0435:<\/p>\n<pre><code># dmesg | grep nfs [ 0.000000] Kernel command line: console=ttymxc0,115200 rootwait fixrtc quiet ip=dhcp console=ttymxc1 rootwait rw root=\/dev\/nfs nfsroot=192.168.31.37:\/nfsshare,nolock,v3,intr,hard,noacl [ 4.175865] VFS: Mounted root (nfs filesystem) on device 0:10<\/code><\/pre>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e! \u0421\u0435\u0442\u0435\u0432\u0430\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0440\u0438\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u043b\u044e\u0431\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u0445\u043e\u0441\u0442\u0435 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 volume TFTP-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0436\u0435\u043b\u0435\u0437\u043a\u0438. \u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <em>volume<\/em> NFS-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 (\u043d\u0430 \u0445\u043e\u0441\u0442\u0435) \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0444\u0430\u0439\u043b:<\/p>\n<pre><code>$ touch nfs\/volume\/hello<\/code><\/pre>\n<p>\u041e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0436\u0435\u043b\u0435\u0437\u043a\u0438:<\/p>\n<pre><code># ls \/<\/code><\/pre>\n<h2>Development \u0438 production \u0440\u0435\u0436\u0438\u043c\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438<\/h2>\n<p>\u0412 U-boot \u0432\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u0442\u0435 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 (\u0441\u0435\u0442\u0435\u0432\u043e\u0439) \u0440\u0435\u0436\u0438\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438:<\/p>\n<pre><code>=> setenv bootcmd \"${devbootcmd}\" => setenv bootargs \"${devbootargs}\" => saveenv<\/code><\/pre>\n<p>\u0442\u0430\u043a\u0438 \u0438 &#171;\u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d&#187; \u0440\u0435\u0436\u0438\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438:<\/p>\n<pre><code>=> setenv bootcmd \"${defbootcmd}\" => setenv bootargs \"${defbootargs}\" => saveenv<\/code><\/pre>\n<p>\u0438\u043b\u0438:<\/p>\n<pre><code>=> setenv bootcmd \"${defbootcmd}\" => setenv bootargs => saveenv<\/code><\/pre>\n<p>\u0435\u0441\u043b\u0438 \u0440\u0430\u043d\u0435\u0435 <code>=> printenv bootargs<\/code> \u0432\u0430\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u044b\u0434\u0430\u043b\u043e.<\/p>\n<p>\u0414\u0430\u0436\u0435 \u043f\u0440\u043e\u0448\u0438\u0432 \u0444\u043b\u0435\u0448\u043a\u0443 \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 sysupgrade, \u043d\u043e \u0441 \u0444\u043b\u0430\u0433\u043e\u043c -c \u0432\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 U-boot \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u0432 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0445 \u0440\u0435\u0436\u0438\u043c. \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0439\u0442\u0438 \u0435\u0449\u0435 \u0434\u0430\u043b\u044c\u0448\u0435 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0443\u044e \u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438. \u041a\u043e\u043c\u043c\u0438\u0442\u044b, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0435 <a href=\"https:\/\/github.com\/wireless-road\/imx6ull-openwrt\/commit\/0316343f923f943a6314ae10164378303e1d7b20\" rel=\"noopener noreferrer nofollow\">\u0434\u0430\u043d\u043d\u044b\u0439<\/a> <a href=\"https:\/\/github.com\/wireless-road\/imx6ull-openwrt\/commit\/f5837de86085d0e8c749de6ca53fb8bb19627f3c\" rel=\"noopener noreferrer nofollow\">\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b<\/a>.<\/p>\n<p>\u0412 \u0447\u0435\u043c \u0436\u0435 \u0435\u0433\u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430? \u0412 \u0442\u043e\u043c, \u0447\u0442\u043e \u043b\u044e\u0431\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u0445\u043e\u0441\u0442\u0435 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <em>volume<\/em> TFTP-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0436\u0435\u043b\u0435\u0437\u043a\u0438. \u0414\u0435\u043b\u043e \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0437\u0430 \u043c\u0430\u043b\u044b\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u0435\u0436\u0435-\u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u044f\u0434\u0440\u0430 \u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u0435\u0436\u0435-\u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0430\u0440\u0445\u0438\u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 volume TFTP- \u0438 NFS-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u044d\u0442\u0430\u043f\u0430 (\u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043a\u043e\u0434\u0435) \u0434\u043e \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0436\u0435\u043b\u0435\u0437\u043a\u0438 \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0434\u043e 10 \u0441\u0435\u043a\u0443\u043d\u0434 \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 (\u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u044f\u0434\u0440\u0430) \u043f\u0440\u0438 \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u044f\u0434\u0440\u043e \u041b\u0438\u043d\u0443\u043a\u0441 \u0438 \u0434\u043e 0 \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u0440\u0438 \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430!<\/p>\n<h2>\u0418\u0442\u043e\u0433\u0438<\/h2>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0442\u0438\u043f\u043e\u0432\u043e\u0433\u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u0434\u0430 (\u0432\u0442\u043e\u0440\u043e\u0439 + \u0442\u0440\u0435\u0442\u0438\u0439 \u044d\u0442\u0430\u043f): \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0438 \u044f\u0434\u0440\u0430 \u043b\u0438\u0431\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u043e\u0439 \u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u043e\u0435 \u0436\u0435\u043b\u0435\u0437\u043e \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0441 <strong>30+ \u043c\u0438\u043d\u0443\u0442<\/strong> \u0434\u043e <strong>2-3 \u043c\u0438\u043d\u0443\u0442<\/strong>! \u042d\u0442\u043e \u0434\u0430\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043a\u0430 20 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043a\u043e\u0434\u0435 \u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435, \u0432\u043c\u0435\u0441\u0442\u043e 1-2 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0440\u0430\u043d\u0435\u0435. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u043e\u0437\u0440\u043e\u0441\u043b\u0430 \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a! \u0414\u0430\u0436\u0435 \u043d\u0435 \u0432\u0435\u0440\u0438\u0442\u0441\u044f, \u0447\u0442\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u044f \u043c\u0438\u0440\u0438\u043b\u0441\u044f \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u043f\u043e\u0442\u0435\u0440\u044f\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438!  <\/p>\n<p><strong>P.s.<\/strong> \u0424\u043e\u0442\u043e \u0432\u0438\u0434\u0435\u043e \u0441 \u043f\u043e\u043b\u0435\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 embedded linux &#8212; \u0432 <span>\u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c-\u043a\u0430\u043d\u0430\u043b\u0435<\/span>.<\/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\/574118\/\"> https:\/\/habr.com\/ru\/articles\/574118\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442, \u0440\u0435\u0448\u0438\u0432\u0448\u0438\u0439 \u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u043f\u043e\u0434 Embedded Linux, \u043f\u0440\u0438\u0434\u044f \u0431\u0443\u0434\u044c \u0442\u043e \u0438\u0437 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043b\u0438\u0431\u043e \u0438\u0437 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u043d\u0430 \u0421\/\u0421++, \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0443\u0434\u0438\u0432\u043b\u0435\u043d \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043d\u0435\u0434\u0440\u0443\u0436\u0435\u043b\u044e\u0431\u043d\u043e\u0441\u0442\u044c\u044e embedded linux. \u0422\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0431\u043b\u043e\u043a\u043d\u043e\u0442 \u0438 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0442\u043e\u043b\u044c \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0445 IDE, \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u043f\u043e \u043b\u043e\u0433\u0430\u043c \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u043e\u043c \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u044e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043a\u0430\u043a \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0434\u043e \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u0436\u0435\u043b\u0435\u0437\u0430 \u043f\u0440\u0438 \u043a\u0440\u043e\u0441\u0441-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0432 10 \u0440\u0430\u0437.<\/p>\n<h2>\u041a\u0440\u043e\u0441\u0441-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f<\/h2>\n<p>\u041f\u043e\u0434 \u043a\u0440\u043e\u0441\u0441-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0435\u0439 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043a\u043e\u0433\u0434\u0430 \u0441\u0431\u043e\u0440\u043a\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0436\u0435\u043b\u0435\u0437\u043a\u0438 (target device) \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c Embedded Linux \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 (host machine), \u043a\u043e\u0442\u043e\u0440\u043e\u0439, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u041f\u041a. \u0421 \u044d\u0442\u0438\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043a\u043e\u0434\u0430 \u043f\u043e\u0434 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043b\u0430\u0431\u044b\u0435 \u043c\u0438\u043a\u0440\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u0431\u044a\u0435\u043c\u0430\u043c\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 (128 \u041c\u0431 \u0438 32 \u041c\u0431 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435).<\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0442\u0438\u043f\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0442\u0440\u0435\u0445 \u044d\u0442\u0430\u043f\u043e\u0432:<\/p>\n<ol>\n<li>\n<p>\u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0434\u043e \u0445\u043e\u0441\u0442\u0430 (\u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438). git clone \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435. <\/p>\n<\/li>\n<li>\n<p>\u0421\u0431\u043e\u0440\u043a\u0430 \u0432\u0441\u0435\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0436\u0435\u043b\u0435\u0437\u043a\u0438 \u043b\u0438\u0431\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043d\u0430 \u0445\u043e\u0441\u0442\u0435. \u0423\u0442\u0438\u043b\u0438\u0442\u043e\u0439 make \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u0441\u0432\u0435\u0436\u0435-\u0441\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438\/\u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0434\u043e \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b. \u0423\u0442\u0438\u043b\u0438\u0442\u044b scp \u0438 sysupgrade \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435.<\/p>\n<\/li>\n<\/ol>\n<p>\u0411\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0443\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u044d\u0442\u0430\u043f. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u043d \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0442\u044f\u0436\u0435\u043b\u043e\u0432\u0435\u0441\u043d\u044b\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438, \u0442\u044f\u043d\u0443\u0449\u0438\u043c\u0438 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u043a\u0443\u0447\u0443 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/tensorflow\/tensorflow\/tree\/master\/tensorflow\/lite\" rel=\"noopener noreferrer nofollow\">tensorflow-lite (\u0434\u043b\u044f \u043d\u0435\u0439\u0440\u043e\u043d\u043e\u043a)<\/a> \u0438 <a href=\"https:\/\/github.com\/alexa\/avs-device-sdk\" rel=\"noopener noreferrer nofollow\">alexa voice sdk (\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0439 \u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442)<\/a>.<\/p>\n<p>\u041d\u0430 \u0432\u0441\u0435 \u0442\u0440\u0438 \u044d\u0442\u0430\u043f\u0430 (\u043f\u043e\u043b\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0438 \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0436\u0435\u043b\u0435\u0437\u043a\u0438) \u0443 \u043d\u0430\u0441 \u0443\u0445\u043e\u0434\u0438\u043b\u043e <strong>150 \u043c\u0438\u043d\u0443\u0442<\/strong>. \u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0440\u0435\u0434\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439.<\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u044d\u0442\u0430\u043f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u043b <strong>30 \u043c\u0438\u043d\u0443\u0442<\/strong>. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0438 \u0442\u044f\u0436\u0435\u043b\u043e\u0432\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0449\u0435\u0433\u043e \u043d\u0435\u0439\u0440\u043e\u043d\u043a\u0438, &#8212; <strong>13 \u043c\u0438\u043d\u0443\u0442<\/strong>.<\/p>\n<p>\u0422\u0440\u0435\u0442\u0438\u0439 \u044d\u0442\u0430\u043f \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 (\u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438) \u0437\u0430\u043d\u0438\u043c\u0430\u043b <strong>\u043c\u0438\u043d\u0443\u0442 5<\/strong>: \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0441 \u0445\u043e\u0441\u0442\u0430 \u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u043e\u0435 \u0436\u0435\u043b\u0435\u0437\u043e \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 scp. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 sysupgrade.<\/p>\n<p>\u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0435\u043b \u0441\u0442\u0430\u043b\u043e \u0432\u044b\u043c\u043e\u0440\u0430\u0436\u0438\u0432\u0430\u0442\u044c, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u044b\u043b\u0438\u0432\u0430\u043b\u0430\u0441\u044c \u0432 \u043c\u043d\u043e\u0433\u043e\u0447\u0430\u0441\u043e\u0432\u044b\u0435 \u043f\u043e\u0442\u0435\u0440\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e. \u0412 \u0438\u0442\u043e\u0433\u0435, \u043d\u0430\u043c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c:<\/p>\n<ul>\n<li>\n<p><strong>16 \u043c\u0438\u043d\u0443\u0442<\/strong> \u0432\u043c\u0435\u0441\u0442\u043e <strong>150 \u043c\u0438\u043d\u0443\u0442<\/strong> \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0442\u0440\u0435\u0445 \u044d\u0442\u0430\u043f\u043e\u0432 \u0432\u043c\u0435\u0441\u0442\u0435 \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438;<\/p>\n<\/li>\n<li>\n<p><strong>3 \u043c\u0438\u043d\u0443\u0442\u044b<\/strong> \u0432\u043c\u0435\u0441\u0442\u043e <strong>30 \u043c\u0438\u043d\u0443\u0442<\/strong> \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u044d\u0442\u0430\u043f\u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0438 \u0432\u0441\u0435\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0438 <strong>1,5 \u043c\u0438\u043d\u0443\u0442\u044b<\/strong> \u0432\u043c\u0435\u0441\u0442\u043e <strong>13 \u043c\u0438\u043d\u0443\u0442<\/strong> \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>10 \u0441\u0435\u043a\u0443\u043d\u0434<\/strong> \u0432\u043c\u0435\u0441\u0442\u043e <strong>5 \u043c\u0438\u043d\u0443\u0442<\/strong> \u0434\u043b\u044f \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u044d\u0442\u0430\u043f\u0430 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u043e \u0441\u0435\u0431\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u0442\u0430\u043f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u043f\u043b\u0430\u0442\u0438\u0442\u044c \u043f\u0430\u0440\u0443 \u0441\u043e\u0442\u0435\u043d \u0440\u0443\u0431\u043b\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0442\u0430\u0440\u0438\u0444 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430.<\/p>\n<h2>\u0423\u0441\u043a\u043e\u0440\u044f\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u0440\u043e\u0441\u0441-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438<\/h2>\n<p>\u0414\u043e\u043b\u0433\u043e \u0441\u043e\u043c\u043d\u0435\u0432\u0430\u043b\u0438\u0441\u044c, \u0431\u0443\u0434\u0435\u0442 \u043b\u0438 \u0441\u043c\u044b\u0441\u043b, \u043d\u043e \u0432\u0441\u0435 \u0436\u0435 \u043f\u043e\u0448\u043b\u0438 \u0432\u0430-\u0431\u0430\u043d\u043a, \u043d\u0430\u0447\u0438\u0442\u0430\u0432\u0448\u0438\u0441\u044c \u0441\u0442\u0430\u0442\u0435\u0439 \u043e <a href=\"https:\/\/www.servethehome.com\/amd-ryzen-threadripper-3970x-review-32-cores-of-madness\/amd-threadripper-3970x-linux-kernel-compile-benchmark\/\" rel=\"noopener noreferrer nofollow\">\u0432\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430\u0445<\/a>, \u0438 \u0440\u0430\u0441\u043a\u043e\u0448\u0435\u043b\u0438\u043b\u0438\u0441\u044c \u043d\u0430  \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u0441\u0442\u0430\u043d\u0446\u0438\u044e \u043d\u0430 \u0431\u0430\u0437\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 AMD Threadripper 3970X (64 \u044f\u0434\u0440\u0430):<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u043f\u043e\u043f\u0443\u0442\u043d\u043e \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u044f \u0432\u0438\u0434\u0435\u043e-\u043a\u0430\u0440\u0442\u0443 NVIDIA GeForce 3080TI \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0435\u0439\u0440\u043e\u043d\u043a\u0430\u043c\u0438, 128 \u0413\u0431 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 1 \u0422\u0431 ssd \u0434\u0438\u0441\u043a. \u0417\u0430\u043a\u043e\u043d\u0447\u0438\u043b \u0441\u0431\u043e\u0440\u043a\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0438\u043a\u0430 \u0443\u0436\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0439 \u043d\u043e\u0447\u0438, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b Ubuntu \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0435 \u0437\u0430\u0431\u044b\u0432 \u043f\u0440\u043e make -j64&#8230; \u0420\u0430\u0437\u043e\u0447\u0430\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u0435\u0434\u0435\u043b\u0430, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b 30 \u043c\u0438\u043d\u0443\u0442, \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u0435\u0449\u0430\u043d\u043d\u044b\u0445 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430\u043c\u0438 2 \u043c\u0438\u043d\u0443\u0442. \u041f\u043b\u044e\u043d\u0443\u043b \u043d\u0430 \u0432\u0441\u0435 \u0438 \u043b\u0435\u0433 \u0441\u043f\u0430\u0442\u044c.<\/p>\n<p>\u0421 \u0443\u0442\u0440\u0430 \u043f\u0440\u0438\u043d\u044f\u043b\u0441\u044f \u0432\u044b\u0436\u0438\u043c\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u043e\u043a\u0438 \u0438\u0437 \u0434\u043e\u0440\u043e\u0433\u043e\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u043f\u043e\u043a\u0443\u043f\u043a\u0438. \u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b htop \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u041b\u0438\u0448\u044c \u0438\u0437\u0440\u0435\u0434\u043a\u0430 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u043b \u043f\u043e\u0434\u043e\u0431\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0438\u043d\u043e\u0433\u0434\u0430 \u0442\u0430\u043a\u0443\u044e:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u043d\u043e, \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e, \u0442\u0430\u043a\u0443\u044e:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u042d\u0442\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442\u0441\u044f \u043d\u0435 \u0432\u0441\u0435 \u044f\u0434\u0440\u0430. \u041e\u0442\u0432\u0435\u0442 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043d\u0430\u0448\u0435\u043b \u0431\u044b\u0441\u0442\u0440\u043e: <a href=\"https:\/\/github.com\/openwrt\/packages\/issues\/6841\" rel=\"noopener noreferrer nofollow\">Enable parallel builds by default?<\/a>. \u041d\u0435\u0434\u043e\u043b\u0433\u043e \u0434\u0443\u043c\u0430\u044f \u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0442\u0438\u043b <a href=\"https:\/\/github.com\/wireless-road\/imx6ull-openwrt\/commit\/f783e31644486ed368c9f076e8554a36853bd7a1\" rel=\"noopener noreferrer nofollow\">\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f<\/a> \u043a \u0441\u0435\u0431\u0435 \u0432 \u0440\u0435\u043f\u0443 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0437\u0430\u0432\u0435\u0442\u043d\u044b\u0435 3 \u043c\u0438\u043d\u0443\u0442\u044b \u043d\u0430 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0438 1,5 \u043c\u0438\u043d\u0443\u0442\u044b \u043d\u0430 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. htop \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u043f\u043e\u043b\u043d\u0443\u044e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443. \u0420\u0430\u0434\u043e\u0441\u0442\u0438 \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u0435\u0434\u0435\u043b\u0430! \u0414\u0435\u043d\u044c\u0433\u0438 \u043d\u0435 \u0443\u0448\u043b\u0438 \u043d\u0430 \u0432\u0435\u0442\u0435\u0440!<\/p>\n<p>\u0412\u0434\u043e\u0431\u0430\u0432\u043e\u043a \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u0438\u0437 RAMDISK:<\/p>\n<pre><code>$\u00a0sudo\u00a0mkdir\u00a0\/mnt\/ramdisk $ sudo\u00a0mount\u00a0-t\u00a0tmpfs\u00a0-o\u00a0rw,size=2G tmpfs\u00a0\/mnt\/ramdisk $\u00a0df\u00a0-h $ cd \/mnt\/ramdisk $ git clone ...<\/code><\/pre>\n<p>\u043d\u043e \u043e\u0441\u043e\u0431\u043e\u0433\u043e \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u043b.<\/p>\n<p>\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043e\u043c\u0440\u0430\u0447\u0430\u0432\u0448\u0438\u0439 \u0440\u0430\u0434\u043e\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441, &#8212; \u0441\u0431\u043e\u0440\u043a\u0430 \u0438\u043d\u043e\u0433\u0434\u0430, \u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0430\u0434\u0430\u043b\u0430 \u043d\u0430 \u0441\u0430\u043c\u044b\u043c \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u0430\u0445. \u041f\u043e\u0433\u0443\u0433\u043b\u0438\u0432, \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, &#8212; \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438 \u043c\u043d\u043e\u0433\u043e\u044f\u0434\u0435\u0440\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435. <\/p>\n<p>\u041d\u043e \u044d\u0442\u043e\u0442 \u043a\u0435\u0439\u0441 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0437\u0430\u043a\u0440\u044b\u043b <a href=\"https:\/\/github.com\/wireless-road\/imx6ull-openwrt\/commit\/3e555184ba1bf06edaffc56f153381e83f9bba24\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u0441\u0442\u044b\u043b\u0435\u043c<\/a>. \u0412 \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u043e\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u043b:<\/p>\n<pre><code>make -j $(nproc);<\/code><\/pre>\n<p>\u043d\u0430:<\/p>\n<pre><code>compiled_successful_flag=0;  compile() { compiled_successful_flag=0; if make -j $(nproc); then compiled_successful_flag=1; return else return fi }  ...  while [ $compiled_successful_flag -eq 0 ]; do compile; sleep 1; done<\/code><\/pre>\n<p>\u0442.\u0435., \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u0438 \u043f\u0430\u0434\u0435\u043d\u0438\u0438. \u0417\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u0435 \u0432 \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0431\u044b\u043b\u043e \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0438 \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043f\u0430\u0434\u0435\u043d\u0438\u044f\u0445 \u0443\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437 \u0437\u0430 3-4 \u043c\u0438\u043d\u0443\u0442\u044b.<\/p>\n<h2>\u0423\u0441\u043a\u043e\u0440\u044f\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0436\u0435\u043b\u0435\u0437\u043a\u0438<\/h2>\n<p>\u041f\u043e\u0433\u0443\u043b\u044f\u0432 \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430, \u0443\u0437\u043d\u0430\u043b, \u0447\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 scp \u0438 \u0435\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 sysupgrade \u043c\u043e\u0436\u043d\u043e \u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438 \u044f\u0434\u0440\u043e, \u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043f\u043e \u0441\u0435\u0442\u0438, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/openwrt.org\/docs\/guide-user\/installation\/generic.flashing.tftp\" rel=\"noopener noreferrer nofollow\">tftp<\/a> \u0438 <a href=\"https:\/\/gitlab.ggdns.de\/rizzle\/scripts\/-\/wikis\/tutorials\/openwrt-on-nfs-root\" rel=\"noopener noreferrer nofollow\">nfs<\/a>.<\/p>\n<p>\u0421\u0440\u0430\u0437\u0443 \u0436\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u043e \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438 tftp-\u0441\u0435\u0440\u0432\u0435\u0440 \u0438 nfs-\u0441\u0435\u0440\u0432\u0435\u0440 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043b\u0430\u0434\u0438\u0432 \u0432\u0441\u0435 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043d\u0435 \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0435 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0445\u043e\u0441\u0442. \u0418 \u0432 \u044d\u0442\u043e\u043c \u043f\u043e\u043c\u043e\u0433\u043b\u0438 \u0432\u0435\u043b\u0438\u043a\u0438\u0435 \u0438 \u043c\u043e\u0433\u0443\u0447\u0438\u0435 <a href=\"https:\/\/www.docker.com\/\" rel=\"noopener noreferrer nofollow\">docker<\/a> \u0438 <a href=\"https:\/\/docs.docker.com\/compose\/\" rel=\"noopener noreferrer nofollow\">docker-compose<\/a>. \u0415\u0441\u043b\u0438 \u0432\u043a\u0440\u0430\u0442\u0446\u0435, &#8212; \u0442\u043e \u044d\u0442\u043e \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u0430\u044f \u043f\u0438\u043b\u044e\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0441\u043e\u0444\u0442 \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u043e\u0434\u043d\u0438\u043c \u043d\u0430\u0436\u0430\u0442\u0438\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0438 (<code>$ docker-compose up -d<\/code>) \u043d\u0435 \u0442\u0440\u0430\u0442\u044f \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0435 \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u0438\u043b\u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u041f\u041a.<\/p>\n<p>\u0418\u0442\u0430\u043a,<\/p>\n<h2>\u0417\u0430\u043f\u0443\u0441\u043a TFTP \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u044f\u0434\u0440\u0430<\/h2>\n<p>\u0415\u0433\u043e <code>Dockerfile<\/code>:<\/p>\n<pre><code>FROM debian:stretch-slim  MAINTAINER danrue drue@therub.org # https:\/\/github.com\/danrue\/docker-tftpd-hpa  RUN apt-get update &amp;&amp; \\ apt-get install -y --no-install-recommends \\ tftpd-hpa &amp;&amp; \\ rm -rf \/var\/lib\/apt\/lists\/*  CMD echo -n \"Starting \" &amp;&amp; in.tftpd --version &amp;&amp; in.tftpd -L --user tftp -a 0.0.0.0:69 -s -B1468 -v \/srv\/tftp<\/code><\/pre>\n<p><code>docker-compose.yml<\/code> \u0444\u0430\u0439\u043b:<\/p>\n<pre><code>version: '3.4' services: tftpd-hpa: container_name: tftp build: . volumes: - .\/volume:\/srv\/tftp ports: - 69:69\/udp restart: always<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a \u043d\u0430 \u0445\u043e\u0441\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code>$ docker-compose up -d<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 <em>volume<\/em> \u043e\u0431\u0440\u0430\u0437 \u044f\u0434\u0440\u0430 (<em>uImage<\/em>). \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code>$ cp bin\/targets\/imx6ull\/cortexa7\/openwrt-imx6ull-cortexa7-tensorflow_wifi_dev-uImage\u00a0 _utilities\/tftpd-hpa\/volume\/<\/code><\/pre>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/github.com\/wireless-road\/imx6ull-openwrt\/tree\/tensorflow_lite\/_utilities\/tftpd-hpa\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>.<\/p>\n<p>\u0412\u0441\u0435 \u0433\u043e\u0442\u043e\u0432\u043e \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u044f\u0434\u0440\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u043e\u043c (u-boot, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435). \u041d\u043e \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0436\u0435\u043b\u0435\u0437\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0444\u0430\u0435\u0440\u0432\u043e\u043b\u043b\u0430:<\/p>\n<pre><code>$ sudo ufw status<\/code><\/pre>\n<p>\u0438 \u0435\u0441\u043b\u0438 \u043e\u043d \u0432\u043a\u043b\u044e\u0447\u0435\u043d, \u0442\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0435\u0433\u043e:<\/p>\n<pre><code>$ sudo ufw disable<\/code><\/pre>\n<h2>\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u044f\u0434\u0440\u0430 \u0441 tftp-\u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/h2>\n<p>\u042f\u0434\u0440\u043e \u0433\u0440\u0443\u0437\u0438\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u044d\u0442\u043e u-boot, \u0442\u043e \u043e\u043d, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0443\u043c\u0435\u0435\u0442 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0432\u0430\u0448\u0435\u0439 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0436\u0435\u043b\u0435\u0437\u043a\u0438 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 <code>reboot<\/code>. \u0414\u043e\u0436\u0434\u0438\u0442\u0435\u0441\u044c \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438, \u0443\u0432\u0438\u0434\u0435\u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u043e\u0442\u0441\u0447\u0435\u0442 \u0442\u0430\u0439\u043c\u0435\u0440\u0430,  \u043d\u0430\u0436\u043c\u0438\u0442\u0435 <em>Enter<\/em>. \u0415\u0441\u043b\u0438 \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0437\u043d\u0430\u0447\u043e\u043a \u0441\u0442\u0440\u0435\u043b\u043e\u0447\u043a\u0438: <code>=><\/code>, \u0442\u043e \u0432\u044b \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 U-boot.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438:<\/p>\n<pre><code>=> setenv defbootcmd \"$bootcmd\" => saveenv Saving Environment to SPI Flash... board_spi_cs_gpio bus 2 cs 0 SF: Detected w25q256 with page size 256 Bytes, erase size 4 KiB, total 32 MiB Erasing SPI flash...Writing to SPI flash...done<\/code><\/pre>\n<p>\u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432\u044b \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442:<\/p>\n<pre><code>=> setenv bootcmd \"$defbootcmd\" => saveenv<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0434\u0430\u0435\u043c \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u0447\u0442\u043e\u0431\u044b u-boot \u0437\u043d\u0430\u043b, \u043a\u0443\u0434\u0430 \u0441\u0442\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u0437\u0430 \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u044f\u0434\u0440\u0430:<\/p>\n<pre><code>=> setenv ipaddr 192.168.31.99 => setenv ethaddr 86:72:04:c5:7e:83 => setenv serverip 192.168.31.37 => setenv uimage openwrt-imx6ull-cortexa7-tensorflow_wifi_dev-uImage => printenv loaddadr <\/code><\/pre>\n<p>\u0433\u0434\u0435 <em>192.168.31.99<\/em> &#8212; \u044d\u0442\u043e IP-\u0430\u0434\u0440\u0435\u0441, \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u0436\u0435\u043b\u0435\u0437\u043a\u0435, \u0430 <em>192.168.31.37<\/em> &#8212; \u044d\u0442\u043e IP-\u0430\u0434\u0440\u0435\u0441 \u0445\u043e\u0441\u0442\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u044b \u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 tftp-\u0441\u0435\u0440\u0432\u0435\u0440. <em>openwrt-imx6ull-cortexa7-tensorflow_wifi_dev-uImage<\/em> &#8212; \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 (\u043e\u0431\u0440\u0430\u0437 \u044f\u0434\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u043b\u043e\u0436\u0438\u043b\u0438 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 volume \u043d\u0430 \u0445\u043e\u0441\u0442\u0435), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0441 tftp-\u0441\u0435\u0440\u0432\u0435\u0440\u0430. <code>loadaddr<\/code> &#8212; \u0430\u0434\u0440\u0435\u0441, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0435\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 (\u0443 \u0432\u0430\u0441 \u043e\u043d, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0443\u0436\u0435 \u0437\u0430\u0434\u0430\u043d).<\/p>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u0438\u043d\u0433\u0430\u043d\u0443\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440:<\/p>\n<pre><code>=> ping ${serverip} Using FEC device host 192.168.31.37 is alive<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430:<\/p>\n<pre><code>=> tftp ${loadaddr} ${serverip}:${uimage} Using FEC device TFTP from server 192.168.31.37; our IP address is 192.168.31.99 Filename 'openwrt-imx6ull-cortexa7-tensorflow_wifi_dev-uImage'. Load address: 0x82000000 Loading: ################################################################# ################################################################# ######################################################### 345.7 KiB\/s done Bytes transferred = 2742194 (29d7b2 hex)<\/code><\/pre>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e. \u0417\u043d\u0430\u0447\u0438\u0442 \u043f\u043e\u043a\u0430 \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u043d\u0430\u043f\u043e\u0440\u0442\u0430\u0447\u0438\u043b\u0438 \u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u044f\u0434\u0440\u043e:<\/p>\n<pre><code>=> saveenv => bootm ${loadaddr} ## Booting kernel from Legacy Image at 82000000 ... Image Name: ARM OpenWrt Linux-4.14.199 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 2742130 Bytes = 2.6 MiB Load Address: 80008000 Entry Point: 80008000 Verifying Checksum ... OK Loading Kernel Image ... OKStarting kernel ...[ 0.004494] \/cpus\/cpu@0 missing clock-frequency property [ 0.128440] imx6ul-pinctrl 2290000.iomuxc-snvs: no groups defined in \/soc\/aips-bus@02200000\/iomuxc-snvs@02290000 [ 0.917942] fec 20b4000.ethernet: Invalid MAC address: 00:00:00:00:00:00 [ 1.800403] mxs-dcp 2280000.dcp: Failed to register sha1 hash! [ 7.239994] DHCP\/BOOTP: Reply not for us on eth1, op[2] xid[e2dbd4aa] Press the [f] key and hit [enter] to enter failsafe mode Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level Please press Enter to activate this console.<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043d\u043e\u0432\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0439\u0442\u0435\u0441\u044c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c U-boot \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u044f\u0434\u0440\u0430 \u0441 TFTP-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439:<\/p>\n<pre><code>=> setenv devbootcmd \"tftp ${loadaddr} ${serverip}:${uimage}; bootm ${loadaddr}\" => setenv bootcmd \"$defbootcmd\" => saveenv<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c u-boot \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442<\/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-411879","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/411879","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=411879"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/411879\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=411879"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=411879"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=411879"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}