Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > несколько вопросов драйвера(модуля)


Автор: slater 14.3.2011, 12:05
приветствую!

прошу помочь теоретически разобраться в следующих  вопросах:

1. как динамически можно подгрузить модуль(драйвер).

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

2. как я могу узнать(зная схемотехнику, соотв. и физические адресные линии проца) куда ядро размаппило в адресное пространство linux область памяти некого устройства.
(например, чтобы меня поняли....есть например nor flash, ее адресное пространство, например, 2Мб, эти 2Мб маппятся, например, на адресное пространство процессора по адресам, ну например, начиная с 0х0000 0000 адреса)
      Есть способы посмотреть, что и как ядро размаппило периферию на свое адресное пространство?

3. в своем драйвере мне необходимо писать некие команды некому устройству. Дело в том, что я знаю физические адреса, а не виртуальные. Могу я как то записать определенные значения по определенным физическим адресам(например, при реализации своего файлового метода метода iocnt() ) из kernel-space  и из user-space(из пользовательского процесса)?

4. как узнать, какие порты i/o работают через dma?

заранее преогромное спасибо!

Автор: slater 20.3.2011, 13:12
up

Автор: alexvs11 20.3.2011, 13:29
Цитата(slater @  14.3.2011,  12:05 Найти цитируемый пост)
1. как динамически можно подгрузить модуль(драйвер).      нагуглил пока что можно подгружать с помощью aliasов(сейчас разбираюсь с этим методом)      Есть еще способы?      например, по прерыванию?       хотелось бы разобраться с этим вопросом, желательно на простейших примерах.

system( "insmod ..." ); ?  smile rootовские права вам все равно понадобятся


Цитата(slater @  14.3.2011,  12:05 Найти цитируемый пост)
3. в своем драйвере мне необходимо писать некие команды некому устройству. Дело в том, что я знаю физические адреса, а не виртуальные. Могу я как то записать определенные значения по определенным физическим адресам(например, при реализации своего файлового метода метода iocnt() ) из kernel-space  и из user-space(из пользовательского процесса)?

как у вас устройство подключено? если через usb, то там стандартная практика написания usb драйверов, какие адреса вообщем
из user-space пишут в драйвера через ioctl/write, а драйвер уже там сам рулит, при чем адреса

Автор: bsa 20.3.2011, 19:06
slater
1. http://linux.die.net/man/2/init_module
2. на пользовательском уровне это не имеет значение. Поэтому, если тебе это так нужно, то смотри исходники соответствующего модуля
3. есть определенные правила написания драйверов устройств. Поэтому, берешь и читаешь документацию и исходники уже готовых аналогичных устройств.
4. Если устройство подключено через шину PCI или аналогичную, то вся необходимая информация передается ОС. Если же через ISA или еще какую простую шину, то тут или пробовать все возможные варианты, или использовать platform driver (если ресурсы устройства вообще не меняются, как на встраиваемых системах) - в этом случае все физические ресурсы устройства прописываются в ядре, а драйверы уже считывают их и используют. Это позволяет писать общий драйвер устройства независимого от физического подключения.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)