ioremap exmaple

What is ioremap?

ioremap is used to map the I/O address space to kernel virtual address space, so we can access the I/O device.

Usage of ioremap

ioremap is macro definition in asm/io.h.

#define ioremap(cookie,size)           __ioremap(cookie,size,0)

__ioremap is defined in arm/mm/ioremap.c.

void __iomem * __ioremap(unsigned long phys_addr, size_t size, unsigned long flags);

iounmap is used to cancel the map what the ioremap did.

void iounmap(void * addr);

Related function: readl() and writel()

unsigned char readl (unsigned int addr )

void writel (unsigned char data , unsigned short addr )

So now let me take a simple example.

#define BASE 0x12345678
#define GPIO1_MASK 0x40000000

static void __iomem *base_gpio;
int main()
{
    base_gpio = ioremap(BASE, SZ_512)
    //SZ_512 is a macro definition in linux/size.h
    u32 gpioVal = readl(base_gpio + 1)
    //1 needs to be modified to the real offset
    pgioVal &= ~GPIO1_MASK
    //This operation doesn't make sense. It's just an example
    writel(gpioVal, base_gpio + 1)
    //Write the value.
    iounmap(BASE);
} 

Have fun.

Share this article to your social media
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments