(
Уже скоро год, как в черновиках лежит тема "Как устроен телефон". Эта тема связана с моим желанием разобраться, как он устроен и как работает (в деталях). Надеюсь, что в обозримом будущем, таки, напишу, хотя бы коротко, в чём успел разобраться.)
По поводу "сопроцессоров" — это я так назвал некоторые относительно независимые элементы устройства, которые работают как бы сами по себе.
Вот некоторые примеры:
- GSM-модуль. Этот модуль представлять не надо. Он есть у любого GSM-телефона. Скажем, в старом каком-нибудь телефоне (глупофоне), например Motorola C115 он является единственным CPU и выполняет функции как GSM-терминала (общааясь с GSM-сетью), так и функции пользовательского интерфейса.
Мне кажется, это и является причиной ограниченной функциональности, т.к. real-time-задачи GSM плохо сочетаются с произвольными программами, которые хотел бы запускать пользователь.
"Рулит" этим процессором RTOS, например, VxWorks.
Ещё добавлю, что иногда китайские производители телефонов упоминают этот модуль, как "второе ядро процессора" в такой формулировке: "Dual core 65nm ASIC: ARM1176JZFS 650MHz + ARM1176JZS 507MHz", хотя ничего, кроме GSM-стека там "не крутится". Впрочем, технически, это действительно второй процессор на SoC-е.
- GPS-модуль. Во многом находится в том же положении, что и GSM. (Конечно, GSM — это не только собственно GSM: это 3G, CDMA и т.п.)
- Вспомогательные DSP. Тут довольно большое разнообразие. DSP нельзя назвать универсальным CPU, но они так же относительно независимы, то есть работают в своём режиме и со своими программами и данными. В конкретных моделях примером могут послужить различные "железные" кодеки, такие, как H.264 и AAC.
Модули работают независимо, и потому имеют некоторые особые аспекты:
- Как правило, имеют собственные программы, которые берутся из знакомых нам "прошивок". Если Вы пользователь Linux, то познавательно взглянуть в папку /lib/firmware/. На настольном линуксе у меня там сотни файлов, а на Nokia N900 целых 8!
- Эти прошивки отнюдь не являются частью Linux, и чаще всего бывают проприетарными. От этого, до недавнего времени, страдал проект OpenMoko, в котором, кажется, единственной закрытой частью была именно GSM-прошивка. Однако проект osmocomBB, вероятно, закроет эту проблему.
- Взаимодействие CPU с этими модулями осуществляется через электрические протоколы низкого уровня (гораздо ниже, чем, например, PCI), к примеру I²C и 1-wire, через GPIO-контакты SoC. В некоторых случаях это взаимодействие на уровне Serial line, как с GSM и GPS.
В целом, наличие этих модулей, с одной стороны, увеличивает цену конечного продукта, а с другой — увеличивает его привлекательность для потребителя. К примеру, кодек H.264 разгружает центральный процессор и проделывает ту же работу, например, по декодированию видео, потратив значительно меньше энергии. По этому поводу у Apple и Adobe был даже небольшой
скандал.
Поддержка функциональности этих модулей в Linux часто отстаёт: как правило, гораздо легче "завести" процессор и экран, чем всю периферию.
Манжеты не хватило бы, чтобы вместить весь этот текст. Так что "закругляюсь".