В настоящее время я занимаюсь разработкой модуля ядра GPIO для friendlyarm Linux 2.6.32.2 (mini2440).Я из области электроники и новичок в Linux.
Модуль ядра, загруженный при запуске, и файл соответствующего устройства находится в /dev
как gpiofreq
.
При первой записик файлу устройства, вывод GPIO постоянно переключается на частоте 50 кГц.Во второй раз писать это перестать переключаться.В третий раз он запускается снова и т. Д.
Я написал отдельный модуль ядра для генерации freq.но процессор зависает после записи файла устройства в первый раз.Отображается подсказка терминала, но я не могу выполнить какую-либо команду после этого.
Вот фрагмент кода:
//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;
}