Научная статья на тему 'Графический интерфейс пользователя во встраиваемых Linux системах'

Графический интерфейс пользователя во встраиваемых Linux системах Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
444
49
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ФРЕЙМБУФЕР / LINUX / ВСТРАИВАЕМЫЕ СИСТЕМЫ / ГРАФИЧЕСКИЙ ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ (GUI) / LINUX-EMBEDDED

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Петров Алексей Александрович, Еремеев Владимир Александрович

Разработчики встраиваемых систем крайне редко встречаются с задачей создания графического интерфейса пользователя, это связано с тем, что микроконтроллеры для таких целей не предназначены и в основном они выполняют другие задачи. В данной статье рассмотрен один из методов вывода графической информации на экран, используя средства Linux (Linux-embedded), в данном случае это Linux framebuffer. Стоит отметить, что данный метод возможно использовать лишь для однопалатных компьютеров, но никак не для микроконтроллеров.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Графический интерфейс пользователя во встраиваемых Linux системах»

3. Техника высоких напряжений. Под ред. М.В. Костенко. Учебное пособие для вузов. М., »Высшая школа», 1973.

4. Щеглов Н.В. Современные виды изоляции. Ч. 1. Элегазовая изоляция : учеб. пособие / Н.В. Щеглов Новосибирск : Изд-во НГТУ, 2009. 64 с.

5. Щеглов Н.В., Современные виды изоляции. Ч. 3. Вакуумная изоляция : учеб. пособие / Н.В. Щеглов Новосибирск : Изд-во НГТУ, 2011 94 с.

6. Щеглов Н.В. Современные виды изоляции. Ч. 6 : учеб. пособие / Н. В. Щеглов ; Новосиб. гос. техн. ун-т. - Новосибирск : Изд-во НГТУ, 2013. 68 с.

ГРАФИЧЕСКИЙ ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ ВО ВСТРАИВАЕМЫХ LINUX СИСТЕМАХ Петров А.А.1, Еремеев В.А.2

'Петров Алексей Александрович — бакалавр, кафедра систем автоматического контроля и управления; 2Еремеев Владимир Александрович — студент,

кафедра системной среды качества, Национальный исследовательский университет Московский институт электронной техники, г. Зеленоград

Аннотация: разработчики встраиваемых систем крайне редко встречаются с задачей создания графического интерфейса пользователя, это связано с тем, что микроконтроллеры для таких целей не предназначены и в основном они выполняют другие задачи. В данной статье рассмотрен один из методов вывода графической информации на экран, используя средства Linux (Linux-embedded), в данном случае это Linux framebuffer. Стоит отметить, что данный метод возможно использовать лишь для однопалатных компьютеров, но никак не для микроконтроллеров.

Ключевые слова: фреймбуфер, Linux, встраиваемые системы, графический интерфейс пользователя (GUI), Linux-embedded.

Не часто перед разработчиками встраиваемых систем стоит задача создания графического интерфейса (GUI), но все же такие задачи возникают и имеют место быть. Встраиваемые системы (одноплатные компьютеры, контроллеры и прочее) имеют слабую вычислительную мощность, этого достаточно для выполнения узкоспециализированных задач, но для работы с большими объемом информации, а именно работа с графикой, они подходят меньше всего, особенно если приходится работать с экранами высокого разрешения, в данной статье я не буду рассматривать как работать с графическими интерфейсами на микроконтроллерах, статья посвящена использованию фреймбуфера Linux на одноплатных компьютерах, но она так же подойдет и тем кто разрабатывает GUI на ЭВМ со слабой вычислительной мощностью, но все же способных запустить Linux.

Linux framebuffer (фреймбуфер Linux, fbdev от англ. Linux Frame Buffer Device) — это графический аппаратно-независимый уровень абстракций для вывода графики на монитор, обычно на консоль [1]. Фреймбуфер — это участок видеопамяти, предназначенный для кратковременного хранения видеокадров, а Linux framebuffer — это метод доступа к фреймбуферу через ядро Linux, не полагаясь на системно-ориентированные библиотеки. На просторах русскоязычного интернета, фрейбуферу посвящено не так много информации.

Чтобы увидеть результат работы фреймбуфера стоит достаточно лишь выполнить Linux следующие действия [2]:

1. Ctrl + Alt + F1

2. sudo su

3. service lightdm stop

4. cat /dev/urandom > /dev/fb0

5. service lightdm start

Выполнив эти действия, если все работает правильно на экране вы получите следующее изображение (рис. 1).

Рис. 1. Результат работы фреймбуфера

К фреймбуферу можно получить доступ так же, как и к файлу, /dev/fb0 это стандартный путь к фреймбуферу. Вы можете читать и записывать пиксельные данные. Чтобы разместить пиксель, туда куда мы хотим, не используя перезапись всего экрана, требуется знать размер всего буфера. Для таких целей используется функция ioctl, а для того чтобы рисовать то или иное изображение будет использоваться функция mmap Листинг когда:

1. int fb = open("/dev/fb0", O_RDWR);

2. assert(fb > 0);

3. struct fb_var_screeninfo info;

4. assert(0 == ioctl(fb, FBIOGET_VSCREENINFO, &info));

5. size_t len = 4 * info.xres * info.yres;

6. uint32_t *buf = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, fb, 0);

7. assert(buf != MAP_FAILED);

1. Инициируется переменная fb, содержит информацию об открытии фреймбуфера в режиме чтения и записи.

2. Функция assert оценивает выражение, которое передается ей в качестве аргумента, через параметр expression. Если аргумент-выражение этого макроса в функциональной форме равно нулю (т.е. выражение ложно), сообщение записывается на стандартное устройство вывода ошибок и вызывается функция abort, работа программы прекращается.

3. Определяем структуру fb_var_screeninfo, которая будет содержать всю информацию о фрейбуфере.

4. Функция ioctl позволяет записывает информацию в структуру fb_var_screeninfo

5. size_t len = 4 * info.xres * info.yres - размер фреймбуффера.

6. *buf указатель, который содержит в себе адресное пространство фреймбуфера.

7. Определяем все ли правильно функционирует.

Теперь в Linux фреймбуфер можно рисовать. Чтобы отобразить пиксель необходимо выполнить следующее.

buf[bottom * info.xres + x] = 0xFFFFFF; OxFFFFFF цвет пикселя, в данном случае черный.

Список литературы

1. Linux framebuffer. [Электронный ресурс]. Режим доступа: https://ru.wikipedia.org/wiki/Linux_framebuffer/ (дата обращения: 14.05.2018).

2. Embedded GUI Using Linux Frame Buffer Device with LittlevGL. [Электронный ресурс]. Режим доступа: https://littlevgl.com/blog/23/embedded-gui-using-linux-frame-buffer-device-with-littlevgl/ (дата обращения: 13.05.2018).

i Надоели баннеры? Вы всегда можете отключить рекламу.