Процессоры ARM и Linux существуют в тесной связке много лет. Назовите какое-нибудь устройство на базе процессора ARM (смартфон, Raspberry Pi, планшет) — и вы обнаружите в нем Linux. Несмотря на это, союз был несчастлив. Для каждой однокристальной системы (System on a Chip или SoC) требовалась отдельная версия Linux. С грядущим ядром Linux 3.7 мы на пути к единому ядру для всех ARM-процессоров.

Наконец-то мы на пути к единственному ядру Linux для всех смартфонов, планшетов и других устройства на ARM.

Хотя семейство процессоров ARM оставалось унифицированным, каждый производитель SoC поддерживал периферийные устройства по-своему. На ПК x86 у нас была BIOS, а позднее и Unified Extensible Firmware Interface (UEFI), с общим программным интерфейсом (API) для ядра Linux. В то время как на разных ARM SoC нельзя было рассчитывать даже на одинаковую работу API с такими типичными подсистемами, как General Purpose Input/Output (GPIO).

За несколько лет новые ARM SoC и устройства для конечных пользователей заполнили рынки. В итоге пришлось заново изобретать колесо для каждого нового чипа и устройства. Это чрезвычайно раздражало низкоуровневых ARM-разработчиков и еще больше высокоуровневых Linux-разработчиков.

Линус Торвальдс решил, что с него хватит. 18 марта 2011-го он написал: “Парни, в целом ARM как чёртова заноза в пальце”. И продолжил: “Вы должны прекратить наступать друг другу на ноги. Беспричинные безумные изменения файлов постоянно приводят к раздражающим конфликтам просто потому, что разные люди в разных ветках ARM эгоистически переименовывают какие-то случайные устройства. Я серьезно”.

Не то чтобы Торвальдс не хотел работать с ними. Дело в том, что сообщество ARM не достигло консенсуса. “Кто-то должен взять в свои руки управление сообществом ARM. Парни, это просто смешно, количество безумных изменений раздражает само по себе. Я получил независимые запросы от четырех разных человек на доступ к одним и тем же файлам, это означает, что здесь что-то не так”, — написал он.

Насколько плохо дела обстоят в действительности? Дэвид Раслинг, технический директор объединения Linaro (от Linux-on-ARM), ранее писал: “Вот цифры для оценки масштаба проблемы — каждый новый релиз ядра содержит около 70000 новых строк кода для ARM, в то время как для x86 около 5000 строк”. Это большое количество кода, которое нужно написать и проверить для каждого нового релиза.

Особенно раздражали Торвальдса совершенно ненужные изменения. “Прекратите безумные переименования! — призвал Торвальдс — Просто остановитесь. Не переименовывайте беспричинно платы и драйверы, особенно если очевидны противоречия. Это бессмысленно. Я говорю не только о переименовании файлов (что случалось и может доставить “удовольствие” при попытке разрешить конфликт, когда кто-то другой делает другие изменения), но и о глупых “изменениях имен, удобных для восприятия человеком” в файлах, что раздражает любого, кто объединяет мусорный код”.

Торвальдс подвел итог: “Кому-то в сообществе ARM нужно взять ответственность на себя и остановить любительские модификации”.

ARM-разработчики вняли призыву.

В этом месяце Торвальдс с радостью объявил о “вливании” мультиплатформенного кода ARM в главное ядро Linux. Работающий над проектом инженер по Google Linux и ARM Улоф Йохансон написал: “Это довольно важная ветка, начало мультиплатформенной поддержки ARM. Данное слияние и более поздние помогут создать единое ядро с поддержкой ARM-платформ Highbank, VExpress, Mvebu, SoC FPGA и Picoxcell. В ближайших релизах будет обеспечена поддержка большего количества платформ”.

Йоханссон также сообщил: “Для того, чтобы это стало практически возможным, пришлось сделать две критически важные вещи:

  • Сегодня каждая платформа имеет свой собственный каталог include в mach-/include/mach/*. Традиционно в каталоге include много общих определений драйверов/платформ, таких как структуры данных для платформы. В новой ветке большинство перемещено в include/linux/platform_data.
  • Для каждой платформы дерево устройств для платы располагается в mach-/Makefile.boot.

По мнению Йоханссона, будет нелегко: “Оба изменения приведут к некоторым конфликтам при слиянии. Но это однократная работа и после ее завершения мы обеспечим порядок на продолжительное время”.

Решение неидеальное. Но пока производители ARM не могут договориться об эквиваленте BIOS или UEFI, единая структура каталогов для каждого ARM SoC устройства все же много лучше, чем создание модифицированного ядра Linux для каждого отдельного SoC.

Удивительно, что популярность ARM-устройств очень высока, невзирая на проблемы с низкоуровневым программированием. Благодаря этой популярности у производителей ARM/Linux есть возможность быстрее внедрять инновации и выводить продукты на рынок.