Hiện tại tôi đang phát triển mô đun hạt nhân GPIO cho Linux 2.6.32.2 thân thiện (mini2440). Tôi đến từ nền điện tử và mới cho Linux.Tác vụ định kỳ trong mô-đun hạt nhân Linux
Mô-đun hạt nhân được tải khi khởi động và tệp thiết bị có liên quan nằm ở /dev
là gpiofreq
.
Ở lần đầu tiên ghi vào tệp thiết bị, pin GPIO bật liên tục ở 50kHz. Ở lần thứ hai viết nó dừng toggling. Vào lần thứ ba, nó bắt đầu một lần nữa, và như vậy.
Tôi đã viết mô-đun hạt nhân riêng biệt để tạo freq. nhưng CPU bị đóng băng sau khi ghi tập tin thiết bị ở lần đầu tiên. Dấu nhắc thiết bị đầu cuối được hiển thị nhưng tôi không thể chạy bất kỳ lệnh nào sau đó.
Đây là mã-đoạn:
//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;
}
Dưới đây là thiết bị ghi mã, mà bắt đầu hoặc dừng lại ở bất kỳ dữ liệu ghi vào tập tin thiết bị.
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;
}
* Tại sao * bạn có muốn nhiệm vụ của mình chạy hoàn toàn * bên trong hạt nhân * không? Sự khôn ngoan chung là có quy trình trợ giúp cấp người dùng .... –
vì tôi muốn tối đa 100kHz. tôi đã thử một kịch bản shell cho phép tôi chuyển đổi tần số khoảng 750 Hz. và cũng là một chương trình c mang lại cho tôi tối đa 900 Hz. cả hai thực hiện thao tác ghi '1' và '0' trên tệp thiết bị "/ sys/class/gpio/gpio192/value". –
Tôi không nghĩ rằng bạn sẽ có thể đạt được một tần số cao như vậy mà không cần tốn nhiều tài nguyên. – shodanex