LINUX中的MACH定义之MACHINE_START / MACHINE_END
田海立@CSDN
2011/08/18
本文讲解LINUX中用MACHINE_START/MACHINE_END定义的MACH,并给出定义的各个成员函数在初始化过程中被调用的时机。
1. 定义一个MACH
LINUX中MACHINE定义是用MACHINE_START()/MACHINE_END两个宏来实现的,比如MSM的实现(arch/arm/mach-msm/board-halibut.c):
2. MACHINE_START / MACHINE_END定义
上面的定义中,用到了这两个宏MACHINE_START/MACHINE_END,下面是它们具体的定义(在arch/arm/include/asm/mach/arch.h中):
struct machine_desc也是定义在arch/arm/include/asm/mach/arch.h
3. MACH HALIBUT的定义
把1中定义的MACH展开之后,得到:
总结一下:MACHINE_START主要是定义了"struct machine_desc"的类型,放在 section(".arch.info.init"),是初始化数据,Kernel 起来之后将被丢弃。
4. 成员函数被调用的时机
在setup_arch() [setup.c#758~760]中init_irq, timer & init_machine分别被赋值给下列变量:
init_arch_irq = mdesc->init_irq;
system_timer = mdesc->timer;
init_machine = mdesc->init_machine;
而这三个函数指针是在下列场景中被调用的:
1)start_kernel()[main.c#589]-> init_IRQ() [irq.c] ->init_arch_irq();
2)start_kernel()[main.c#595]->time_init () [time.c] ->system_time->init();
3)customize_machine()[setup.c#692] -> init_machine();
customize_machine是被放在arch_initcall段的,按照顺序被调用。xxx_initcall段内的函数是按下列顺序被调用的:start_kernel() [main.c#682] -> rest_init() [启动内核线程]-> kernel_init() –> do_basic_setup()-> do_initcalls();
map_io是在下列顺序中被调用
4)start_kernel()[main.c#546]-> setup_arch () [setup.c#745] -> paging_init() [mmu.c#1028] -> devicemaps_init()[mmu.c#993] -> map_io()
从它们在start_kernel()中被调用的顺序,可知它们执行的先后为:map_io; init_irq; timer->time_init; init_machine。
分享到:
相关推荐
mach3_OEM代码____功能
Mach2_6.11_Custom.zip Document
Mach3 中文使用文档。 关键词:数控机床,雕刻机,光雕机。
CNC machine Mach3 tuning
MACH3软件二次开发的一个实例程序,希望对喜欢MACH3二次开发的朋友有帮助。
Mach3 Setup Tutorial_MACH3_zip_源码
mach3 自动换刀
Mach3CNC Router software
rootroot@rootroot-E400:~/wyb/ap6212a0_a33_sc3817r/lichee/linux-3.4$ make ARCH=arm menuconfig [*] Networking support ---> <*> Bluetooth subsystem support ---> Bluetooth device drivers ---> < > ...
Mach2Mill_6.11.zip document
machine synchrone (essai).
Mach3 Setup Tutorial.zip
Modified linux arch arm mach-omap2 gpmc-smc91x for Linux v2.13.6.
cad cam planet cnc mach3
逆向 machO文件详细解析,对逆向开发 分析macho文件很有帮助
描述mach_override使您可以在运行时覆盖(“修补程序”)程序和系统提供的功能。 您可以用实现完全替换功能,或者仅在原始实现的开头或结尾打补丁即可添加功能和/或解决错误。一定要高个骑动态功能覆盖是一项棘手的...
#include <linux/gpio.h>//__gpio_set_value #include <mach/sys_config.h>//script_item_u #include <linux/pinctrl/consumer.h>//pin_config_set #include <linux/pinctrl/pinconf-sunxi.h>//SUNXI_PINCFG_TYPE_* ...
rootroot@rootroot-E400:~/wyb/ap6212a0_a33_sc3817r/lichee/linux-3.4$ make ARCH=arm menuconfig [*] Networking support ---> <*> Bluetooth subsystem support ---> Bluetooth device drivers ---> < > ...
Oh hai. This is the patched Atom kernel for the Samsung NP-NC10 use with 10.6.8. Obviously. ;p - Original Kernel 10.8.0;...2. mv /mach_kernel /mach_kernel_old 3. mv /path/to/your/kernel /
mach_10.9_rc7_fixed_fx.zip 10.9破解内核