Colibri PXA320: вести с полей

В то время как некрофилы мучают ни в чем не повинные приборы и космические корабли бороздят…, у нас на colibri pxa320 загрузилось линуксовое ядро.

Загуглив ранним утром на тему PXA320 NAND-контроллера я случайно наткнулся на проект, в котором разработка ведется ровно в том же направлении — поддержка OpenOCD процессора PXA320 и его NAND контроллера. Покурив исходники проекта и почитав блог разработчика было решено не изобретать еще один велосипед, а использовать уже готовый. Начали с OpenOCD — скачали, пропатчили, подключили нашего Франкенштейна (макет с Colibri на борту), а оно возьми да и заработай — TAP контроллер виден, NAND флэш виден и даже читается/пишется.

Дальше пришла очередь U-Boot. Посмотрев на доступные в данный момент компиляторы решил все-таки попытать счастья с arm-angstrom-linux-uclibceabi-gcc версии  4.3.3. Собрал, прошил, но счастья не вышло — U-Boot нещадно вис после вывода инфы о NAND флэшке.

Собрали тулчейн на базе gcc-4.2.2 и glibc, пересобрали U-Boot, прошили (прошивка — это отдельная песня: 256 Kb прошивается за 23 минуты, но лучше уж так, чем никак) — работает!

Скачали последнее ядро с kernel.org, собрали, загрузили в память по tftp — висит. Потом были многие часы развлекалова с разными версиями компилятора, конфигами, грязным хаком функции printk(), разными Load Point и Entri Point.

Ключевыми моментами оказались:

  • компилятор arm-angstrom-linux-gnueabi-gcc версии 4.2.2 (тот же что и для U-Boot)
  • выключенная опция Enable stack unwinding support в конфиге ядра
  • загружать uImage надо в память по адресу 0x80000000 (не смотря на Load point: 0xa0008000 )

Не хватает только initramfs, но об этом в следующих сериях :)

Фоторепортаж с места событий: