Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:3
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:7
Форум » starterkit.ru » Embedded Linux
Работа с регистрами в драйвере
Dub
Добавлено 31.07.2012 22:33
0
Сообщение: 1
Dub
5

Пункты: 1141
Регистрация: 14.05.2012
Задумался о возможности использования низкоуровневого программирования на уровне ядра, т.е. при написании модулей ядра. Что если отключить в menuconfig всю подсистему последовательного порта, а в модуле ядра (драйвере) добавить *.h - файл с описанием регистров. Тогда получится ли писать в модуле ядра в порты напрямую как в standalone?
Было бы очень удобно. Если возможно, то возможно ли такое для любой перифирии(SPI, I2C, UART...) ???
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 31.07.2012 23:57 Сообщение: 2
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
работая в Embedded Linux от рута - вы царь и бог в системе и можете завалить ее в любой момент.. для отладки и понимания работы такой метод удобен и интересен..
во всех остальных вариациях - это просто опасно для надежности и безопасности..
почитайте о mmap и как отразить регистры АРМа в юзерспейс..
/подсказка - поищите на форуме программы "ногодрыгания на АРМе"

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
dx
Добавлено 01.08.2012 04:56 Сообщение: 3
dx
3.5

Пункты: 7618
Регистрация: 26.10.2010
Пол: Мужчина
Из: Ukraine, Kiev city
if (!request_mem_region(0x10000000, 1024, "fpga_mem"))
return -EBUSY;

base = ioremap(0x10000000, 1024);
if (base) {
printk("Version-->0x%08x.\n", __raw_readl(base));
iounmap(base);
}

release_mem_region(0x10000000, 1024);

or

http://lxr.free-electrons.com/source/drivers/uio/
Спуститься к концу Подняться к началу
Персональная информация
Dub
Добавлено 01.08.2012 07:50 Редактировалось 01.08.2012 08:02 Сообщение: 4
Dub
5

Пункты: 1141
Регистрация: 14.05.2012
Цитата
if (!request_mem_region(0x10000000, 1024, "fpga_mem"))
return -EBUSY;

base = ioremap(0x10000000, 1024);
if (base) {
printk("Version-->0x%08x.\n", __raw_readl(base));
iounmap(base);
}

release_mem_region(0x10000000, 1024);

or

http://lxr.free-electrons.com/source/drivers/uio/


А такое же с SPI прокатит? или с любой другой периферией?

И ещё вопрос, поскольку быстро ногой из user_space не подрыгать, возможно ли "ускорить процесс" в kernel_space, если написать соответсвующий модуль ядра.

p.s. в итоге хочу написать модуль spi, для приёма данных(встроенные средства использовать не могу) вот и приходится чится к регистрам обращаться.
Спуститься к концу Подняться к началу
Персональная информация
Dub
Добавлено 01.08.2012 07:59 Сообщение: 5
Dub
5

Пункты: 1141
Регистрация: 14.05.2012
Цитата
работая в Embedded Linux от рута - вы царь и бог в системе и можете завалить ее в любой момент.. для отладки и понимания работы такой метод удобен и интересен..
во всех остальных вариациях - это просто опасно для надежности и безопасности..
почитайте о mmap и как отразить регистры АРМа в юзерспейс..
/подсказка - поищите на форуме программы "ногодрыгания на АРМе"


Смотрю пример ногодрыгания. Если я правильно понял, то

#define MAP_SIZE 4096Ul

это размер внутренней RAM?
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 01.08.2012 10:50 Сообщение: 6
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
#define MAP_SIZE 4096Ul
это размер внутренней RAM?

нет - это минимально возможный блок выделяемого адресного пространства
если на пальцах - прога типа GPIO запрашивает блок адресного пространства у ядра, потом делает туда отображение блока физических регистров АРМа (i2c, lcd, spi.. etc)
далее считывая и записывая туда значения, вы через юзерспейс работаете напрямую с регистрами АРМа

если нет желания работать с набортным SPI, то проще прикрутить мелкую cpld/fpga и на ней изобразить интерфейс, а в сторону АРМа пустить шинку параллельную..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Dub
Добавлено 01.08.2012 12:09 Сообщение: 7
Dub
5

Пункты: 1141
Регистрация: 14.05.2012
Цитата
Цитата
#define MAP_SIZE 4096Ul
это размер внутренней RAM?

нет - это минимально возможный блок выделяемого адресного пространства
если на пальцах - прога типа GPIO запрашивает блок адресного пространства у ядра, потом делает туда отображение блока физических регистров АРМа (i2c, lcd, spi.. etc)
далее считывая и записывая туда значения, вы через юзерспейс работаете напрямую с регистрами АРМа

если нет желания работать с набортным SPI, то проще прикрутить мелкую cpld/fpga и на ней изобразить интерфейс, а в сторону АРМа пустить шинку параллельную..

С набортным работать желание есть. Просто линукс не умеет spi в ребиме слейва, а мне очень надо. Но если вы пишете, что можно отобразить в память любые регистры - то это здорово. На уровне ядра такое будет работать как полноценный драйвер?
Спуститься к концу Подняться к началу
Персональная информация
Dub
Добавлено 01.08.2012 12:14 Сообщение: 8
Dub
5

Пункты: 1141
Регистрация: 14.05.2012
Цитата
Цитата
#define MAP_SIZE 4096Ul
это размер внутренней RAM?

нет - это минимально возможный блок выделяемого адресного пространства
если на пальцах - прога типа GPIO запрашивает блок адресного пространства у ядра, потом делает туда отображение блока физических регистров АРМа (i2c, lcd, spi.. etc)
далее считывая и записывая туда значения, вы через юзерспейс работаете напрямую с регистрами АРМа

если нет желания работать с набортным SPI, то проще прикрутить мелкую cpld/fpga и на ней изобразить интерфейс, а в сторону АРМа пустить шинку параллельную..

Как раз и хочу использовать набортный spi, только не используя средства линукса, так как мне нужен режим слейв, да и привычнее напрямую в регистры писать. Если можно отобразить регистры и напрямую писать - это здорово. А можно ли таким образом написать модуль ядра, чтобы получился быстрый(по сравнению с юзерспейс) обмен данными?
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 01.08.2012 13:08 Сообщение: 9
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
Как раз и хочу использовать набортный spi, только не используя средства линукса, так как мне нужен режим слейв, да и привычнее напрямую в регистры писать. Если можно отобразить регистры и напрямую писать - это здорово. А можно ли таким образом написать модуль ядра, чтобы получился быстрый(по сравнению с юзерспейс) обмен данными?

плохая идея - работать напрямую с железом, одноразовая..
при смене платформы или камня наработки теряются..
вроде народ пользует spidev - полистайте форум или доку в ядре.
может проще свой драйвер написать? (по отзывам Саши атымеловский драйвер spi глючен и тормознут)..

Цитата
Если можно отобразить регистры и напрямую писать

помните, что это для юзерспейса..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 01.08.2012 19:10 Сообщение: 10
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
вот семпл для 9m10(9g45) как из своей программы запустить SPI
http://www.starterkit.ru/html/index.php?name=forum&op=view&id=15612&num=2#15630

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux