Задумался о возможности использования низкоуровневого программирования на уровне ядра, т.е. при написании модулей ядра. Что если отключить в menuconfig всю подсистему последовательного порта, а в модуле ядра (драйвере) добавить *.h - файл с описанием регистров. Тогда получится ли писать в модуле ядра в порты напрямую как в standalone?
Было бы очень удобно. Если возможно, то возможно ли такое для любой перифирии(SPI, I2C, UART...) ???
работая в Embedded Linux от рута - вы царь и бог в системе и можете завалить ее в любой момент.. для отладки и понимания работы такой метод удобен и интересен..
во всех остальных вариациях - это просто опасно для надежности и безопасности..
почитайте о mmap и как отразить регистры АРМа в юзерспейс..
/подсказка - поищите на форуме программы "ногодрыгания на АРМе"
А такое же с SPI прокатит? или с любой другой периферией?
И ещё вопрос, поскольку быстро ногой из user_space не подрыгать, возможно ли "ускорить процесс" в kernel_space, если написать соответсвующий модуль ядра.
p.s. в итоге хочу написать модуль spi, для приёма данных(встроенные средства использовать не могу) вот и приходится чится к регистрам обращаться.
нет - это минимально возможный блок выделяемого адресного пространства
если на пальцах - прога типа GPIO запрашивает блок адресного пространства у ядра, потом делает туда отображение блока физических регистров АРМа (i2c, lcd, spi.. etc)
далее считывая и записывая туда значения, вы через юзерспейс работаете напрямую с регистрами АРМа
если нет желания работать с набортным SPI, то проще прикрутить мелкую cpld/fpga и на ней изобразить интерфейс, а в сторону АРМа пустить шинку параллельную..
С набортным работать желание есть. Просто линукс не умеет spi в ребиме слейва, а мне очень надо. Но если вы пишете, что можно отобразить в память любые регистры - то это здорово. На уровне ядра такое будет работать как полноценный драйвер?
#define MAP_SIZE 4096Ul
это размер внутренней RAM?
нет - это минимально возможный блок выделяемого адресного пространства
если на пальцах - прога типа GPIO запрашивает блок адресного пространства у ядра, потом делает туда отображение блока физических регистров АРМа (i2c, lcd, spi.. etc)
далее считывая и записывая туда значения, вы через юзерспейс работаете напрямую с регистрами АРМа
если нет желания работать с набортным SPI, то проще прикрутить мелкую cpld/fpga и на ней изобразить интерфейс, а в сторону АРМа пустить шинку параллельную..
Как раз и хочу использовать набортный spi, только не используя средства линукса, так как мне нужен режим слейв, да и привычнее напрямую в регистры писать. Если можно отобразить регистры и напрямую писать - это здорово. А можно ли таким образом написать модуль ядра, чтобы получился быстрый(по сравнению с юзерспейс) обмен данными?
Как раз и хочу использовать набортный spi, только не используя средства линукса, так как мне нужен режим слейв, да и привычнее напрямую в регистры писать. Если можно отобразить регистры и напрямую писать - это здорово. А можно ли таким образом написать модуль ядра, чтобы получился быстрый(по сравнению с юзерспейс) обмен данными?
плохая идея - работать напрямую с железом, одноразовая..
при смене платформы или камня наработки теряются..
вроде народ пользует spidev - полистайте форум или доку в ядре.
может проще свой драйвер написать? (по отзывам Саши атымеловский драйвер spi глючен и тормознут)..