This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Keystone II ARM Linux GPIO编程

K2的ARM Linux GPIO怎么编程?

用的是EVMK2H,现在UBoot、Linux Kernel、文件系统安装MCSDK的文档已经烧写完毕。

下一步打算写个测试代码,运行在Linux上通过GPIO点亮LED。

但是没有一点Linux编程基础,有Linux操作GPIO的实例代码吗?或者从什么地方开始着手?

  • Feng jin :

    你好,刚好前段时间写过K2的Linux GPIO控制LED灯的测试程序,基本思路是先找到操作LED对应的寄存器以及寄存器地址。相信这对你来说不是难事。接着就要编写驱动程序控制它。对于Linux驱动程序的编写,你需要明白如何编写模块程序,将控制代码加载到linux内核中。还有通过使用ioremap函数将寄存器的物理地址转换为虚拟地址,完成对寄存器的读写操作。建议看Linux 设备驱动程序》第三版。

    K2 控制LED全亮:

    #include <linux/init.h>
    #include <linux/module.h>
    #include <linux/io.h>
    
    unsigned long gpio_virt;
    unsigned long *gpdir, *gpdat;
    
    static int __init gpio_init(void)
    {
    	gpio_virt = ioremap(0x0260bf00 &~0xfff , SZ_4K);//GPIO 寄存器物理地址转虚拟地址 以4K对齐
         	gpdir = gpio_virt + (0x260bf10 & 0xfff);
         	gpdat = gpio_virt + (0x260bf14 & 0xfff);
          
          	*gpdir = 0x0; 
          	*gpdat = 0xffffffff;
    
    	return 0;
    }
    module_init(gpio_init);
    static void __exit gpio_exit(void){
    
      	iounmap(gpio_virt);	
    }
    module_exit(gpio_exit);
    MODULE_AUTHOR("Rong Lin");
    MODULE_LICENSE("GPL v2");
    MODULE_DESCRIPTION("A simple Module for gpio testing");
    
    驱动程序需要必须对应的Makefile,生成模块程序 gpio.ko
    export LINUXDIR = /home/lr/build/linux-keystone-evm
    all:
    	make -C $(LINUXDIR)  M=`pwd`
    clean:
    	make -C $(LinuxDIR)  M=`pwd`  clean
    
    obj-m += gpio.o
    

    将gpio.ko拷贝到linux文件系统中,执行insmod gpio.ko 后LED灯全亮。

    第一次回答问题,测试代码考虑的不够全面。望见谅。

     

  • 谢谢您的回复,对我们非常有价值!

    但是我理解的是这样的,我烧写的UBI文件是400多M的,应该包含了K2的所有接口驱动。TI应该将K2的这些接口驱动全部封装好了,然后我只需要去调用即可。

    您这种方式,是基于最精简的Linux+文件系统下,自己实现GPIO驱动的吧?

  • GPIO的接口见手册

    http://processors.wiki.ti.com/index.php/MCSDK_UG_Chapter_Exploring#Keystone_GPIO_Driver

    但毕竟GPIO的使用非常灵活,TI提供的驱动不可能可以覆盖到用户所有的情况,如果有自己的需求,应按照Linux驱动的标准进行修改。

  • 谢谢!

    再问一下,我是通过git命令获得最新的Linux源码的,在drivers/gpio/gpio-keystone-ipc.c可以找到针对Keystone的GPIO驱动。

    1. 但是基于这个.c去编程,是不是必须要在Ubuntu下,用makefile的那种方式去编程?

    2. 我在Ubuntu下安装了CCSv6,能否用此.c在CCSv6下编程?类似于CCS下编DSP的程序。

    3. 而这个.c的include包含了#include <linux/****.h>这样的文件,如何在CCSv6下对工程进行配置,从而能指向这些A15 Linux源码的文件?

    4. http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/82679.aspx这个里面讲的是基于CCS的ARM裸跑程序,有在CCS下基于ARM Linux的范例工程可参考吗?

    5. http://edu.21ic.com/Video/index/id/217这个也是基于CCS的ARM裸跑程序编写?有对应的基于CCS的ARM Linux程序编写指导吗?

    谢谢!!

  • 如果你需要使用Linux系统,那肯定是要用makefile那套系统的;CCS不好做OS的编译。

    裸跑和在Linux下编程不太一样,你需要学习的是Linux驱动的写法,这方面的资料和书籍网上有很多了;因为TI使用的也是标准的ARM核和Linux kernel;

    CCS只是一个IDE界面,原则上你想做当然可以。

x 出现错误。请重试或与管理员联系。