реклама на сайте
подробности

 
 
> WinCE 6.0 и драйвер для ARM926, Как правильно доступаться к памяти?
Russky
сообщение Feb 18 2015, 16:16
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 17-11-11
Пользователь №: 68 371



Всем привет!

Есть следующая проблема. Работаю с OMAP-L138. C ARM под WinCE. Написал простенький драйвер (драйвер загружается, IOControl вызывается, все замечательно).
Моему драйверу надо работать с областью памяти для взаимодействия с DSP, например 0xc4000000. Т.е. в эту область надо записать, и считать.
Когда я смотрю как работает DSPLink драйвер, то для того чтобы записать в эту область, но преобразует адрес и записывает в d3a10000. Зачем он это делает, в смысле преобразует, и как он преобразует реальный адрес в этот?
И еще.
Когда мой драйвер пытается доступиться к адресу больше 0x80000000, у меня программа вылетает с OS exception. Очивидно, что там как-то включается режим доступа к адресам, но вопрос как?

В общем вороса два:
Как мне преобразовывать реальный адрес в "виртуальный"?
И как разрешить драйверу доступ ко всему адресному пространству?

Спасибо! sm.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Russky
сообщение Feb 20 2015, 14:18
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 17-11-11
Пользователь №: 68 371



Всем привет, еще раз!
Вот разобрался, как работает адресация. Но возникла теперь вот какая проблема.
Есть метод MmMapIoSpace. Я его пытаюсь вызвать из C# приложения. Вот враппер:

[DllImport("k.coredll.dll")]
или
[DllImport("coredll.dll")]
public static extern IntPtr MmMapIoSpace(ulong PhysicalAddress, uint NumberOfBytes, bool CacheEnable);

При вызове этого метода, вылетает эксепшен, что метода такого нет: Can't find PInvoke DLL 'k.coredll.dll'. (или Can't find PInvoke DLL 'coredll.dll'.)

Или этот метод можно вызывать только из драйвера?

Кто знает где ошибка?
Спасибо! sm.gif
Go to the top of the page
 
+Quote Post
SimpleSoft
сообщение Feb 24 2015, 05:34
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 273
Регистрация: 3-11-05
Пользователь №: 10 442



Цитата(Russky @ Feb 20 2015, 17:18) *
Вот разобрался, как работает адресация. Но возникла теперь вот какая проблема.
Есть метод MmMapIoSpace. Я его пытаюсь вызвать из C# приложения.
Кто знает где ошибка?

Ошибка в том, что VirtualCopy и MmMapIoSpace работают только в Kernel mode. Т.е. трансляция должна быть организована в драйвере, работающем в режиме ядра.
Go to the top of the page
 
+Quote Post
Russky
сообщение Feb 24 2015, 08:54
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 17-11-11
Пользователь №: 68 371



Цитата(SimpleSoft @ Feb 24 2015, 09:34) *
Ошибка в том, что VirtualCopy и MmMapIoSpace работают только в Kernel mode. Т.е. трансляция должна быть организована в драйвере, работающем в режиме ядра.


Да! Только хотел об этом написать! sm.gif
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 03:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.0216 секунд с 7
ELECTRONIX ©2004-2016