Доступ на уровне регистрации в драйвере устройства linux

У меня всего 2 недели опыта разработки драйверов для Linux, но у меня есть хороший опыт программирования встроенных систем на языке C. Я пробовал только драйвер символьного устройства в Linux. Теперь я хочу попробовать драйвер устройства для набора светодиодов, подключенных к GPIO. Я использую BeagleBone Black. Я хочу получить к нему доступ с уровня регистра, а не просто вызвать какой-либо драйвер. (Я делаю это, чтобы изучить основы)

Я хочу, чтобы код доступа GPIO моего драйвера был примерно таким, как показано ниже.

void SetLED(unsigned char LED,unsigned char Status){
    //Read the port register
    //BitWise Operation according to function parameters
    //Write back to the register
}

Но мне нужна помощь в том, как получить доступ к регистрам непосредственно в Linux. Я получил фактический адрес регистра порта OUT из таблицы данных как 0x4804C13C.

Простите меня, если я нарушаю какие-либо основы в своем вопросе. Я действительно новичок в линуксе.


person Able Eldhose    schedule 30.09.2014    source источник
comment
Гений, но многие современные периферийные устройства оптимизировали интерфейс своих регистров, так что последовательность чтения-изменения-записи требуется редко.   -  person sawdust    schedule 30.09.2014


Ответы (1)


Ваш водитель должен позвонить

struct resource *request_mem_region(unsigned long start, unsigned long len, char *name);

для регистрации монопольного доступа к этой области памяти.

Затем он должен использовать ioread8(), ioread16() и т. д. и iowrite8(), iowrite16() и т. д.

person Claudio    schedule 30.09.2014
comment
Таким образом, ваш драйвер должен вызвать только...request_mem_region() -- Ваш ответ неполный и, следовательно, неверный. Регистры вряд ли будут отображены в виртуальное адресное пространство, для чего и предназначена функция ioremap(). - person sawdust; 30.09.2014
comment
Не путайте людей, пожалуйста. На x86 можно найти как MMIO, так и IO. Кроме того, ioreadN() и iowriteN() являются излишними, если вы знаете, что регистры доступны через MMIO. - person 0andriy; 20.01.2018