SW UART под ядро линукса

Discussion in 'Болталка' started by NekoKoneko, 28 Dec 2011.

  1. NekoKoneko

    NekoKoneko Elder - Старейшина

    Joined:
    29 Oct 2010
    Messages:
    175
    Likes Received:
    141
    Reputations:
    20
    Вобщем суть такова:
    Есть некая железка, чип TCC8900 720MHz, 256 оперативы, 256 флеш, есть сата, есть 100мбит порт, есть USB-хост. Хотел сделать качалку и файл-шару. Беда в одном - китайцы не развели ни одного из шести аппаратных UART-ов, зато развели ноги под опциональные светодиоды, они не распаяны, просто дырки.
    Загрузчик я уже подогнал и собрал "вслепую" по ДШ, работает нормально, ядро тоже стартует, но встает где-то в конце на KP. Где - непонятно, так как нет вывода отладки, а есть только мигание светодиода, повешенное в ядре на функцию panic.
    Вопрос следующий: есть ли реализации программного UART под линуксовое ядро? Чтобы повесить его на случайный GPIO? То, что будет гнать ошибки при передаче знаю, пофиг, нужно только для отладки.
    К сожалению, в кодинге под ядро линукса не так силен, чтобы сразу написать с нуля или запросто портировать с восмибитного МК =(
     
  2. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    не совсем понял твой вопрос.
    http://ics.nxp.com/products/bridges/uart.i2c.master.gpio/
    Сам годик назад занимался программирование МК dspic
     
  3. NekoKoneko

    NekoKoneko Elder - Старейшина

    Joined:
    29 Oct 2010
    Messages:
    175
    Likes Received:
    141
    Reputations:
    20
    Не, ты не понял. Есть нога GPIOE4, на нее надо повесить софтовый UART RX, софтово дергать этой ногой для передачи данных, протокол ведь примитивнейший. Для МК такое есть, но завязано на прерываниях таймера, я такое делал неоднократно. Как это сделать под ядро линукса, черт его знает, ибо кроме впихивания куска кода нужно еще и весь вывод ядра завернуть на этот порт.
    Была идея повесить все на таймер, однако куда инициализацию таймера пихать, чтобы подхватывалось сразу же после старта ядра? В start_kernel()?