Шибанов В.А.
D-Link, г. Рязань, к.т.н., консультант по обучающим проектам, vshibanov @dlink.ru
Учебные курсы компании D-Link по подготовке программистов встроенных систем на основе Linux
КЛЮЧЕВЫЕ СЛОВА
Программирование, встроенные системы, Linux, D-Link, IT-образование.
АННОТАЦИЯ
В статье рассматривается опыт компании D-Link в разработке и реализации дополнительной образовательной программы для студентов в области разработки программного обеспечения для встроенных систем на основе операционной системы Linux.
Среди офисов D-Link в России и СНГ особое место занимает Рязанский офис, который был открыт в 2005 г. В Рязанском офисе располагается центр разработки, в котором выполняется разработка внутреннего программного обеспечения для маршрутизаторов, точек доступа и других устройств, а также кастомизация встроенного программного обеспечения под нужды конкретных корпоративных заказчиков на отечественном рынке. Большинство производимых и разрабатываемых компанией D-Link сетевых устройств представляют собой, по сути, специализированные компьютеры (встроенные системы), функционирующие под управлением операционной системы Linux. Работа программиста компании включает в себя разработку драйверов для Linux, выполнение доработок ядра Linux для конкретных аппаратных платформ, интеграцию существующих открытых прикладных программ в программное обеспечение телекоммуникационных устройств, а также разработку новых прикладных программ для Linux. Для разработки в отделе программирования компании используются различные открытие программы для Linux - в первую очередь - компилятор GCC. Таким образом, Linux выступает и инструментом и объектом разработки, что требует от работников достаточно глубоких знаний Linux и некоторых прикладных программ для указанной операционной системы.
На определенном этапе возникли сложности с набором новых сотрудников в отдел программирования из-за отсутствия на рынке труда свободных специалистов с требуемыми знаниями и навыками. Достаточно естественным решением в этой ситуации, совпадающим с опытом других компаний, было обратить свой взор на студентов и выпускников технических вузов IT-направленности. В то же время комплекс требуемых компанией D-Link знаний является достаточно специфическим для отечественного рынка: насколько известно автору, на территории
Российской Федерации систематическую подготовку разработчиков встроенных систем осуществляют только в Санкт-Петербургском национальном исследовательском университете информационных технологий, механики и оптики (ИТМО) [1]. Поэтому компания пошла по проверенному пути организации собственных курсов и лаборатории для подготовки студентов. Было принято решение организовать дополнительные курсы для студентов Рязанского государственного радиотехнического университета (РГРТУ), являющегося ведущим техническим вузом региона, на базе его факультета вычислительной техники. Занятия на курсах проходят вечером один раз в неделю и длятся три часа. Занятия проходят в учебной лаборатории D-Link, открытой в бизнес-инкубаторе РГРТУ Весь учебный материал разделен на четыре модуля. Рассмотрим содержание каждого из модулей подробнее.
Первый учебный модуль посвящен работе с операционной системой Linux на уровне пользователя. Основной упор делается на работу в режиме командной строки и демонстрации сильных сторон данного подхода. В качестве основного дистрибутива используется Debian GNU/Linux.
Надо заметить, что студенты чаще всего не имеют систематических знаний о Linux. На специальностях, связанных с IT, Linux обычно изучается в дисциплинах "Информатика" и "Операционные системы". В курсе "Информатика" рассматриваются самые основы работы с операционной системой и офисным пакетом Open Office. В курсе "Операционные системы" Linux обычно изучается более подробно, но при этом, все равно, теряется несколько важных разделов, напрямую не связанных с теорией операционных систем. В результате студенты имеют обрывочные представления о Linux и не имеют системных знаний об использовании Linux в качестве инструмента в решении практических задач программиста. В то же время студенты инженерных специальностей, не имеющих прямого отношения к IT, например, "АСУ" или "Радиотехника", могут совсем не обладать навыками работы с Linux. Таким образом, задачей этого модуля является получение студентами знаний, необходимых для практической работы с Linux, и приведение этих знаний к общему стандарту.
Теоретическая часть модуля включает две лекции - обзорную лекцию, посвященную основным возможностям Linux и основным особенностям данной операционной системы, и лекцию, посвященную командной оболочке bash и языку shell.
Практическая часть модуля включает ряд лабораторных работ по следующим темам:
• установка Linux на виртуальную машину Virtual Box,
• основные команды Linux для работы с файлами и каталогами,
• основные команды Linux для работы с процессами,
• перенаправление ввода-вывода команд и команды-фильтры,
• командные файлы и язык shell.
Второй учебный модуль посвящен изучению языка программирования C. Надо сказать, что студенты большинства специальностей в той или иной степени обладают знаниями и навыками в области программирования, но с языком C большая часть студентов не знакома. Как правило, студенты инженерных специальностей изучают программирование на основе языка Pascal. Студенты IT-специальностей также обычно изучают языки с автоматическим управлением памятью -Java и C#. Поэтому одной из основных задач модуля является изучение именно специфики программирования на языке С. В курсе обращается внимание на следующие специфические элементы языка C:
• общая структура программы;
• понятие заголовочных файлов;
• этапы компиляции программы на языке C;
• использование указателей;
• динамическое распределение памяти;
• указатели на функции и сложные объявления в языке C;
• макросы в языке C, условная компиляция.
Еще одной особенностью является то, что во время обучения в вузе студенты, как правило, выполняют лабораторные работы по программированию длительностью два, иногда четыре часа. Сложность задач, решаемых при этом, по понятным причинам является ограниченной. Сложность же задач, возникающих перед программистами при промышленной разработке намного выше, и большая часть студентов решать такие задачи пока не готова. Исключением являются отдельные студенты-энтузиасты, занимающиеся разработкой программ по собственной инициативе. Поэтому еще одной из задач данного модуля является повышение уровня сложности задач, которые могут решать студенты. По сути, лабораторные работы данного модуля представляют собой мини-проекты, которые выполняются студентами в течение недели. Особенностью заданий лабораторных работ является то, что они максимально приближены к задачам из практики промышленного программирования, а не носят абстрактный характер.
Третьей задачей модуля является освоение открытого инструментария программиста для Linux - компилятора GCC, системы сборки Make, отладчиков GDB и DDD.
Теоретическая часть модуля включает две лекции, посвященные основным элементам языка программирования C [2].
Практическая часть модуля включает ряд лабораторных работ по следующим темам:
• основы работы с инструментарием программиста: компилятором GCC, системой сборки Make, отладчиком GDB;
• синтаксис основных операторов и операций языка программирования C;
• структура программы в языке C, работа с файлами;
• указатели в языке C, динамическое распределение памяти, динамические структуры данных;
• статические и разделяемые библиотеки в Linux, указатели на функции.
Третий учебный модуль посвящен изучению устройства ядра Linux и API Linux.
Теоретическая часть модуля посвящена изучению ядра Linux. В частности, рассматриваются общая структура ядра Linux, понятие модуля ядра, устройство виртуальной файловой системы VFS, управление процессами в ядре Linux, ресурсы процесса, понятие планировщика процессов, планировщики процессов 0(1) и CFS, работа с устройствами ввода-вывода, понятие файла устройства, планировщики ввода-вывода, управление памятью в ядре Linux, модель памяти процесса, структура сетевого стека ядра Linux, последовательность загрузки ядра Linux. [3]
Практическая часть модуля посвящена изучению интерфейса прикладных программ UNIX-подобных систем на примере API Linux. В частности, студенты выполняют лабораторные работы по следующим темам:
• изучение системных вызовов Linux для работы с файлами и каталогами и специализированной файловой системы /proc;
• изучение системных вызовов Linux для работы с процессами и для межпроцессного взаимодействия с помощью каналов;
• изучение системных вызовов Linux для работы с компьютерной сетью.
Четвертый учебный модуль посвящен изучению ряда тем, отражающих специфику разработки программного обеспечения встроенных систем на базе операционной системы Linux. Материалы данного модуля представлены в основном практическими работами. В модуле присутствует только одна общая обзорная лекция и ряд лабораторных работ по следующим темам:
• компиляция ядра Linux;
• создание встроенной Linux-системы на основе программы Busybox;
• изучение реальной встроенной системы на основе изучения конкретной модели сетевого устройства D-Link.
После успешного освоения всей учебной программы и выполнения всех учебных заданий студенты получают сертификат о прохождении курсов D-Link.
Заключение
За три выпуска сертификаты о прохождении курсов получили более 20 студентов. 15 студентов приняты на работу в отдел программирования компании.
В дальнейшем планируется разместить разработанные учебные и учебно-методические материалы на сайте дистанционного обучения D-Link [4] в виде нескольких учебных курсов по тематике программирования встроенных систем на базе Linux.
Литература
1. Сайт Интернет: http: //embedded.ifmo.ru/.
2. Керниган Б., Ритчи Д. Язык программирования C. Второе издание, переработанное и дополненное. М: Вильямс - 2008, 304 с.
3. Лав Р. Ядро Linux: описание процесса разработки. 3-е издание. - М: Вильямс. 2012 - 496 с.
4. Сайт Интернет: http://dlink.ru/ru/education/.