[問題] driver polling timer問題

看板LinuxDev作者 (秘密)時間3年前 (2020/06/14 15:34), 編輯推噓1(102)
留言3則, 2人參與, 3年前最新討論串1/1
各位版友好 描述一下我的問題 我在driver實作一個function 我想定時約1~2sec polling它 每次都要根據偵測speed 自動做點燈的行為 架構如下, 我想把這function放在probe, init時自動polling static 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 機制這樣做嗎?? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.198.167.208 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/LinuxDev/M.1592120051.A.B25.html

06/14 17:24, 3年前 , 1F
既然都 kernel panic 了,stack trace 研究一下吧...
06/14 17:24, 1F

06/20 10:07, 3年前 , 2F
開完機再載入debug
06/20 10:07, 2F

09/09 09:55, 3年前 , 3F
dmesg?
09/09 09:55, 3F
文章代碼(AID): #1UvTBpib (LinuxDev)
文章代碼(AID): #1UvTBpib (LinuxDev)