Как перейти с микроконтроллеров на встроенный Linux? - PullRequest
15 голосов
/ 03 июня 2009

Как своего рода противоположность этому вопросу: "Трудно ли программировать встроенные низкоуровневые системы для разработчиков программного обеспечения" Я хотел бы попросить совета по переходу от встроенных систем низкого уровня к программированию для получения дополнительной продвинутые системы с ОС, особенно встроенный Linux.

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

Теперь у меня в руках большой проект, который будет реализован во встроенном Linux. У меня есть серьезные проблемы с проектированием и поддержанием управляемости, потому что мне не нужно было делать это раньше. Также использование многозадачности и блокировка вызовов вместо выполнения «параллельной» задачи из основной функции - это как в другом мире.

Какой опыт вы получили при переходе от низкоуровневого программирования к более крупным системам с ОС (Linux)? Что было сложно и как ты это решил? Какой тип мышления необходим?

Стоит ли изучать C ++ с нуля или продолжать использовать обычный C?

Ответы [ 4 ]

10 голосов
/ 03 июня 2009

Основные проблемы с использованием ядра Linux для замены микроконтроллерных систем - это управление устройствами, с которыми вы взаимодействуете. Для этого вам, возможно, придется написать драйверы. Я бы сказал придерживайтесь C в качестве языка, потому что вы захотите сохранить пространство пользователя как можно более чистым. Изучите библиотеку uclibc для более простой стандартной библиотеки C.

http://www.uclibc.org/

Вы также можете найти busybox полезным. Это обеспечивает множество утилит пользовательского пространства в виде одного двоичного файла.

http://www.busybox.net/

Тогда это просто вопрос загрузки из некоторого хранилища в работающую систему и запуска некоторой управляющей логики через init, который взаимодействует с вашим оборудованием. При необходимости вы можете получить доступ к работающей системе и запустить утилиты busybox. Действительно, единственное отличие состоит в том, что пользовательское пространство намного меньше, чем в обычном дистрибутиве, и вы будете работать «ближе» к ядру с точки зрения целей.

Также посмотрите в реальном времени Linux.

http://www.realtimelinuxfoundation.org/

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

http://www.cromwell -intl.com / UNIX / Linux-boot.html

Могу помочь.

Короче говоря, если вы не разрабатывали глубокий уровень для Linux, не создавали свой собственный дистрибутив или не имели опыта работы с ядром, тогда вы можете найти программирование трудным .

http://www.linuxdevices.com/ Может также помочь

Удачи

3 голосов
/ 03 июня 2009

Чтобы работать с Unix / Linux, вы должны ознакомиться с философией Unix: http://www.faqs.org/docs/artu/ch01s06.html

Я считаю всю книгу довольно интересной для чтения: http://www.faqs.org/docs/artu/index.html

Здесь вы можете найти бесплатный дистрибутив Linux для встроенных целей и начальный загрузчик: http://www.denx.de/wiki/DULG/WebHome

2 голосов
/ 03 июня 2009

Я был в очень похожем положении не так давно. Я купил и прочитал Embedded Linux Primer , и это был очень полезный способ сделать мысленный переход на ОС высокого уровня (с точки зрения микроконтроллера).

Если у вас есть «время, чтобы не торопиться», вы, очевидно, можете сделать переход. Но если вам нужно быстро набрать скорость, вы, возможно, захотите обратиться к техническому наставнику, который поможет вам.

1 голос
/ 09 июня 2009

Вы также можете найти полезным перейти на Linux, начав с ucLinux . Это в основном Linux на микроконтроллере. Вы могли бы почувствовать ядро ​​без аспекта виртуальной памяти в качестве перехода. Посмотрите, поддерживает ли ucLinux микроконтроллер, с которым вы уже знакомы, и посмотрите, как ядро ​​взаимодействует с этой архитектурой.

Я согласен с тем, что учебник по Embedded Linux Primer отлично подходит для того, чтобы погрузить свой мозг во встроенный Linux. Вам лучше придерживаться C на данный момент. C ++ может подождать, и это более полезно для приложений, а не для кода драйвера.

Если вы довольны работой ucLinux, можете начать с обычного ядра Linux на микропроцессорной архитектуре, такой как ARM, в которой есть MMU и виртуальная память.

Только мои два цента!

...