Попробовал собрать ядро с патчами для hard real time - на удивление ядро оказалось жизнеспособным :) хотя не без проблем. Не работает SPI - драйвер контроллера не проходит даже ф-ию probe, проблема с установкой частоты тактирования, мне было интересно провести общий обзор поэтому пока не занимался разборками с SPI, просто отключил его. Вторая проблема - с драйвером debug uart и отладочной консоли - тут без нее никак поэтому устранил поблему временно влоб, в прерывании отключил spin_lock, серьезных проблем это не вызывает в процессе работы. Делал все с последними патчами freescale для ядра 2.6.31, к слову эта же ветка является последним официальным релизом поддерживающем патчи -rt. Старотовая точка: https://www.osadl.org/Latest-Stable-Realtime.latest-stable-realtime-linux.0.html
там по ссылкам все разжевано с пошаговыми инструкциями. Патчи freescale для ядра 2.6.31 во вложении.
Они нормально ложатся на ядро 2.6.31.12 с одним исключением - они содержат патч для кодека wm8... не помню какой который присутствует в ветке 2.6.31.12 , в общем в процессе пропатчивания на вопрос нужно ли делать реверс - ответить n(no). Для наложения патчей freescale - скопировать архив в корень исходников, перейти в корень исходников, распаковать в корне
#tar jxf patches.tar.bz2
и выполнить из корня
# patches/patch-kernel.sh
Еще один момент - с ядром 2.6.31.12 у меня вылетает ошибка при работе с ubifs созданной ядром 2.6.31 , пришлось заново создать ubifs на свежем ядре.
Как ни странно, но латентность ванильного ядра c soft real time (preemtive kernel) оказалось практически такой же как и c патчами -rt, по крайней мере если верить тесту cyclictest, и не особо поражает результатами :)
Версия ядра
Так выглядит список процессов
Как можно увидеть - все irq выполняются в отдельных потоках ядра.
PS LCD на фреймбуфере, звук и USB заработали без проблем.
PPS мои проблемы с созданием новых тем были связаны с браузером а не с форумом, на убунте все ОК. Attachment file: uploads/forum/patches.tar.tar
Оживил spi, поднял сеть, скачал ядро с kernel.org 60 мбайт - проблем не замечено. Кстати - с новым "бутстрапом" сеть в u-boot у меня ниразу не заткнулась - создам отдельную тему, дам ссылку на исходники.
Поднял все кроме криптодевайса, подправил нативный драйер сети - скорость до мегабайта в секунду, но что интересно, этот драйвер нестабильно работает в ванильном ядре, а с RT мне его повалить не удалось как ни старался :) запускал два потока на закачку по ftp и два на раздачу по http и ftp - все это одновременно, гонял 700 метровые мпеги (тоесть все честно - никакого сжатия при передаче) при этом играла музыкав фоне - аудиопоток с Интернет. Еще интересно что не все плееры одинаковы полезны :) mpd - последней стабильной версии даже не заикался, играет абсолютно чисто - я был приятно шокирован (и это при 100% загрузке процессора и сетевого интерфейса!). с mplayer, старыми версиями mpd, mpg123 все намного хуже - от полного замолкания или вылета аудиодрайвера до полного зависания системы.
Откуда берется 100% загрузка системы - все дело в уникальной глупости spi - там всего 1 канал dma, для того чтобы просто прочитать регистр из ks8851 нужно сформировать запрос и получить ответ, при этом происходит аж 2 прерывания, 2 смены контекста и 2 переключения настроек dma - это полный пипец, я частично компенсировал этот момент, подправил драйвер spi чтобы короткие сообщения отправлялись в pio а длинные пакеты через dma, это сразу дало прирост скорости сетевого интерфейса ~30% и снижение загрузки процессора а самое главное количество прерываний.
Еще интересное наблюдение - при увеличении процессов использующих сетевой интерфейс нагрузка процессора аномально снижается - видимо rt ядро эффективно вытесняет процессы ожидающие пакеты.
Посетила меня мысль - выпилил асинхронную передачу данных по spi, сделал ее синхронной,в результате сократилась пара spin lock -ов и переключение контекста на completion, соотвественно заменил в драйвере ks8851 вызовы spi_sync на spi_async Результат более чем впечатлил - загрузка процессора на уровне 40%, скорость сетевого интерфейса порядка 1,5 мбайт/сек, ping чуть больше миллисекунды, при этом нагрузки не от spi вообще не видно в top.
Судя по screenshot вы запустили на плате сборку от OpenEmbedded. Какой порт использовали, ведь в OE есть только порты для imx21 и imx27? Сам я использую только rootfs от OE для imx21.