{"id":436860,"date":"2024-11-02T21:03:50","date_gmt":"2024-11-02T21:03:50","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=436860"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=436860","title":{"rendered":"<span>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 Xenomai 4<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u044f\u0434\u0440\u043e, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0435\u0435 EVL core, \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0443\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 API \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f\u0434\u0440\u0430. \u0410 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u0441\u043f\u0435\u043a\u0442\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0434 Xenomai 4.<\/p>\n<p>Xenomai\u00a0\u2014 \u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f\u00a0\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430\u00a0\u0431\u0430\u0437\u0435 \u044f\u0434\u0440\u0430 Linux. \u041f\u0440\u043e\u0435\u043a\u0442 Xenomai\u00a0\u0431\u044b\u043b \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u0432 2001\u00a0\u0433\u043e\u0434\u0443 \u0441\u00a0\u0446\u0435\u043b\u044c\u044e \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u041e\u0421\u0420\u0412 \u0438 \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u0438\u044f \u0435\u0435 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u043d\u0430\u00a0GNU\/Linux \u0441\u00a0\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u00a0\u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e Xenomai\u00a0\u0431\u044b\u043b \u0441\u0432\u044f\u0437\u0430\u043d \u0441\u00a0RTAI (\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438), \u043d\u043e\u00a0\u043d\u0430\u00a0\u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u043d \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c.<\/p>\n<p>\u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 Xenomai \u0432\u0435\u0440\u0441\u0438\u0438 4. Xenomai 4 \u0438\u043c\u0435\u0435\u0442 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0441 \u0434\u0432\u0443\u043c\u044f \u044f\u0434\u0440\u0430\u043c\u0438. \u041f\u0435\u0440\u0432\u043e\u0435 \u044f\u0434\u0440\u043e Linux: \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u0447, \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0445 \u043e\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0438 \u044f\u0434\u0440\u043e Xenomai: \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u0447 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u042f\u0434\u0440\u043e Linux \u0438 \u044f\u0434\u0440\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e, \u043e\u0431\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0437\u0430\u0434\u0430\u0447, \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0442\u0434\u0430\u0432\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c\u0443 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043d\u0430\u0434 \u043f\u0435\u0440\u0432\u044b\u043c. \u0414\u043b\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 Xenomai \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0421, \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043a\u0430\u043a libevl.<\/p>\n<p>Xenomai \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a PowerPC, Blackfin, ARM, x86, x86_64 \u0434\u0440. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 x86_64 (\u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440: 12th Gen Intel\u00ae Core\u2122 i5-12400 \u00d7 12, \u043f\u0430\u043c\u044f\u0442\u044c: 32,0 \u0413\u0438\u0411), \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 Debian GNU\/Linux 12 (bookworm).<\/p>\n<h2> \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u044f\u0434\u0440\u0430 EVL<\/h2>\n<p> \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u041e\u0421 Debian GNU\/Linux 12 (bookworm), \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 <a href=\"http:\/\/www.debian.org\/\" rel=\"noopener noreferrer nofollow\">www.debian.org<\/a>.<\/p>\n<p> \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430:<\/p>\n<ul>\n<li>\n<p>\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0432 \u0441 \u044f\u0434\u0440\u043e\u043c \u0441 <a href=\"https:\/\/git.xenomai.org\/xenomai4\/linux-evl.git\" rel=\"noopener noreferrer nofollow\">git.xenomai.org\/xenomai4\/linux-evl.git<\/a>;<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0437\u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0432 linux-evl-v6.10-evl-rebase.tar.gz; <\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"bash\">$ sudo tar -xf linux-evl-v6.10-evl-rebase.tar.gz -C \/usr\/src<\/code><\/pre>\n<p> \u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u044b: ncurses-dev, fakeroot, build-essential, dpkg.<\/p>\n<pre><code class=\"bash\">$ sudo apt update $ sudo apt install ncurses-dev fakeroot build-essential dpkg<\/code><\/pre>\n<ul>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u044f\u0434\u0440\u0430 .config \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438;<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"bash\">$ cd \/usr\/src\/linux-evl-v6.10-evl-rebase $ sudo make localmodconfig<\/code><\/pre>\n<ul>\n<li>\n<p> \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u044f\u0434\u0440\u0430 EVL \u0432 \u0444\u0430\u0439\u043b\u0435 .config;<\/p>\n<\/li>\n<\/ul>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"center\">\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\">\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e<\/p>\n<\/td>\n<td>\n<p align=\"center\">\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> N<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044f\u0434\u0440\u043e EVL (\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c y)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_SCHED_QUOTA<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> N<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u0432\u043e\u0442 (\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c y)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_SCHED_TP<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> N<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c y)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_SCHED_TP_NR_PART<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> 4<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u0434\u043b\u044f CONFIG_EVL_SCHED_TP (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_HIGHT_PERCPU_CONCURRENCY<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> N<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c \u044f\u0434\u0440\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 (\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c y)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_RUNSTATS<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> Y<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0421\u0431\u043e\u0440 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e \u043f\u043e\u0442\u043e\u043a\u0430\u0445 (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_COREMEM_SIZE<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> 2048<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0420\u0430\u0437\u043c\u0435\u0440 \u043a\u0443\u0447\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u044f\u0434\u0440\u0430 (\u0432 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442\u0430\u0445) (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_NR_THREADS<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> 256<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432 EVL<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_NR_MONITORS<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> 512<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u043e\u0432 EVL (\u043c\u044c\u044e\u0442\u0435\u043a\u0441\u044b + \u0441\u0435\u043c\u0430\u0444\u043e\u0440\u044b + \u0444\u043b\u0430\u0433\u0438 + \u0441\u043e\u0431\u044b\u0442\u0438\u044f) (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_NR_CLOCKS<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> 8<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0447\u0430\u0441\u043e\u0432 EVL (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_NR_XBUFS<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> 16<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u043a\u0440\u0435\u0441\u0442\u043d\u044b\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432 (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_NR_PROXIES<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> 64<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e EVL \u043f\u0440\u043e\u043a\u0441\u0438 (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_OBSERVABLES<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> 64<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u044b\u0445 EVL (\u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u043e\u0442\u043e\u043a\u0438) (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_LATENCY_USER<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> 0<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 (0 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e  \u043e\u0442\u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f) (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_LATENCY_KERNEL<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> 0<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0434\u043b\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u044f\u0434\u0440\u0430 (0 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442   \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f) (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_LATENCY_IRQ<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> 0<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 (0 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f) (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_DEBUG<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> N<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_DEBUG_CORE<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> N<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_DEBUG_MEMORY<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> N<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0432 core memory allocator \u2014 \u044d\u0442\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b, \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0435 \u043d\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_DEBUG_WOLI<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> N<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u0441 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u043e \u043d\u0435\u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0435  (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_WATCHDOG<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> Y<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0442\u043e\u0440\u043e\u0436\u0435\u0432\u043e\u0439 \u0442\u0430\u0439\u043c\u0435\u0440 (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_WATCHDOG_TIMEOUT<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> 4<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430 \u0441\u0442\u043e\u0440\u043e\u0436\u0435\u0432\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430 (\u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445) (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_GPIOLIB_OOB<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> n<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 \u0432\u043d\u0435\u043f\u043e\u043b\u043e\u0441\u043d\u0443\u044e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043b\u0438\u043d\u0438\u0439 GPIO (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_SPI_OOB, CONFIG_SPIDEV_OOB<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> n<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0447 SPI \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<ul>\n<li>\n<p> \u0421\u0431\u043e\u0440\u043a\u0430 \u044f\u0434\u0440\u0430;<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"bash\">$ sudo make<\/code><\/pre>\n<p> \u0421\u0431\u043e\u0440\u043a\u0430 \u044f\u0434\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f.<\/p>\n<ul>\n<li>\n<p> \u0421\u0431\u043e\u0440\u043a\u0430 deb \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u044f\u0434\u0440\u0430;<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"bash\">$ sudo make bindeb-pkg<\/code><\/pre>\n<ul>\n<li>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u044f\u0434\u0440\u0430;<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"bash\">$ cd .\/.. $ sudo dpkg -i linux-libc-dev_6.1.97-0_amd64.deb $ sudo dpkg -i linux-headers-6.1.97_6.1.97-0_amd64.deb $ sudo dpkg -i linux-image-6.1.97_6.1.97-0_amd64.deb<\/code><\/pre>\n<p> \u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440, \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0432\u044b\u0431\u0435\u0440\u0435\u0442\u0435 \u044f\u0434\u0440\u043e 6.1.97.<\/p>\n<h2> \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 libevl<\/h2>\n<p> \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430:<\/p>\n<ul>\n<li>\n<p> \u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0432 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0441 <a href=\"https:\/\/git.xenomai.org\/xenomai4\/libevl\" rel=\"noopener noreferrer nofollow\">https:\/\/git.xenomai.org\/xenomai4\/libevl<\/a>;<\/p>\n<\/li>\n<li>\n<p> \u0420\u0430\u0437\u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0432 libevl-master.tar.gz;<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"bash\">$ sudo tar -xf libevl-master.tar.gz -C \/usr\/src<\/code><\/pre>\n<p> \u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u044b: meson, ninja-build.<\/p>\n<pre><code class=\"bash\">$ sudo apt -y install  meson  ninja-build<\/code><\/pre>\n<ul>\n<li>\n<p> \u0421\u0431\u043e\u0440\u043a\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438;<\/p>\n<\/li>\n<\/ul>\n<p> \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 meson<\/p>\n<pre><code class=\"bash\">$ cd \/usr\/src\/libevl-master $ sudo meson setup -Duapi=\/usr\/src\/linux-evl-v6.1.y-evl-rebase -Dbuildtype=release -Dprefix=\/usr\/lib\/evl \/usr\/src\/libevl-master\/bin \/usr\/src\/libevl-master<\/code><\/pre>\n<ul>\n<li>\n<p> \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438;<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"bash\">$ cd \/usr\/src\/libevl-master\/bin $ sudo ninja install<\/code><\/pre>\n<h2> \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 EVL-\u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432<\/h2>\n<p> EVL-\u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 Linux, \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043a\u0430\u043a \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u043b\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0441\u043e\u043a\u0435\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0430\u043a\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u0441 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 (struct file_operations). \u042d\u0442\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u0441 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432 EVL.<\/p>\n<pre><code class=\"cpp\">struct file_operations { ...      ssize_t (*oob_read) (struct file *, char __user *, size_t);      ssize_t (*oob_write) (struct file *, const char __user *, size_t);      long (*oob_ioctl) (struct file *, unsigned int, unsigned long); long (*compat_oob_ioctl) (struct file *, unsigned int, unsigned long); __poll_t (*oob_poll) (struct file *, struct oob_poll_wait *);     ... } __randomize_layout;<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ba7\/f6f\/21e\/ba7f6f21ea0e3b240823756e45488259.png\" alt=\"\u0421\u0445\u0435\u043c\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432\" title=\"\u0421\u0445\u0435\u043c\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432\" width=\"792\" height=\"588\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ba7\/f6f\/21e\/ba7f6f21ea0e3b240823756e45488259.png\"\/><\/p>\n<div><figcaption>\u0421\u0445\u0435\u043c\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b open() \u0438\u043b\u0438 close() \u0441 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u043c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u043c, \u0441\u0441\u044b\u043b\u0430\u044e\u0449\u0438\u043c\u0441\u044f \u043d\u0430 \u0444\u0430\u0439\u043b, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c EVL,  \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b (VFS) \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u043f\u043e\u043f\u0430\u0434\u0430\u044f \u0432 .open() \u0438 .release() \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c \u0432 \u0435\u0433\u043e struct file_operations \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0435. \u0422\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a mmap(), ioctl(), read(), write().<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b oob_read(), oob_write() \u0438\u043b\u0438 oob_ioctl() \u0447\u0435\u0440\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 EVL, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432 \u044f\u0434\u0440\u0443 EVL (\u0432\u043c\u0435\u0441\u0442\u043e VFS), \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u043c struct file_operations \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430: \u0442. \u0435. oob_read(), oob_write() \u0438 oob_ioctl(). \u042d\u0442\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c API \u044f\u0434\u0440\u0430 EVL \u0438\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0441\u043b\u0443\u0436\u0431\u044b \u044f\u0434\u0440\u0430.<\/p>\n<p>EVL-\u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0431\u044b\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u0434\u043b\u044f PXIe \u043c\u043e\u0434\u0443\u043b\u044f MP-2861 \u043c\u043d\u043e\u0433\u043e\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b. \u041c\u043e\u0434\u0443\u043b\u044c \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u043f\u043e \u0413\u041e\u0421\u0422 IEC 61131-2 \u0438 \u0440\u0430\u0437\u043e\u0432\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u043f\u043e \u0413\u041e\u0421\u0422 18977-79, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u0410\u041e \u00ab\u041e\u041a\u0411 \u00ab\u0410\u044d\u0440\u043e\u043a\u043e\u0441\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b\u00bb.<\/p>\n<p> \u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u0441\u043f\u0435\u043a\u0442\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f EVL-\u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430. \u0414\u0440\u0430\u0439\u0432\u0435\u0440 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<p> \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">static const struct file_operations dev_fops = {         .owner= THIS_MODULE,         .open= dev_open,         .release= dev_release,     .read= dev_read,         .oob_read= oob_dev_read,     .write= dev_write,         .oob_write= oob_dev_write,         .llseek= dev_lseek };<\/code><\/pre>\n<p> \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0447\u0442\u0435\u043d\u0438\u044f oob_read \u0438 \u0437\u0430\u043f\u0438\u0441\u0438 oob_write.<\/p>\n<p> <em>ssize_t oob_read(int efd, void *buf, size_t count)<\/em><\/p>\n<p>\u042d\u0442\u043e \u0441\u0442\u0440\u043e\u0433\u0438\u0439 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 read() \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430  \u0441 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0443 EVL. \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, oob_read() \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u0447\u0438\u0442\u0430\u0442\u044c count \u0431\u0430\u0439\u0442 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 fd \u0432 \u0431\u0443\u0444\u0435\u0440, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 buf, \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438.<\/p>\n<p>\u0412\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u043e\u043c EVL, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d \u044f\u0434\u0440\u043e\u043c EVL \u043d\u0430 \u044d\u0442\u0430\u043f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438.<\/p>\n<p><em>efd<\/em> \u2014 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0444\u0430\u0439\u043b\u0430, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u0435.<\/p>\n<p>buf \u2014 \u0431\u0443\u0444\u0435\u0440 \u0434\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>count \u2014 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0431\u0430\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0432 buf.<\/p>\n<p><em>ssize_t oob_write(int efd, const void *buf, size_t count)<\/em><\/p>\n<p>\u042d\u0442\u043e \u0441\u0442\u0440\u043e\u0433\u0438\u0439 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 write() \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0443 EVL. oob_write() \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u043e count \u0431\u0430\u0439\u0442 \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 fd \u0438\u0437 \u0431\u0443\u0444\u0435\u0440\u0430, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0441 buf, \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438.<\/p>\n<p> <em>efd<\/em> \u2014 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0444\u0430\u0439\u043b\u0430, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u0435.<\/p>\n<p> buf \u2014 \u0431\u0443\u0444\u0435\u0440, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u043e\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<p> count \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442\u043e\u0432 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 oob \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0438\u0447\u0435\u043c \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0445. \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u0438\u0437 \u044f\u0434\u0440\u0430 \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c EVL \u044f\u0434\u0440\u043e\u043c.<\/p>\n<pre><code class=\"cpp\">static ssize_t oob_dev_read(struct file *file, char __user *buf, size_t count) { struct private_open_file *pof = file-&gt;private_data; struct evl_driver_priv *drv_access_local = pof-&gt;workprivate; int * srcbuff_local = pof-&gt;readbuff;  memcpy_fromio(srcbuff_local, (drv_access_local-&gt;axibar + pof-&gt;dev_off), count);  copy_to_user(buf, srcbuff_local, count);  return count; }<\/code><\/pre>\n<p> memcpy_fromio \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0431\u043b\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430, copy_to_user \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 count \u0431\u0430\u0439\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e.<\/p>\n<pre><code class=\"cpp\">static ssize_t oob_dev_write(struct file *file, const char __user *buf, size_t count) { struct private_open_file *pof = file-&gt;private_data; struct evl_driver_priv * drv_access_local = pof-&gt;workprivate; u32 mvv_local = 0; copy_from_user( &amp;mvv_local, buf, sizeof(u32) ); iowrite32(mvv_local, drv_access_local-&gt;axibar + pof-&gt;dev_off ); return sizeof(u32); }<\/code><\/pre>\n<p> copy_from_user \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430, iowrite32 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0431\u043b\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430.<\/p>\n<h2> \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 EVL-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439<\/h2>\n<p> \u041f\u0435\u0440\u0432\u043e\u0435 \u0447\u0442\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 EVL-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u044d\u0442\u043e \u0442\u043e \u0447\u0442\u043e \u0432\u0441\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u044f\u0434\u0440\u043e\u043c EVL \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 POSIX \u043f\u043e\u0442\u043e\u043a\u0438 pthread_t.<\/p>\n<p> \u041e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u0442\u043e\u043a:<\/p>\n<pre><code class=\"cpp\">pthread_t   m_thread;           \/\/\/&lt; \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u043e\u0442\u043e\u043a\u0430 pthread_attr_t      m_attr;             \/\/\/&lt; \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u043f\u043e\u0442\u043e\u043a\u0430<\/code><\/pre>\n<p> \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e:<\/p>\n<pre><code class=\"cpp\">pthread_attr_init(&amp;m_attr);<\/code><\/pre>\n<p> \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u043e\u0442\u043e\u043a:<\/p>\n<pre><code class=\"cpp\">int err = pthread_create(&amp;m_thread, NULL, recieveThread, this);<\/code><\/pre>\n<p> \u041f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043a \u043a \u044f\u0434\u0440\u0443 EVL:<\/p>\n<pre><code class=\"cpp\">int efd; efd = evl_attach_self(\"\/thread:%d\", getpid());<\/code><\/pre>\n<p> \u041f\u0440\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u043c \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u043a \u044f\u0434\u0440\u0443 EVL \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \/dev\/evl\/thread<\/p>\n<pre><code class=\"bash\">total 0 crw-rw---- 1 root root 246, 1 Jan 1 1970 clone crw-rw---- 1 root root 244, 0 Sep 19 10:45 thread:2102<\/code><\/pre>\n<p> \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u043f\u043e\u0442\u043e\u043a\u0430:<\/p>\n<pre><code class=\"cpp\">struct evl_sched_attrs attrs; int ret;  attrs.sched_policy = SCHED_FIFO; attrs.sched_priority = 1; \/* [1-99] *\/  ret = evl_set_schedattr(efd, &amp;attrs);<\/code><\/pre>\n<p>SCHED_FIFO \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u0430\u044f \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u00ab\u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0440\u0438\u0448\u0435\u043b \u2014 \u043f\u0435\u0440\u0432\u044b\u043c \u0443\u0448\u0435\u043b\u00bb, \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0443\u043f\u0440\u0435\u0436\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 SCHED_FIFO \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0441 \u043d\u0430\u0438\u0432\u044b\u0441\u0448\u0438\u043c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0445 \u0436\u0434\u0430\u043b \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430. EVL \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 99 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 1, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 SCHED_FIFO \u0432 \u044f\u0434\u0440\u0435 (\u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 sched_policy<em>).<\/em><\/p>\n<p>EVL-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438 libevl \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043a\u0443\u0447\u0438 \u043f\u0430\u043c\u044f\u0442\u0438, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u044b \u0438\u043b\u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u044b \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u043c \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0435\u0436\u0438\u043c\u0435.<\/p>\n<p>\u041a\u0443\u0447\u0430 EVL \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u044d\u043a\u0441\u0442\u0435\u043d\u0442\u0430 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u041e\u0417\u0423, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0438 \u043a\u0443\u0434\u0430 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u044e\u0442\u0441\u044f \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b. \u041a\u0430\u0436\u0434\u044b\u0439 \u044d\u043a\u0441\u0442\u0435\u043d\u0442 \u0438\u043c\u0435\u0435\u0442 \u0434\u043b\u0438\u043d\u0443 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 4 \u0413\u0411 &#8212; 512 \u0431\u0430\u0439\u0442. \u041f\u0435\u0440\u0432\u044b\u0439 \u044d\u043a\u0441\u0442\u0435\u043d\u0442, \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043d\u044b\u0439 \u043a \u043b\u044e\u0431\u043e\u0439 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u043a\u0443\u0447\u0435, \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432 evl_init_heap(). \u0417\u0430\u0442\u0435\u043c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0435\u0441\u0442\u0430 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f, \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0432 \u0431\u043e\u043b\u044c\u0448\u0435 \u044d\u043a\u0441\u0442\u0435\u043d\u0442\u043e\u0432 \u041e\u0417\u0423 \u043a \u0442\u0430\u043a\u043e\u0439 \u043a\u0443\u0447\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e evl_extend_heap(). \u041d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043a\u0441\u0442\u0435\u043d\u0442\u043e\u0432, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u043a\u0443\u0447\u0443; \u043e\u0434\u043d\u0430\u043a\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u0438 \u044d\u043a\u0441\u0442\u0435\u043d\u0442\u044b \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043c\u0435\u0441\u0442\u0430 \u043f\u0440\u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u0437 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0439 \u043a\u0443\u0447\u0438, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u044d\u043a\u0441\u0442\u0435\u043d\u0442\u043e\u0432 \u0440\u0430\u0437\u0443\u043c\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c (\u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043c\u0435\u043d\u0435\u0435 \u0434\u0435\u0441\u044f\u0442\u0438 \u0431\u0443\u0434\u0435\u0442 \u0443\u043c\u0435\u0441\u0442\u043d\u044b\u043c). \u041d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0443\u0447, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<p> \u0412\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c:<\/p>\n<pre><code class=\"cpp\">static struct evl_heap runtime_heap_buf; static struct evl_heap runtime_heap_data; static struct evl_heap runtime_heap_fd; const size_t raw_size = EVL_HEAP_RAW_SIZE(m_sizeBlock); const size_t data_size = EVL_HEAP_RAW_SIZE(8); const size_t fd_size = EVL_HEAP_RAW_SIZE(4); void *buf, *data, *fd;  buf = malloc(raw_size); data = malloc(data_size); fd = malloc(fd_size); ret = evl_init_heap(&amp;runtime_heap_buf, buf, raw_size); ret = evl_init_heap(&amp;runtime_heap_data, data, data_size); ret = evl_init_heap(&amp;runtime_heap_fd, fd, fd_size);<\/code><\/pre>\n<p>buf \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0444\u0430\u0439\u043b, data \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043c\u043e\u0434\u0443\u043b\u044f, fd \u0434\u043b\u044f \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 \u0444\u0430\u0439\u043b\u0430 \u043c\u043e\u0434\u0443\u043b\u044f.<\/p>\n<p>\u0420\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0441 \u0434\u0432\u0443\u043c\u044f \u044f\u0434\u0440\u0430\u043c\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432 \u043d\u0435\u0440\u0430\u0431\u043e\u0447\u0435\u043c \u0440\u0435\u0436\u0438\u043c\u0435. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043c\u043e\u0434\u0443\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043d\u0430 \u0434\u0438\u0441\u043a. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 stdio() \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438\u0437-\u0437\u0430 \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a.<\/p>\n<p>\u042f\u0434\u0440\u043e EVL \u0440\u0435\u0448\u0430\u0435\u0442 \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u043e\u043a\u0441\u0438-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0444\u0430\u0439\u043b \u0438\/\u0438\u043b\u0438, \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0442\u0430\u043a\u043e\u0433\u043e \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0434\u043b\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0449\u0438\u0445 \u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<p> \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0444\u0430\u0439\u043b \u0438 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u043c \u0441 \u043f\u0440\u043e\u043a\u0441\u0438-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">m_file = open(m_pathFile.toLocal8Bit(), O_WRONLY | O_APPEND); m_proxyfd = evl_new_proxy(m_file, 1024*m_sizeBlock, \"sfile:%d\", getpid());<\/code><\/pre>\n<p> \u0417\u0430\u043f\u0438\u0441\u044c \u0432 \u0444\u0430\u0439\u043b:<\/p>\n<pre><code class=\"cpp\">oob_write(m_proxyfd, buf, it);<\/code><\/pre>\n<p>\u0427\u0442\u0435\u043d\u0438\u0435 \u0438\u0437 \u043c\u043e\u0434\u0443\u043b\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0432\u043d\u044b\u0435 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u0430\u0439\u043c\u0435\u0440. \u042f\u0434\u0440\u043e EVL \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0430 \u043b\u044e\u0431\u044b\u0445 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0447\u0430\u0441\u0430\u0445 EVL. \u0422\u0430\u0439\u043c\u0435\u0440\u044b EVL \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0443\u044e \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0443, \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0447\u0430\u0441\u0430\u043c\u0438, \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0439 \u043f\u043e\u0442\u043e\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u044f\u0432\u043d\u043e \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u0440\u043e\u043a\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0438\u043b\u0438 \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044f \u0442\u0430\u043a\u043e\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435.<\/p>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0442\u0430\u0439\u043c\u0435\u0440 EVL \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u043c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u043c. API \u0442\u0430\u0439\u043c\u0435\u0440\u0430 EVL \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0438\u043c\u0438\u0442\u0438\u0440\u0443\u0435\u0442 API timerfd, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437:<\/p>\n<ul>\n<li>\n<p> \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u0430;<\/p>\n<\/li>\n<li>\n<p> \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u0430\u0442\u044b \u0442\u0430\u0439\u043c-\u0430\u0443\u0442\u0430, \u0431\u0443\u0434\u044c \u043e\u043d oneshot \u0438\u043b\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0439\u0441\u044f;<\/p>\n<\/li>\n<li>\n<p> \u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u044f (\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e) \u0442\u0430\u0439\u043c-\u0430\u0439\u0442\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e oob_read().<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"cpp\">struct itimerspec value, ovalue; __u64 ticks; struct timespec now; int tmfd;  tmfd = evl_new_timer(EVL_CLOCK_MONOTONIC);  ret = evl_read_clock(EVL_CLOCK_MONOTONIC, &amp;now);  timespecAddNs(&amp;value.it_value, &amp;now, 10000ULL); value.it_interval.tv_sec = 0; value.it_interval.tv_nsec = 10000;   while (m_started) { ret = oob_read(tmfd, &amp;ticks, sizeof(ticks)); }<\/code><\/pre>\n<p>\u0427\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043c\u043e\u0434\u0443\u043b\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0444\u0430\u0439\u043b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 O_OOB:<\/p>\n<pre><code class=\"cpp\">int *fd_int = (int*)fd; *fd_int = open(m_pathDevice.toLocal8Bit(), O_OOB);<\/code><\/pre>\n<p> \u0437\u0430\u0442\u0435\u043c \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"cpp\">lseek(*fd_int, BASE_ADDRESS + offset_rkvalue_1, SEEK_END);<\/code><\/pre>\n<p>\u0421\u0440\u0430\u0437\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f lseek \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0432\u0440\u0435\u043c\u044f \u0435\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e, \u0435\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c.<\/p>\n<p> \u0418 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0447\u0442\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"cpp\">while (m_started) {   ret = oob_read(tmfd, &amp;ticks, sizeof(ticks));    \u2026    oob_read(*fd_int, data_c, 8); }<\/code><\/pre>\n<h2> \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/h2>\n<p>\u0414\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u0443 stress, \u0434\u043b\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e:<\/p>\n<pre><code class=\"bash\">$ sudo apt install stress<\/code><\/pre>\n<p> \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u044f\u0434\u0435\u0440:<\/p>\n<pre><code class=\"bash\">stress --cpu 8 --timeout 1180<\/code><\/pre>\n<p>\u0412 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0435 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u043e\u0434\u0430\u0432\u0430\u043b\u0441\u044f \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0439 \u0438\u043c\u043f\u0443\u043b\u044c\u0441 \u0441 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 1 \u043a\u0413\u0446 \u0438 \u0441\u043a\u0432\u0430\u0436\u043d\u043e\u0441\u0442\u044c\u044e 50% \u0438\u043c\u0438\u0442\u0438\u0440\u0443\u044f \u0440\u0430\u0437\u043e\u0432\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443. \u041e\u0446\u0435\u043d\u0438\u0432\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0435 \u0444\u0440\u043e\u043d\u0442\u043e\u0432 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0438 \u043e\u043d\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u043e \u043c\u0435\u043d\u0435\u0435 10 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434. \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u0438 \u043d\u0435 \u0431\u044b\u043b\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u044b.<\/p>\n<p> \u0421\u043f\u0438\u0441\u043e\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b<\/p>\n<ol>\n<li>\n<p> <a href=\"https:\/\/www.opensourceforu.com\/2015\/10\/the-xenomai-project-a-linux-based-rtos\/\" rel=\"noopener noreferrer nofollow\">https:\/\/www.opensourceforu.com\/2015\/10\/the-xenomai-project-a-linux-based-rtos\/<\/a><\/p>\n<\/li>\n<li>\n<p> <a href=\"https:\/\/v4.xenomai.org\/overview\/\" rel=\"noopener noreferrer nofollow\">https:\/\/v4.xenomai.org\/overview\/<\/a><\/p>\n<\/li>\n<li>\n<p> <a href=\"https:\/\/www.kernel.org\/doc.\/htmldocs\/kernel-hacking\/index.html\" rel=\"noopener noreferrer nofollow\">https:\/\/www.kernel.org\/doc.\/htmldocs\/kernel-hacking\/index.html<\/a><\/p>\n<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/853896\/\"> https:\/\/habr.com\/ru\/articles\/853896\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u044f\u0434\u0440\u043e, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0435\u0435 EVL core, \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0443\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 API \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f\u0434\u0440\u0430. \u0410 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u0441\u043f\u0435\u043a\u0442\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0434 Xenomai 4.<\/p>\n<p>Xenomai\u00a0\u2014 \u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f\u00a0\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430\u00a0\u0431\u0430\u0437\u0435 \u044f\u0434\u0440\u0430 Linux. \u041f\u0440\u043e\u0435\u043a\u0442 Xenomai\u00a0\u0431\u044b\u043b \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u0432 2001\u00a0\u0433\u043e\u0434\u0443 \u0441\u00a0\u0446\u0435\u043b\u044c\u044e \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u041e\u0421\u0420\u0412 \u0438 \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u0438\u044f \u0435\u0435 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u043d\u0430\u00a0GNU\/Linux \u0441\u00a0\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u00a0\u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e Xenomai\u00a0\u0431\u044b\u043b \u0441\u0432\u044f\u0437\u0430\u043d \u0441\u00a0RTAI (\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438), \u043d\u043e\u00a0\u043d\u0430\u00a0\u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u043d \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c.<\/p>\n<p>\u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 Xenomai \u0432\u0435\u0440\u0441\u0438\u0438 4. Xenomai 4 \u0438\u043c\u0435\u0435\u0442 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0441 \u0434\u0432\u0443\u043c\u044f \u044f\u0434\u0440\u0430\u043c\u0438. \u041f\u0435\u0440\u0432\u043e\u0435 \u044f\u0434\u0440\u043e Linux: \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u0447, \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0445 \u043e\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0438 \u044f\u0434\u0440\u043e Xenomai: \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u0447 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u042f\u0434\u0440\u043e Linux \u0438 \u044f\u0434\u0440\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e, \u043e\u0431\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0437\u0430\u0434\u0430\u0447, \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0442\u0434\u0430\u0432\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c\u0443 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043d\u0430\u0434 \u043f\u0435\u0440\u0432\u044b\u043c. \u0414\u043b\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 Xenomai \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0421, \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043a\u0430\u043a libevl.<\/p>\n<p>Xenomai \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a PowerPC, Blackfin, ARM, x86, x86_64 \u0434\u0440. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 x86_64 (\u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440: 12th Gen Intel\u00ae Core\u2122 i5-12400 \u00d7 12, \u043f\u0430\u043c\u044f\u0442\u044c: 32,0 \u0413\u0438\u0411), \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 Debian GNU\/Linux 12 (bookworm).<\/p>\n<h2> \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u044f\u0434\u0440\u0430 EVL<\/h2>\n<p> \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u041e\u0421 Debian GNU\/Linux 12 (bookworm), \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 <a href=\"http:\/\/www.debian.org\/\" rel=\"noopener noreferrer nofollow\">www.debian.org<\/a>.<\/p>\n<p> \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430:<\/p>\n<ul>\n<li>\n<p>\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0432 \u0441 \u044f\u0434\u0440\u043e\u043c \u0441 <a href=\"https:\/\/git.xenomai.org\/xenomai4\/linux-evl.git\" rel=\"noopener noreferrer nofollow\">git.xenomai.org\/xenomai4\/linux-evl.git<\/a>;<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0437\u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0432 linux-evl-v6.10-evl-rebase.tar.gz; <\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"bash\">$ sudo tar -xf linux-evl-v6.10-evl-rebase.tar.gz -C \/usr\/src<\/code><\/pre>\n<p> \u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u044b: ncurses-dev, fakeroot, build-essential, dpkg.<\/p>\n<pre><code class=\"bash\">$ sudo apt update $ sudo apt install ncurses-dev fakeroot build-essential dpkg<\/code><\/pre>\n<ul>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u044f\u0434\u0440\u0430 .config \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438;<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"bash\">$ cd \/usr\/src\/linux-evl-v6.10-evl-rebase $ sudo make localmodconfig<\/code><\/pre>\n<ul>\n<li>\n<p> \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u044f\u0434\u0440\u0430 EVL \u0432 \u0444\u0430\u0439\u043b\u0435 .config;<\/p>\n<\/li>\n<\/ul>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"center\">\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\">\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e<\/p>\n<\/td>\n<td>\n<p align=\"center\">\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> N<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044f\u0434\u0440\u043e EVL (\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c y)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_SCHED_QUOTA<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> N<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u0432\u043e\u0442 (\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c y)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_SCHED_TP<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> N<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c y)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_SCHED_TP_NR_PART<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> 4<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u0434\u043b\u044f CONFIG_EVL_SCHED_TP (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_HIGHT_PERCPU_CONCURRENCY<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> N<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c \u044f\u0434\u0440\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 (\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c y)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_RUNSTATS<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> Y<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0421\u0431\u043e\u0440 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e \u043f\u043e\u0442\u043e\u043a\u0430\u0445 (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_COREMEM_SIZE<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> 2048<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0420\u0430\u0437\u043c\u0435\u0440 \u043a\u0443\u0447\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u044f\u0434\u0440\u0430 (\u0432 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442\u0430\u0445) (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_NR_THREADS<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> 256<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432 EVL<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_NR_MONITORS<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> 512<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u043e\u0432 EVL (\u043c\u044c\u044e\u0442\u0435\u043a\u0441\u044b + \u0441\u0435\u043c\u0430\u0444\u043e\u0440\u044b + \u0444\u043b\u0430\u0433\u0438 + \u0441\u043e\u0431\u044b\u0442\u0438\u044f) (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_NR_CLOCKS<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> 8<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0447\u0430\u0441\u043e\u0432 EVL (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_NR_XBUFS<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> 16<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u043a\u0440\u0435\u0441\u0442\u043d\u044b\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432 (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_NR_PROXIES<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> 64<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e EVL \u043f\u0440\u043e\u043a\u0441\u0438 (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_OBSERVABLES<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> 64<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u044b\u0445 EVL (\u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u043e\u0442\u043e\u043a\u0438) (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_LATENCY_USER<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> 0<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 (0 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e  \u043e\u0442\u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f) (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_LATENCY_KERNEL<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> 0<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0434\u043b\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u044f\u0434\u0440\u0430 (0 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442   \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f) (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_LATENCY_IRQ<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> 0<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 (0 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f) (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_DEBUG<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> N<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_DEBUG_CORE<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> N<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_DEBUG_MEMORY<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> N<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0432 core memory allocator \u2014 \u044d\u0442\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b, \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0435 \u043d\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_DEBUG_WOLI<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> N<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u0441 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u043e \u043d\u0435\u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0435  (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_WATCHDOG<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> Y<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0442\u043e\u0440\u043e\u0436\u0435\u0432\u043e\u0439 \u0442\u0430\u0439\u043c\u0435\u0440 (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_EVL_WATCHDOG_TIMEOUT<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> 4<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430 \u0441\u0442\u043e\u0440\u043e\u0436\u0435\u0432\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430 (\u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445) (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_GPIOLIB_OOB<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> n<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 \u0432\u043d\u0435\u043f\u043e\u043b\u043e\u0441\u043d\u0443\u044e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043b\u0438\u043d\u0438\u0439 GPIO (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"257\" width=\"257\">\n<p align=\"left\"> CONFIG_SPI_OOB, CONFIG_SPIDEV_OOB<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"center\"> n<\/p>\n<\/td>\n<td>\n<p align=\"left\"> \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0447 SPI \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<ul>\n<li>\n<p> \u0421\u0431\u043e\u0440\u043a\u0430 \u044f\u0434\u0440\u0430;<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"bash\">$ sudo make<\/code><\/pre>\n<p> \u0421\u0431\u043e\u0440\u043a\u0430 \u044f\u0434\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f.<\/p>\n<ul>\n<li>\n<p> \u0421\u0431\u043e\u0440\u043a\u0430 deb \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u044f\u0434\u0440\u0430;<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"bash\">$ sudo make bindeb-pkg<\/code><\/pre>\n<ul>\n<li>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u044f\u0434\u0440\u0430;<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"bash\">$ cd .\/.. $ sudo dpkg -i linux-libc-dev_6.1.97-0_amd64.deb $ sudo dpkg -i linux-headers-6.1.97_6.1.97-0_amd64.deb $ sudo dpkg -i linux-image-6.1.97_6.1.97-0_amd64.deb<\/code><\/pre>\n<p> \u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440, \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0432\u044b\u0431\u0435\u0440\u0435\u0442\u0435 \u044f\u0434\u0440\u043e 6.1.97.<\/p>\n<h2> \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 libevl<\/h2>\n<p> \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430:<\/p>\n<ul>\n<li>\n<p> \u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0432 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0441 <a href=\"https:\/\/git.xenomai.org\/xenomai4\/libevl\" rel=\"noopener noreferrer nofollow\">https:\/\/git.xenomai.org\/xenomai4\/libevl<\/a>;<\/p>\n<\/li>\n<li>\n<p> \u0420\u0430\u0437\u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0432 libevl-master.tar.gz;<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"bash\">$ sudo tar -xf libevl-master.tar.gz -C \/usr\/src<\/code><\/pre>\n<p> \u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u044b: meson, ninja-build.<\/p>\n<pre><code class=\"bash\">$ sudo apt -y install  meson  ninja-build<\/code><\/pre>\n<ul>\n<li>\n<p> \u0421\u0431\u043e\u0440\u043a\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438;<\/p>\n<\/li>\n<\/ul>\n<p> \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 meson<\/p>\n<pre><code class=\"bash\">$ cd \/usr\/src\/libevl-master $ sudo meson setup -Duapi=\/usr\/src\/linux-evl-v6.1.y-evl-rebase -Dbuildtype=release -Dprefix=\/usr\/lib\/evl \/usr\/src\/libevl-master\/bin \/usr\/src\/libevl-master<\/code><\/pre>\n<ul>\n<li>\n<p> \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438;<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"bash\">$ cd \/usr\/src\/libevl-master\/bin $ sudo ninja install<\/code><\/pre>\n<h2> \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 EVL-\u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432<\/h2>\n<p> EVL-\u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 Linux, \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043a\u0430\u043a \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u043b\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0441\u043e\u043a\u0435\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0430\u043a\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u0441 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 (struct file_operations). \u042d\u0442\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u0441 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432 EVL.<\/p>\n<pre><code class=\"cpp\">struct file_operations { ...      ssize_t (*oob_read) (struct file *, char __user *, size_t);      ssize_t (*oob_write) (struct file *, const char __user *, size_t);      long (*oob_ioctl) (struct file *, unsigned int, unsigned long); long (*compat_oob_ioctl) (struct file *, unsigned int, unsigned long); __poll_t (*oob_poll) (struct file *, struct oob_poll_wait *);     ... } __randomize_layout;<\/code><\/pre>\n<figure class=\"full-width\">\n<div><figcaption>\u0421\u0445\u0435\u043c\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b open() \u0438\u043b\u0438 close() \u0441 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u043c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u043c, \u0441\u0441\u044b\u043b\u0430\u044e\u0449\u0438\u043c\u0441\u044f \u043d\u0430 \u0444\u0430\u0439\u043b, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c EVL,  \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b (VFS) \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u043f\u043e\u043f\u0430\u0434\u0430\u044f \u0432 .open() \u0438 .release() \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c \u0432 \u0435\u0433\u043e struct file_operations \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0435. \u0422\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a mmap(), ioctl(), read(), write().<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b oob_read(), oob_write() \u0438\u043b\u0438 oob_ioctl() \u0447\u0435\u0440\u0435\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 EVL, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432 \u044f\u0434\u0440\u0443 EVL (\u0432\u043c\u0435\u0441\u0442\u043e VFS), \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u043c struct file_operations \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430: \u0442. \u0435. oob_read(), oob_write() \u0438 oob_ioctl(). \u042d\u0442\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c API \u044f\u0434\u0440\u0430 EVL \u0438\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0441\u043b\u0443\u0436\u0431\u044b \u044f\u0434\u0440\u0430.<\/p>\n<p>EVL-\u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0431\u044b\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u0434\u043b\u044f PXIe \u043c\u043e\u0434\u0443\u043b\u044f MP-2861 \u043c\u043d\u043e\u0433\u043e\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b. \u041c\u043e\u0434\u0443\u043b\u044c \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u043f\u043e \u0413\u041e\u0421\u0422 IEC 61131-2 \u0438 \u0440\u0430\u0437\u043e\u0432\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u043f\u043e \u0413\u041e\u0421\u0422 18977-79, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u0410\u041e \u00ab\u041e\u041a\u0411 \u00ab\u0410\u044d\u0440\u043e\u043a\u043e\u0441\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b\u00bb.<\/p>\n<p> \u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u0441\u043f\u0435\u043a\u0442\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f EVL-\u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430. \u0414\u0440\u0430\u0439\u0432\u0435\u0440 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<p> \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">static const struct file_operations dev_fops = {         .owner= THIS_MODULE,         .open= dev_open,         .release= dev_release,     .read= dev_read,         .oob_read= oob_dev_read,     .write= dev_write,         .oob_write= oob_dev_write,         .llseek= dev_lseek };<\/code><\/pre>\n<p> \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0447\u0442\u0435\u043d\u0438\u044f oob_read \u0438 \u0437\u0430\u043f\u0438\u0441\u0438 oob_write.<\/p>\n<p> <em>ssize_t oob_read(int efd, void *buf, size_t count)<\/em><\/p>\n<p>\u042d\u0442\u043e \u0441\u0442\u0440\u043e\u0433\u0438\u0439 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 read() \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430  \u0441 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0443 EVL. \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, oob_read() \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u0447\u0438\u0442\u0430\u0442\u044c count \u0431\u0430\u0439\u0442 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 fd \u0432 \u0431\u0443\u0444\u0435\u0440, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 buf, \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438.<\/p>\n<p>\u0412\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u043e\u043c EVL, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d \u044f\u0434\u0440\u043e\u043c EVL \u043d\u0430 \u044d\u0442\u0430\u043f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438.<\/p>\n<p><em>efd<\/em> \u2014 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0444\u0430\u0439\u043b\u0430, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u0435.<\/p>\n<p>buf \u2014 \u0431\u0443\u0444\u0435\u0440 \u0434\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>count \u2014 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0431\u0430\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0432 buf.<\/p>\n<p><em>ssize_t oob_write(int efd, const void *buf, size_t count)<\/em><\/p>\n<p>\u042d\u0442\u043e \u0441\u0442\u0440\u043e\u0433\u0438\u0439 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 write() \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0443 EVL. oob_write() \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u043e count \u0431\u0430\u0439\u0442 \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 fd \u0438\u0437 \u0431\u0443\u0444\u0435\u0440\u0430, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0441 buf, \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438.<\/p>\n<p> <em>efd<\/em> \u2014 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0444\u0430\u0439\u043b\u0430, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u0435.<\/p>\n<p> buf \u2014 \u0431\u0443\u0444\u0435\u0440, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u043e\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<p> count \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442\u043e\u0432 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 oob \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0438\u0447\u0435\u043c \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0445. \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u0438\u0437 \u044f\u0434\u0440\u0430 \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c EVL \u044f\u0434\u0440\u043e\u043c.<\/p>\n<pre><code class=\"cpp\">static ssize_t oob_dev_read(struct file *file, char __user *buf, size_t count) { struct private_open_file *pof = file-&gt;private_data; struct evl_driver_priv *drv_access_local = pof-&gt;workprivate; int *<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-436860","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/436860","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=436860"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/436860\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=436860"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=436860"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=436860"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}