Статья: Разработка системы автоматизированного тестирования UEFI-драйверов с пользовательским интерфейсом

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Файл образа UEFI-драйвера должен располагаться на доступном носителе, например на USB-накопителе или подключенном жестком диске, после чего он может быть загружен в системную память при помощи службы загрузки LoadImage() и запущен c использованием службы загрузки StartImage() [Wei- min 2008]. Таким образом, после замены консолей в системной таблице UEFI-приложение может выполнить попытку поиска драйвера на доступных накопителях, в случае успеха загрузить и запустить его, а после завершения работы драйвера осуществить его выгрузку из памяти и освободить остальную выделенную память.

Опытная проверка

Для проверки системы автоматизированного тестирования был подготовлен простой UEFI-драйвер, который после загрузки и запуска выводит на стандартную консоль вывода сообщение “Hello”, после чего переходит в режим ожидания нажатия клавиши. При нажатии клавиши Enter драйвер очищает стандартную консоль вывода, отправляет на нее сообщение “World”, ждет 5 секунд и завершает свою работу; нажатие остальных клавиш игнорируется. Тестовый драйвер с расширением.efi был помещен на USB-накопитель, подключенный к тестируемой материнской плате AQH310CM, после чего на ней было запущено приложение ConsoleSwapperApp.efi, программная реализация которого была описана ранее.

Кроме того, было создано небольшое приложение на языке Python, запускаемого на Raspberry Pi. При помощи библиотеки pyserial PyPi: Pyserial Project [Электронный ресурс] // Python Software Foundation. (дата обращения 14 января 2020). оно определяет наличие устройства по адресу /dev/ ttyAMAO, которым является ARPI600, отправляет заранее заготовленное сообщение, содержащее инструкцию нажатия клавиши Enter в виде управляющей последовательности ANSI на это устройство, а затем читает данные, выведенные драйвером после обработки полученной команды на стандартную консоль и отправленные на ARPI600. Эта информация сравнивается с также заранее подготовленным «эталонным» состоянием консоли. Если в ответе содержится сообщение “World”, можно сделать вывод о том, что тестируемый драйвер работает корректно, в обратном же случае можно заключить, что его функциональность нарушена. Результат сравнения выводится на экран (“oK” или “ERRoR”).

Результат проверки системы автоматизированного тестирования оказался успешным. Приложение на языке Python отправило на материнскую плату с загруженным тестовым драйвером и запущенным приложением ConsoleSwapperApp команду нажатия клавиши Enter, убедилось в выводе на стандартную консоль сообщения “World” и вывело на экран результат проверки (“oK”).

Заключение

Инструменты автоматизированного тестирования позволяют значительно ускорить процесс разработки программного обеспечения и повысить качество конечного продукта. В статье рассматривается аппаратная и программная реализация универсальной системы автоматизированного тестирования UEFI-драйверов с пользовательским интерфейсом, позволяющая проводить функциональное тестирование разрабатываемого программного обеспечения непосредственно на целевой аппаратной платформе. Основная идея предлагаемого метода заключается в разработке UEFI-приложения, которое перед запуском тестируемого драйвера будет заменять стандартные консоли ввода и вывода на пользовательские, сохраняющие функционал стандартных консолей в полном объеме и в дополнение к этому обеспечивающие дублирование информации между целевой материнской платой и связанным с ним вспомогательным устройством. тестирование программный драйвер интерфейс

Использование системы позволит проводить тестирование в среде, достаточно изолированной от среды выполнения программного обеспечения. Кроме того, программная реализация системы не зависит от тестируемого драйвера, что обеспечивает ее универсальность. Однако она подходит только для испытания UEFI-драйверов с пользовательским интерфейсом, позволяющих оценить их работоспособность по анализу состояния консолей ввода-вывода, и не будет пригодна для проверки функциональности программного обеспечения другого типа (например, драйверов устройств).

Литература

1. Gomes, Amora, Teixeira, Lima, Brito, Ciocari, Machado 2016 - Gomes E.C., Amora P.R., Teixeira E.M., Lima A.G., Brito F.T., Ciocari J.F, Machado J.C. UTTOS: A Tool for Testing UEFI Code in OS Environment // 28th International Conference on Testing Software and Systems (ICTSS-2016), 17-19 October, 2016. Graz, 2016. P. 218-224.

2. Kedlaya, Bhagyalakshmi 2014 - Kedlaya G., Bhagyalakshmi H.R. Design and Implementation of GPIO Enumeration Library and Application for UEFI-BIOS // International Journal of Scientific Engineering and Technology. 2014. Vol. 3, no. 5. P. 524-528.

3. Silicon Labs 2010 - Silicon Labs, AN571: CP210x Virtual COM Port Interface [Электронный ресурс]. (дата обращения 14 января 2020).

4. Tianocore n.d. - Tianocore, Creating a Shell Application [Электронный ресурс] // GitHub, Inc. (дата обращения 14 января 2020).

5. Tianocore 2018 - Tianocore, EDK II Driver Writer's Guide for UEFI 2.3.1 [Электронный ресурс]. (дата обращения 14 января 2020).

6. Tianocore 2019 - Tianocore, EDK II Module Information (INF) File Specification [Электронный ресурс]. (дата обращения 14 января 2020).

7. Unified Extensible Firmware 2017 - Unified Extensible Firmware Interface Specification Version 2.7. [Электронный ресурс]. (дата обращения 14 января 2020).

8. Waveshare n.d. - Waveshare, ARPI600 User Manual [Электронный ресурс]. (дата обращения 14 января 2020).

9. Wei-min, Peng, Han 2008 - Wei-min T., Peng S., Han Z. Design and implementation of UsbKey device driver based on Extensible Firmware Interface // 9th International Conference on Signal Processing, Beijing, 26-29 October 2008. Beijing, 2008. P. 2833-2836.

References

1. Gomes, E.C., Amora, P.R., Teixeira, E.M., Lima, A.G., Brito, F.T., Ciocari, J.F. and Machado, J.C. (2016), “UTTOS: A Tool for Testing UEFI Code in OS Environment”, 28th International Conference on Testing Software and Systems (ICTSS-2016), 17-19 October 2016, Graz, Austria, pp. 218-224.

2. Kedlaya, G. and Bhagyalakshmi, H.R. (2014), “Design and Implementation of GPIO Enumeration Library and Application for UEFI-BIOS”, International Journal of Scientific Engineering and Technology, vol. 3, no. 5, pp. 524-528.

3. Silicon Labs, AN571: CP210x Virtual COM Port Interface (2010), [Online], available at: (Accessed 14 Jan 2020).

4. Tianocore, Creating a Shell Application, GitHub, Inc. [Online], (Accessed 14 Jan 2020).

5. Tianocore, EDK II Driver Writer's Guide for UEFI 2.3.1 (2018), [Online], available at: (Accessed 14 Jan 2020).

6. Tianocore, EDK II Module Information (INF) File Specification (2019), [Online], available at: (Accessed 14 Jan 2020).

7. Unified Extensible Firmware Interface Specification Version 2.7 (2017 EFI_Spec_2_7.pdf (Accessed 14 Jan 2020).

8. Waveshare, ARPI600 User Manual (n.d.), [ (Accessed 14 Jan 2020).

9. Wei-min, T., Peng, S. and Han, Z. (2008), “Design and implementation of UsbKey device driver based on Extensible Firmware Interface”, 2008 9th International Conference on Signal Processing, 26-29 October 2008, Beijing, China, pp. 28332836.