贊助廠商

娛樂城推薦

首頁

電腦與網際網路/其他:電腦列表

LinuxDev- driver polling timer問題

各位版友好描述一下我的問題我在driver實作一個function 我想定時約1~2sec polling它每次都要根據偵測speed 自動做點燈的行為架構如下, 我想把這function放在probe, init時自動pollingstatic int mv88e6xxx_get_speed(struct mv88e6xxx_chip *chip){ /** Get_speed_status **/ mv88e6xxx_port_read(chip, port, MV88E6XXX_PORT_STS_CTL, &reg); /** 根據對應speed, 用mmio access做對應的gpio點燈行為 **/ switch (reg & MV88E6XXX_PORT_STS_SPEED_MASK) { case 10: ioread(); iowrite(); break; case 100: ioread(); iowrite(); break; case 1000: ioread(); iowrite(); break; . . .}我想用timer 來做這件事 如下/**************** Kernel_Timer *************/struct timer_list danny_timer;static int danny_do(void){ struct mv88e6xxx_chip *chip; mv88e6xxx_get_speed(chip); danny_timer.expires = jiffies + HZ; add_timer(&danny_timer);}static void danny_timer_init(void){ /* Timer 初始化 */ init_timer(&danny_timer); /* define timer 要執行之函式 */ danny_timer.function = danny_do; /* define timer 傳入函式之 Data */ danny_timer.data = ((unsigned long) 0); /* define timer Delay 1秒的時間 */ danny_timer.expires = jiffies + HZ; /* 啟動 Timer*/ add_timer(&danny_timer);}/*********************************************/開機時會kernel panic, 不知道是跟mmio有關嗎?如果單純printk(); 倒是很正常kernel timer能做到call function嗎?如果不行, 是要使用timer + wait_queue 機制這樣做嗎??謝謝--
  • 發問日期:2021-06-11 21:30:05

友站連結