目前我正在为友好的 Linux 2.6.32.2 (mini2440) 开发 GPIO 内核模块。我来自电子背景,是 Linux 新手。
/dev
启动时加载的内核模块和相关的设备文件位于gpiofreq
.
第一次写入设备文件时,GPIO 引脚以 50kHz 连续切换。在第二次写它停止切换。第三次,它再次开始,依此类推。
我已经编写了单独的内核模块来生成频率。但第一次写入设备文件后 CPU 冻结。显示终端提示,但之后我无法运行任何命令。
这是代码片段:
//calling function which generates continuous freq at gpio
static int send_freq(void *arg)
{
set_current_state(TASK_INTERRUPTIBLE);
for(;;)
{
gpio_set_value(192,1);
udelay(10);
gpio_set_value(192,0);
udelay(10);
}
return 0;
}
这是设备写入代码,它以写入设备文件的任何数据开始或停止。
if(toggle==0)
{
printk("Starting Freq.\n");
task=kthread_run(&send_freq,(void *)freq,"START");
toggle=1;
}
else
{
printk("Operation Terminated.\n");
i = kthread_stop(task);
toggle=0;
}