Linux 中控制 GPIO 点亮 LED 的方法有好几种
一种是使用内核提供的专门用来控制GPIO 的函数来点亮 LED,如:s3c2410_gpio_cfgpin(led_table[i], led_cfg_table[i]); s3c2410_gpio_setpin(led_table[i], 0);一种是通过 IO 内存猎取硬件地址从而控制 GPIO 来点亮 LED,如:void *ioremap(unsigned long phys_addr, unsigned long size);void ioumap(void *addr);这里主要介绍第二种点亮 LED 方式
1 IO 内存分配和映射1
1 在使用 IO 内存之前首先分配 IO 内存区域
分配和撤销 IO 内存区域使用的函数如下: #include struct resource *request_mem_region(unsigned long start,unsigned long len,char *name);参数说明:start 分配内存起始地址 len 分配内存长度 返回 成功非 NULL,否则返回 NULL
相应的释放函数: void release_mem_region(unsigned long start,unsigned long len); 1
2 在 linux 中不能使用实际的物理地址,要对指定的物理地址进行操作必须先将物理地址映射到虚拟地址中
下面的函数就是实现物理地址到虚拟地址的映射:#include void *ioremap(unsigned long phys_addr, unsigned long size);参数说明:phys_addr 需要访问的物理内存(寄存器)的首地址 size 内存区域大小返回与该段物理地址对应的虚拟地址 相应的撤