Я во-первых не понимаю термина CRT. Он пришёл из мира Windows, и как со многими вещами из мира Windows за ним стоит непонятно что и никто толком не знает... Подразумевается libc плюс какая-то прослойка между libc и осью? RTOS не знаю должна ли подменять libc, тем более libc может и не входить в состав компилятора... Но конкретно nuttx имеет свою libc. Это вызвано как раз необходимостью связки libc с ОС, что затруднительно сделать для произвольной libc. Кроме того не всякая libc в области embedded достаточно полноценна для применения совместно с nuttx -- наверное, из таких соображений. В голову приходит, например, newlib, но она может быть слишком тяжёлой.
open/write и т.п. связывать не замучаешься. Их вообще в libc нет -- их-то и нужно написать в качестве прослойки между осью и libc. Обычно в opep/write делается какой-нибудь software interrupt с нужными числами в регистре, для вызова функции ОС. На этом всё заканчивается.
При открытии драйвера для АЦП -- вызывается open("/dev/adc"), он попадает через SWI (если есть защита памяти -- иначе может и напрямую) внутрь ядерной реализации open, которая пытается отрыть указанный файл и видит, что это не простой файл, а устройство -- и вызывает реализацию open в драйвере АЦП (а что за драйвер -- догадывается исходя из minor и major номера устройства описателя файла, по крайней мере так в unix, в embedded же может быть сокращено до того, что ядерный open всегда знает, что "/dev/adc" это такой-то драйвер). Библиотека от компилятора или нет совершенно не важно, т.к. в любом случае open -- функция ядра ОС, а в библиотеке лишь прослойка. Да, дальше можно вызывать read, write и т.п. В драйвере конечно может быть "многопоточность", т.к. функции могут вызываться из разных процессов одновременно. Внутри ядра ОС обычно предусмотрены функции синхронизации для кода самой ОС и драйверов.
Где можно почитать о асинхронном вводе-выводе не знаю. Вещь по-моему самоочевидная. Может что-то можно подсмотреть в интерфейсе Video4Linux. Вообще полезно почитать Моррис Дж. Бах "Архитектура операционной системы Unix" (www.lib.ru/BACH), может быть Андрея Робачевского "Операционная система Unix". Рекомендую всегда Дж. Армстронг "Секреты Unix" -- но очень труднодоставаемая.
Драйвер АЦП может, например, считывать значения из регистров и класть их в массив памяти, прямо в память процесса запросившего чтение. По заполнению массива вызывать сигнал в запросившем процессе и заполнять следующий массив... всего массивов 2, например. Пока заполняется второй -- процесс должен среагировать на сигнал, что-то сделать с данными и сообщить драйверу о желании получить третий массив.