Как перейти от микроконтроллеров к встроенным Linux?
В качестве своего рода противоположность этому вопросу: "Программирование встроенных систем низкого уровня для разработчиков программного обеспечения" . Я хотел бы попросить совета о переходе с низкоуровневые встроенные системы для программирования для более сложных систем с ОС, особенно встроенных Linux.
В основном я работал с небольшим оборудованием и программным обеспечением микроконтроллера, но теперь занимаюсь только программным обеспечением. Мое образование также состоит из аппаратного обеспечения и встроенных вещей в основном. У меня не было много курсов программирования и я мало знаю о разработке программного обеспечения или OO-кодировании.
Теперь у меня есть большой проект в моих руках, который будет реализован во встроенной Linux. У меня серьезные проблемы с дизайном вещей и сохранением управляемости, потому что мне не нужно было этого делать раньше. Кроме того, использование многозадачности и блокировки вызовов вместо запуска "параллельной" задачи из основной функции похоже на другой мир.
Какой опыт вы испытываете при переходе от низкоуровневого программирования к более крупным системам с ОС (Linux)? Что было тяжело и как вы его разрешили? Какое мышление необходимо?
Было бы полезно изучить С++ с нуля или продолжить использование простой C?
Ответы
Ответ 1
Основные проблемы с использованием ядра 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/ Может также помочь
Удача
Ответ 2
Чтобы работать с 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
Ответ 3
Не так давно я был в очень похожем затруднительном положении. Я купил и прочитал Embedded Linux Primer, и это был очень полезный способ сделать психический переход на ОС высокого уровня (с точки зрения микроконтроллера).
Если у вас есть время, чтобы "потратить ваше время", "вы, очевидно, могли бы сделать переход. Но если вам нужно быстро встать, вы можете решительно рассмотреть вопрос о том, чтобы помочь техническому наставнику помочь вам.
Ответ 4
Вам также может показаться полезным работать в Linux, начав с ucLinux. Это в основном Linux на микроконтроллере. Вы можете почувствовать ядро без аспекта виртуальной памяти как переход. Посмотрите, поддерживает ли ucLinux микроконтроллер, с которым вы уже знакомы, и посмотрите, как ядро взаимодействует с этой архитектурой.
Я согласен с тем, что книга Embedded Linux Primer отлично подходит для того, чтобы ваш мозг обернулся вокруг встроенной Linux. Тебе лучше придерживаться С на данный момент. С++ может ждать, и это более полезно для приложений, а не кода драйвера.
Когда вам будет удобно работать с ucLinux, вы можете начать с обычного ядра Linux в микропроцессорной архитектуре, такой как ARM с MMU и виртуальной памятью.
Просто мои два цента!