标签:str mat linu device call() 定义 init form 通过
平台的device和driver注册函数分别为:platform_device_register/platform_driver_register
在内核源代码中,platform设备的初始化(注册)用arch_initcall()调用,他的initcall的level为3.
而驱动的注册用module_init()调用,即device_initcall(),他的initcall的level为6.
kernel初始化时(kernel_init@init/main.c), 按照内核链接文件中(arm系统:kernel/arch/arm/vmlinux.lds)的__initcall_start段的序列依次执行,这样level小的初始化函数先于level大的初始化函数被调用,所以platform设备先被注册,驱动加载时会调用驱动程序中probe(), 扫描系统中已注册的设备,找到匹配设备后将驱动和设备绑定。
下面介绍设备注册的两种方式:
mach-qt2410.c如何被选中?直接cp arch/arm/configs/s3c2410_deconfig .config, make menuconfig, 关于cpu的CONFIG_定义就完成了,相应的mach-qt2410.c也就被编译到内核中。
当然,当内核过度到3.0以后,出现了dts,模式就不像第一种方式了
//TODO:
标签:str mat linu device call() 定义 init form 通过
原文地址:http://www.cnblogs.com/aaronLinux/p/6161028.html