歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 基於i.MX51的Linux時鐘體系分析<1>

基於i.MX51的Linux時鐘體系分析<1>

日期:2017/2/28 15:56:52   编辑:Linux教程

以Freesclae的i.MX51為基礎進行分析。

先分析下面的代碼:


arch/arm/kernel/setup.c

extern struct sys_timer *system_timer;
672 void __init setup_arch(char **cmdline_p)
673 {
...
675 struct machine_desc *mdesc;
...
681 mdesc = setup_machine(machine_arch_type);
...
741 system_timer = mdesc->timer;
...
752 }

arch/arm/kernel/time.c

161 void __init time_init(void)
162 {
163 system_timer->init();
164 }

init/main.c

539 asmlinkage void __init start_kernel(void)
{
...
573 setup_arch(&command_line);
...
623 time_init();
...
}

arch/arm/mach-mx5/mx51_babbage.c

1367 static void __init mx51_babbage_timer_init(void)
1368 {
...
1378 mx51_clocks_init(32768, 24000000, 22579200, 24576000);
...
1382 }

1384 static struct sys_timer mxc_timer = {
1385 .init = mx51_babbage_timer_init,
1386 };

1470 MACHINE_START(MX51_BABBAGE, "Freescale MX51 Babbage Board")
..
1482 .timer = &mxc_timer,
1483 MACHINE_END
在arch/arm/mach-mx5/mx51_babbage.c中完成對結構體struct machine_desc *中timer成員的賦值。

在內核初始化的時候執行start_kernel(),該函數先調用setup_arch(),完成對system_timer的賦值。再後執行time_init(),最終執行mx51_babbage_timer_init()函數,完成對i.MX51的clocks的初始化。

Copyright © Linux教程網 All Rights Reserved