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.
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灯全亮。
第一次回答问题,测试代码考虑的不够全面。望见谅。
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界面,原则上你想做当然可以。