Опубликован: 24.04.2009 | Уровень: специалист | Доступ: платный
Лекция 10:

Дополнительные возможности ОС

Кодирование с учетом требований безопасности

При написании кода для встроенных устройств для критически важных для безопасности приложений должны быть предприняты дополнительные меры предосторожности в дополнение к тщательному тестированию. Критические для безопасности приложения включают управляющие приложения, такие как автотранспортные, авиационные, биомедицинские и промышленные управляющие приложения, где отказ программного обеспечения может порождать катастрофические результаты. Многие проекты и организации имеют обширные наборы правил и процедур кодирования с учетом требований безопасности.

Краткий список из 10 самых важных правил для кодирования программ C\C++ с учетом требований безопасности обычно включает следующее:

  1. Ограничить весь код самыми простыми управляющими конструкциями – никаких операторов goto, прямой или косвенной рекурсии.
  2. Задать для всех циклических структур фиксированную верхнюю границу. Это не касается бесконечных циклов.
  3. Не использовать динамическое распределение памяти после инициализации. Распределение памяти может иметь иногда непредсказуемое поведение.
  4. Функции должны быть не длиннее 1 страницы. Когда люди пересекают границу страницы, количество ошибок увеличивается.
  5. Функция в среднем должна иметь около двух операторов контроля. Операторы контроля (assert) должны использоваться для проверки ненормальных условий.
  6. Объявлять все объекты данных на минимально возможном уровне области действия.
  7. Каждая вызывающая функция должна проверять возвращаемые коды ошибок, а каждая вызываемая функция должна проверять допустимость параметров.
  8. Препроцессор должен использоваться только для заголовочных файлов (header) и простых макросов.
  9. Использование указателей должно быть ограничено. Не более одного уровня разыменования.
  10. Весь код должен компилироваться со всеми активированными предупреждениями компилятора. Должны также использоваться инструменты анализа кода. Код должен модифицироваться, чтобы исключить все предупреждения (даже по внешнему виду неправильные предупреждения).

CE содержит версию инструмента статического анализа кода PREFast. Чтобы активировать инструмент анализа кода, выберите подпроект, сделайте щелчок правой кнопкой мыши, выберите свойства, и выберите вкладку C\C++. Найдите строку настроек code analysis и измените ее с настройки по умолчанию no на yes. После следующей операции сборки генерируется отчет с дополнительными предупреждениями. Инструмент анализа кода может выявить переполнение буферов, семантические проблемы в использовании HRESULT, потенциальные и реальные проблемы использования памяти, и неправильное использование операторов. Кроме того, он выявляет многие объекты, которые могут быть просто опечатками, но проявляются в коде как несовпадение форматов, неподходящее преобразование типов, и т.д.

CE включает также библиотеку времени выполнения C с улучшенной безопасностью и поддерживает использование безопасных строковых функций. Библиотека времени выполнения С (C Runtime Library - CRT) была расширена, чтобы включить безопасные версии функций, которые создают угрозы безопасности. Более старые, небезопасные версии этих функций теперь исключены, а их использование ведет к предупреждениям во время компиляции. Во многих случаях безопасные строковые функции позволяют безопасно выполнять строковые операции с расширенными множествами символов и с Unicode.

Лицензирование и проблемы интеллектуальной собственности для встроенных систем

При разработке реального продукта вопросы интеллектуальной собственности (ИС) и лицензирования необходимо разрешить на начальном этапе процесса проектирования. Юридические соглашения могут быть достаточно сложными и требовать значительного времени для выработки. Большинство поставщиков ОС запрашивают несколько тысяч долларов за инструменты разработки, и затем часто требуют лицензионные отчисления за каждое устройство. Несколько поставщиков ОС требуют существенную единовременную плату.

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

Текущая коммерческие отчисления за CE 6.0 составляет около US $1000 для инструментов разработки (включая Visual Studio) и от US $3 до US $16 за устройство. Стоимость варьируется в зависимости от уровня предоставляемого исходного кода и приложений, лицензированных для OEM.

Как показано на рисунке 10.11, существует специальный инструмент для определения типа лицензии по файлу ядра NK.BIN. В Platform Builder этот инструмент доступен через Tools _Platform Builder 6.0 Run-time License Assessment Tool. Этот инструмент будет полезен также для перечисления свойств, представленных в сгенерированном ранее файле ядра NK.BIN.

Инструмент оценки лицензии во время работы CE перечисляет свойства, представленные в файле  NK.BIN

Рис. 10.11. Инструмент оценки лицензии во время работы CE перечисляет свойства, представленные в файле NK.BIN

Дополнительная информация

  • Оперативная справочная система в Visual Studio (профильтрованная в Windows Embedded CE 6.0) содержит дополнительную информацию о программе начальной загрузки, OAL, разработке BSP, SDK, и CETK.
  • Учебник, Building Powerful Platforms with Windows CE, James Y. Wilson и Aspi Havewala, хотя и был написан для предыдущей версии CE, все еще остается полезным источником информации о начальных загрузчиках и OAL.
  • Дополнительные разъяснения о рекомендациях по кодированию с учетом требований безопасности можно найти в "The Power of 10: Rules for Developing Safety-Critical Code," Gerard Holzmann, IEEE Computer, June 2006.
  • Интересное углубленное обсуждение методов кодирования и управления проектами при разработке программного обеспечения можно найти в "Code Complete, Second Edition and Software Estimation: Demystifying the Black Art", Steve McConnell.

Контрольные упражнения

  1. Сконфигурируйте eBox для автоматической загрузки локальной копии специального образа ОС времени выполнения NK.BIN. Сохраните сначала используемые по умолчанию фабричные файлы eBox, чтобы их можно было позже восстановить.
  2. После конфигурирования eBox для автоматической загрузки локального ядра NK.BIN, сконфигурируйте реестр eBox для автоматического выполнения при запуске некоторого приложения. (см. "Приложение A: Автоматическое выполнение приложения" )
  3. Создайте загрузочное флэш-устройство USB, которое автоматически загружается с USB и выполняет при запуске некоторое приложения. (см. Приложение B)
  4. Модифицируйте свое ядро, чтобы оно включало в себя приложение удаленного дисплея. Загрузите ОС и выполните CERHOST для экспорта дисплея eBox на ПК системы разработки. (см. "Приложение C: Создание загружаемого устройства USB для eBox" )
  5. Выполните анализатор статического кода PREFast на некоторой прикладной программе или примере исходного кода ОС и просмотрите сгенерированный файл отчета. Попробуйте объяснить все обнаруженные проблемы.
  6. Выполните инструмент Оценки лицензии во время выполнения на файле специального образа NK.BIN. Какой требуется тип лицензии?
  7. Теперь, когда вы познакомились со свойствами и возможностями CE 6.0 и eBox 2300, используйте eBox для создания своего собственного интересного проекта.
Бахтиёр Бутаев
Бахтиёр Бутаев
Таджикистан, Душанбе, Таджикский Технический Университет (ТТУ), 2013
Ярославй Грива
Ярославй Грива
Россия, г. Санкт-Петербург