Aug 22 14:40:13 (none) syslog.info syslogd started: BusyBox v1.24.1
Aug 22 17:41:39 jimmy-deb6-2 kernel: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
Aug 22 17:41:39:
syslogd.c timestamp_and_log ,jiffies
[ 0.000000]:
這個時間是printk.c print_time函數印出的 , 而時間的取值, local_clock();
遇到jiffies不準,先查看現在是用哪種timer?
cat /sys/devices/system/clocksource/clocksource0/current_clocksource
有哪些timer是被支援的
cat /sys/devices/system/clocksource/clocksource0/available_clocksource
而 kvm-clock tsc hpet acpi_pm 這幾個是可選的
x86_init.c
x86_init_ops x86_init __initdata 有設定硬體的設定
在entry_64.S這個檔案裡可以看到
apicinterrupt LOCAL_TIMER_VECTOR \
apic_timer_interrupt smp_apic_timer_interrupt
做註冊interrput的動作. 而jiffies的增加是透過smp_apic_timer_interrupt(我有開smp)
在往上追apic.c 可以看到
__setup_APIC_LVTT
lapic_timer_setup
使用了LOCAL_TIMER_VECTOR
apic_write(APIC_LVTT, lvtt_value); 對reigster寫值. 參考了一下intel spec
http://www.intel.com/content/dam/doc/specification-update/64-architecture-x2apic-specification.pdf
APIC_LVTT 0x320
0320H 032H LVT Timer Register Read/Write
的確有對上.
在這個修改案例中也遇到了request_irq ,這個主要是使用kthread來處理觸發的動作
在kernel/irq/manage.c setup_irq_thread() 可以看到kthread_create
ibm 時鐘文章:
https://www.ibm.com/developerworks/cn/linux/l-cn-clocks/
https://www.ibm.com/developerworks/cn/linux/l-cn-timerm/
可以透過下面ftrace , do_timer開始追相關的函數
https://drive.google.com/file/d/0B8hm-I2M8BD7aXlua1hIa0pJOEU/view?usp=sharing
在cat /proc/timer_list 可以看到目前timer的設定部分
沒有留言:
張貼留言