linux内核初始化步骤(六)

do_initcalls()将按顺序从__initcall_start开始,到__initcall_end结束的section中以函数指针的形式取出这些编译到内核驱动模块中的初始化函数起始地址,来完成相应的初始化。

/*
 * Early initcalls run before initializing SMP.
 *
 * Only for built-in code, not modules.
 */
#define early_initcall(fn)		__define_initcall("early",fn,early)

/*
 * A "pure" initcall has no dependencies on anything else, and purely
 * initializes variables that couldn't be statically initialized.
 *
 * This only exists for built-in code, not for modules.
 */
#define pure_initcall(fn)		__define_initcall("0",fn,0)

#define core_initcall(fn)		__define_initcall("1",fn,1)
#define core_initcall_sync(fn)		__define_initcall("1s",fn,1s)
#define postcore_initcall(fn)		__define_initcall("2",fn,2)
#define postcore_initcall_sync(fn)	__define_initcall("2s",fn,2s)
#define arch_initcall(fn)		__define_initcall("3",fn,3)
#define arch_initcall_sync(fn)		__define_initcall("3s",fn,3s)
#define subsys_initcall(fn)		__define_initcall("4",fn,4)
#define subsys_initcall_sync(fn)	__define_initcall("4s",fn,4s)
#define fs_initcall(fn)			__define_initcall("5",fn,5)
#define fs_initcall_sync(fn)		__define_initcall("5s",fn,5s)
#define rootfs_initcall(fn)		__define_initcall("rootfs",fn,rootfs)
#define device_initcall(fn)		__define_initcall("6",fn,6)
#define device_initcall_sync(fn)	__define_initcall("6s",fn,6s)
#define late_initcall(fn)		__define_initcall("7",fn,7)
#define late_initcall_sync(fn)		__define_initcall("7s",fn,7s)

#define __initcall(fn) device_initcall(fn)

按照这个顺序,结合之前的整理,可以得到内核初始化调用函数的顺序如下(来源于system.map)

c0599ba4 t __initcall_init_static_idmapearly
c0599ba4 T __initcall_start
c0599ba4 T __setup_end
c0599ba8 t __initcall_spawn_ksoftirqdearly
c0599bac t __initcall_init_workqueuesearly
c0599bb0 T __early_initcall_end
c0599bb0 t __initcall_ipc_ns_init0
Shm.c (ipc):pure_initcall(ipc_ns_init); 
//与IPC进程间通信共享内存相关的初始化
c0599bb4 t __initcall_init_mmap_min_addr0
Min_addr.c (security):pure_initcall(init_mmap_min_addr);
//用来指定一个进程允许映射的最小虚拟地址空间的大小
c0599bb8 t __initcall_init_atomic64_lock0
Atomic64.c (lib):pure_initcall(init_atomic64_lock);
/* Generic implementation of 64-bit atomics using spinlocks,
**useful on processors that don't have 64-bit atomic instructions.
64位原子使用自旋锁的实现方式,在没有64位原子指令的处理器上有用
c0599bbc t __initcall_davinci_gpio_setup0
pure_initcall(davinci_gpio_setup):/ Gpio-davinci.c (drivers\gpio)
//GPIO驱动和GPIO中断的初始化	
c0599bc0 t __initcall_init_cpufreq_transition_notifier_list0
Cpufreq.c (drivers\cpufreq):pure_initcall(init_cpufreq_transition_notifier_list)
/*the "transition" list for kernel code that needs to handle
**changes to devices when the CPU clock speed changes.
*/它是用来解决CPU时钟改变而引起的设备变动的问题
->
 srcu_init_notifier_head
->
init_srcu_struct
/*init_srcu_struct - initialize a sleep-RCU structure
** Sleepable Read-Copy Update mechanism for mutual exclusion
**
*/
RCU就是指读-拷贝修改,它是基于其原理命名的。对于被RCU保护的共享数据结构,读操作不需要获得任何锁就可以访问,但写操作在访问它时首先拷贝一个副本,然后对副本进行修改,最后在适当的时机把指向原来数据的指针重新指向新的被修改的数据。这个时机就是所有引用该数据的CPU都退出对共享数据的操作。
Linux内核中内存管理大量的运用到了RCU机制。为每个内存对象增加了一个原子计数器用来继续该对象当前访问数。当没有其他进程在访问该对象时(计数器为0),才允许回收该内存。
从这个流程可以看出,RCU类似于一种读写锁的优化,用于解决读和写之间的同步问题。比较适合读多,写少的情况,当写操作过多的时候,这里的拷贝和修改的成本同样也很大。(写操作和写操作之间的同步还需要其它机制来保证)。
版权声明:本文为博主原创文章,转载请附上博文链接!
c0599bc4 t __initcall_net_ns_init0
Net_namespace.c (net\core):pure_initcall(net_ns_init);
/* setup the initial network namespace
**建立初始化的网络名字空间
*/
c0599bc8 t __initcall_ptrace_break_init1
Ptrace.c (arch\arm\kernel):core_initcall(ptrace_break_init);
/*
-> 
register_undef_hook(&arm_break_hook);
	register_undef_hook(&thumb_break_hook);
	register_undef_hook(&thumb2_break_hook);
->register_undef_hook函数向全局undef_hook链表注册了一个未定义指令异常处理的钩子,相关的结构体如下:
static struct undef_hook arm_break_hook = {
	.instr_mask	= 0x0fffffff,
	.instr_val	= 0x07f001f0,
	.cpsr_mask	= PSR_T_BIT,
	.cpsr_val	= 0,
	.fn		= break_trap,
};

c0599bcc t __initcall_consistent_init1
Dma-mapping.c (arch\arm\mm):core_initcall(consistent_init);
//Initialise the consistent memory allocation
c0599bd0 t __initcall_sram_init1
Sram.c (arch\arm\mach-davinci):core_initcall(sram_init);
/*support some other notable uses of SRAM:  as TCM
 * for data and/or instructions; and holding code needed to enter
 * and exit suspend states (while DRAM can't be used).
*/支持SRAM的其他值得关注的功能:比如TCM---紧耦合内存(TCM: Tightly Coupled Memories)用于数据和指令,保持需要进入和离开休眠状态的代码
->
gen_pool_create(ilog2(SRAM_GRANULARITY), -1);
/*Create a new special memory pool that can be used to manage special **purpose memory not managed by the regular kmalloc/kfree interface.
*/建立一块特殊的内存池,它被用来管理特殊目的的内存而不能再被kmaclloc/kfree函数接口调用
gen_pool_add_virt
/*Add a new chunk of special memory to the specified pool.*/
在指定的内存池里面增加一块新的特殊内存
c0599bd4 t __initcall_sysctl_init1
Sysctl.c (kernel):core_initcall(sysctl_init);
c0599bd8 t __initcall_ksysfs_init1
Ksysfs.c (kernel):core_initcall(ksysfs_init);
/* sysfs attributes in /sys/kernel, which are not related to any other subsystem*/
->
kobject_create_and_add("kernel", NULL);
sysfs_create_group(kernel_kobj, &kernel_attr_group);
sysfs_create_bin_file(kernel_kobj, &notes_attr);

c0599bdc t __initcall_pm_init1
Main.c (kernel\power):core_initcall(pm_init);
/* PM subsystem core functionality*/
电源子模块的初始化
power_kobj = kobject_create_and_add("power", NULL);
c0599be0 t __initcall_init_jiffies_clocksource1
Jiffies.c (kernel\time):core_initcall(init_jiffies_clocksource);
->
clocksource_register(&clocksource_jiffies);
/* Used to install new clocksources*/
c0599be4 t __initcall_cpu_pm_init1
Cpu_pm.c (kernel):core_initcall(cpu_pm_init);
/* power domain are entering a low power
** state
*/
c0599be8 t __initcall_init_zero_pfn1
Memory.c (mm):core_initcall(init_zero_pfn);
/*
 * CONFIG_MMU architectures set up ZERO_PAGE in their paging_init()
 */
c0599bec t __initcall_fsnotify_init1
Fsnotify.c (fs\notify):core_initcall(fsnotify_init);
->
init_srcu_struct(&fsnotify_mark_srcu);
/*fsnotify inode mark locking/lifetime/and refcnting
* REFCNT:
 * The mark->refcnt tells how many "things" in the kernel currently are
 * referencing this object.
* LOCKING:
 * There are 3 spinlocks involved with fsnotify inode marks
* LIFETIME:
 * Inode marks survive between when they are added to an inode and when their refcnt==0.
*/
c0599bf0 t __initcall_filelock_init1
Locks.c (fs):core_initcall(filelock_init);
->
kmem_cache_create("file_lock_cache",sizeof(struct file_lock), 0, SLAB_PANIC, NULL);
/*从一个给定的缓存分配对象*/
c0599bf4 t __initcall_init_script_binfmt1
Binfmt_script.c (fs):core_initcall(init_script_binfmt);
->
register_binfmt(&script_format);
/* Registration of default binfmt handlers */
c0599bf8 t __initcall_init_elf_binfmt1
Binfmt_elf.c (fs):core_initcall(init_elf_binfmt);
->
register_binfmt(&elf_format);
c0599bfc t __initcall_debugfs_init1
Inode.c (fs\debugfs):core_initcall(debugfs_init);
->
debug_kobj = kobject_create_and_add("debug", kernel_kobj);
/* kobject_create_and_add - create a struct kobject dynamically and register it with sysfs*/
c0599c00 t __initcall_random32_init1
Random32.c (lib):core_initcall(random32_init);
/*
 *	Generate some initially weak seeding values to allow
 *	to start the random32() engine.
 */
c0599c04 t __initcall_regulator_init1
Core.c (drivers\regulator):core_initcall(regulator_init);
/*
Voltage/Current Regulator framework.
*/
c0599c08 t __initcall_cpufreq_core_init1
Cpufreq.c (drivers\cpufreq):core_initcall(cpufreq_core_init);
->
cpufreq_global_kobject=kobject_create_and_add("cpufreq", &cpu_subsys.dev_root->kobj);

c0599c0c t __initcall_cpuidle_init1
Cpuidle.c (drivers\cpuidle):core_initcall(cpuidle_init);
/**
 * cpuidle_init - core initializer
 */
->
/**
 * cpuidle_add_interface - add CPU global sysfs attributes
 */
int cpuidle_add_interface

c0599c10 t __initcall_sock_init1
Socket.c (net):core_initcall(sock_init);	/* early initcall */
/*
	 *      Initialize sock SLAB cache.
	 */

	sk_init();
	/*
	 *      Initialize skbuff SLAB cache
	 */
	skb_init();

	/*
	 *      Initialize the protocols module.
	 */
	init_inodecache();
	/* The real protocol initialization is performed in later initcalls.
	 */
c0599c14 t __initcall_netpoll_init1
Netpoll.c (net\core):core_initcall(netpoll_init);
/* Common framework for low-level network console, dump, and debugger * code
*/
c0599c18 t __initcall_netlink_proto_init1
Af_netlink.c (net\netlink):core_initcall(netlink_proto_init);
/* The netlink device handler may be needed early. */
c0599c1c t __initcall_bdi_class_init2
Backing-dev.c (mm):postcore_initcall(bdi_class_init);

c0599c20 t __initcall_kobject_uevent_init2
Kobject_uevent.c (lib):postcore_initcall(kobject_uevent_init);
/* kernel userspace event delivery
*/
c0599c24 t __initcall_gpiolib_sysfs_init2
Gpiolib.c (drivers\gpio):postcore_initcall(gpiolib_sysfs_init);
->
/* /sys/kernel/debug/gpio */
	(void) debugfs_create_file("gpio", S_IFREG | S_IRUGO,
				NULL, NULL, &gpiolib_operations);

c0599c28 t __initcall_pwm_init2
Pwm.c (drivers\pwm):postcore_initcall(pwm_init);
/*
PWM API implementation
*/

c0599c2c t __initcall_backlight_class_init2
Backlight.c (drivers\video\backlight):postcore_initcall(backlight_class_init);
/*
Backlight Lowlevel Control Abstraction
*/
c0599c30 t __initcall_tty_class_init2
Tty_io.c (drivers\tty):postcore_initcall(tty_class_init);
/*
*tty_io.c' gives an orthogonal feeling to tty's, be they consoles
 * or rs-channels. It also implements echoing, cooked mode etc.
*/
c0599c34 t __initcall_vtconsole_class_init2
Vt.c (drivers\tty\vt):postcore_initcall(vtconsole_class_init);
/* Add system drivers to sysfs */
c0599c38 t __initcall_wakeup_sources_debugfs_init2
Wakeup.c (drivers\base\power):postcore_initcall(wakeup_sources_debugfs_init);
/*
*System wakeup events framework
*/
c0599c3c t __initcall_regmap_initcall2
Regmap.c (drivers\base\regmap):postcore_initcall(regmap_initcall);
/*Register map access API*/
c0599c40 t __initcall_spi_init2
Spi.c (drivers\spi):postcore_initcall(spi_init);
/* board_info is normally registered in arch_initcall(),
 * but even essential drivers wait till later
 *
 * REVISIT only boardinfo really needs static linking. the rest (device and
 * driver registration) _could_ be dynamically linked (modular) ... costs
 * include needing to have boardinfo data structures be much more public.
 */
c0599c44 t __initcall_i2c_init2
I2c-core.c (drivers\i2c):postcore_initcall(i2c_init);
/*a device driver for the iic-bus interface*/
/* We must initialize early, because some subsystems register i2c drivers
 * in subsys_initcall() code, but are linked (and initialized) before i2c.
 */
c0599c48 t __initcall_customize_machine3
Setup.c (arch\arm\kernel):arch_initcall(customize_machine);
/* customizes platform devices, or adds new ones */

c0599c4c t __initcall_exceptions_init3
Fault.c (arch\arm\mm):arch_initcall(exceptions_init);
c0599c50 t __initcall_edma_init3
Dma.c (arch\arm\mach-davinci):arch_initcall(edma_init);
/*EDMA3 support for DaVinci*/
platform_driver_probe(&edma_driver, edma_probe);
c0599c54 t __initcall_topology_init4
Setup.c (arch\arm\kernel):subsys_initcall(topology_init);
c0599c58 t __initcall_param_sysfs_init4
Params.c (kernel):subsys_initcall(param_sysfs_init);
/*
 * param_sysfs_init - wrapper for built-in params support
 */
c0599c5c t __initcall_default_bdi_init4
Backing-dev.c (mm):subsys_initcall(default_bdi_init);
->
sync_supers_tsk = kthread_run(bdi_sync_supers, NULL, "sync_supers");
c0599c60 t __initcall_init_bio4
Bio.c (fs):subsys_initcall(init_bio);
c0599c64 t __initcall_fsnotify_notification_init4
Notification.c (fs\notify):subsys_initcall(fsnotify_notification_init);
c0599c68 t __initcall_cryptomgr_init4
Algboss.c (crypto):subsys_initcall(cryptomgr_init);
/* Create default crypto algorithm instances*/

c0599c6c t __initcall_blk_settings_init4
Blk-settings.c (block):subsys_initcall(blk_settings_init);
/*Functions related to setting various queue properties from drivers*/
c0599c70 t __initcall_blk_ioc_init4
Blk-ioc.c (block):subsys_initcall(blk_ioc_init);
/*
 * Functions related to io context handling
 */
c0599c74 t __initcall_blk_softirq_init4
Blk-softirq.c (block):subsys_initcall(blk_softirq_init);
/*
 * Functions related to softirq rq completions
 */
c0599c78 t __initcall_blk_iopoll_setup4
Blk-iopoll.c (block):subsys_initcall(blk_iopoll_setup);
/*
 * Functions related to interrupt-poll handling in the block layer. This
 * is similar to NAPI for network devices.
 */
c0599c7c t __initcall_genhd_device_init4
Genhd.c (block):subsys_initcall(genhd_device_init);
/*
 *  gendisk handling
 */
c0599c80 t __initcall_gpiolib_debugfs_init4
Gpiolib.c (drivers\gpio):subsys_initcall(gpiolib_debugfs_init);
/* /sys/kernel/debug/gpio */
	(void) debugfs_create_file("gpio", S_IFREG | S_IRUGO,
				NULL, NULL, &gpiolib_operations);
c0599c84 t __initcall_fbmem_init4
Fbmem.c (drivers\video):subsys_initcall(fbmem_init);
/*
 *  Frame buffer device initialization and setup routines
 */
c0599c88 t __initcall_misc_init4
Misc.c (drivers\char):subsys_initcall(misc_init);
/*miscellaneous device*/
c0599c8c t __initcall_init_scsi4
Scsi.c (drivers\scsi):subsys_initcall(init_scsi);
/*scsi_device_type*/
c0599c90 t __initcall_ata_init4
Libata-core.c (drivers\ata):subsys_initcall(ata_init);
/*ata_dev*/
c0599c94 t __initcall_phy_init4
Phy_device.c (drivers\net\phy):subsys_initcall(phy_init);
/* Framework for finding and configuring PHYs.
 * Also contains generic PHY driver
*/
c0599c98 t __initcall_usb_init4
Usb.c (drivers\usb\core):subsys_initcall(usb_init);
/* NOTE! This is not actually a driver at all, rather this is
 * just a collection of helper routines that implement the
 * generic USB things that the real drivers can use..
 *
 * Think of this as a "USB library" rather than anything else.
 * It should be considered a slave, with no callbacks. Callbacks
 * are evil.
*/
c0599c9c t __initcall_nop_usb_xceiv_init4
Nop-usb-xceiv.c (drivers\usb\otg):subsys_initcall(nop_usb_xceiv_init);
/*This provides a "nop" transceiver for PHYs which are
 *	autonomous such as isp1504, isp1707, etc.
*/
c0599ca0 t __initcall_da8xx_init4
Da8xx.c (drivers\usb\musb):subsys_initcall(da8xx_init);
->
platform_driver_probe(&da8xx_driver, da8xx_probe);
c0599ca4 t __initcall_usb_udc_init4
Udc-core.c (drivers\usb\gadget):subsys_initcall(usb_udc_init);
/* struct usb_udc - describes one usb device controller*/
c0599ca8 t __initcall_serio_init4
Serio.c (drivers\input\serio):subsys_initcall(serio_init);
/*
 * serio_mutex protects entire serio subsystem and is taken every time
 * serio port or driver registered or unregistered.
 */

c0599cac t __initcall_input_init4
Input.c (drivers\input):subsys_initcall(input_init);
-> 
class_register(&input_class);
c0599cb0 t __initcall_rtc_init4
Class.c (drivers\rtc):subsys_initcall(rtc_init);
/* RTC subsystem, base class*/
c0599cb4 t __initcall_davinci_i2c_init_driver4
I2c-davinci.c (drivers\i2c\busses):subsys_initcall(davinci_i2c_init_driver);
/* I2C may be needed to bring up other drivers */
c0599cb8 t __initcall_i2c_gpio_init4
I2c-gpio.c (drivers\i2c\busses):subsys_initcall(i2c_gpio_init);
/*Bitbanging I2C bus driver using the GPIO API*/
c0599cbc t __initcall_vpif_init4
Vpif.c (drivers\media\video\davinci):subsys_initcall(vpif_init);
/* vpif - Video Port Interface driver*/
c0599cc0 t __initcall_mmc_init4
Core.c (drivers\mmc\core):subsys_initcall(mmc_init);
->
workqueue = alloc_ordered_workqueue("kmmcd", 0);
c0599cc4 t __initcall_leds_init4
Leds.c (arch\arm\kernel):device_initcall(leds_init);
/* LED support code, ripped out of arch/arm/kernel/time.c*/
ret = subsys_system_register(&leds_subsys, NULL);
c0599cc8 t __initcall_iio_init4
Industrialio-core.c (drivers\staging\iio):subsys_initcall(iio_init);
/*The industrial I/O core
 */
c0599ccc t __initcall_init_soundcore4
Sound_core.c (sound):subsys_initcall(init_soundcore);
/*
 *	Sound core.  This file is composed of two parts.  sound_class
 *	which is common to both OSS and ALSA and OSS sound core which
 *	is used OSS or emulation of it.
 */
c0599cd0 t __initcall_alsa_sound_init4
Sound.c (sound\core):subsys_initcall(alsa_sound_init);
c0599cd4 t __initcall_proto_init4
Sock.c (net\core):subsys_initcall(proto_init);
->
register_pernet_subsys(&proto_net_ops);
/* register_pernet_subsys - register a network namespace subsystem*/
c0599cd8 t __initcall_net_dev_init4
Dev.c (net\core):subsys_initcall(net_dev_init);
/*NET3	Protocol independent device support routines.*/
->
net_dev_init
/*
 *       This is called single threaded during boot, so no need
 *       to take the rtnl semaphore.
 */
c0599cdc t __initcall_neigh_init4
Neighbour.c (net\core):subsys_initcall(neigh_init);
/*	Generic address resolution entity*/
c0599ce0 t __initcall_genl_init4
Genetlink.c (net\netlink):subsys_initcall(genl_init);
/* Generic Netlink Family*/
c0599ce4 t __initcall_cfg80211_init4
Core.c (net\wireless):subsys_initcall(cfg80211_init);
c0599ce8 t __initcall_wireless_nlevent_init4
Wext-core.c (net\wireless):subsys_initcall(wireless_nlevent_init);
/* This file implement the Wireless Extensions core API.*/
c0599cec t __initcall_sysctl_init4
Sysctl.c (kernel):core_initcall(sysctl_init);
->
sysctl_set_parent(NULL, root_table);
c0599cf0 t __initcall_proc_cpu_init5
Setup.c (arch\arm\kernel):fs_initcall(proc_cpu_init);
->
res = proc_mkdir("cpu", NULL);
c0599cf4 t __initcall_dma_debug_do_init5
Dma-mapping.c (arch\arm\mm):fs_initcall(dma_debug_do_init);
c0599cf8 t __initcall_alignment_init5
Alignment.c (arch\arm\mm):fs_initcall(alignment_init);
/*
 * This needs to be done after sysctl_init, otherwise sys/ will be
 * overwritten.  Actually, this shouldn't be in sys/ at all since
 * it isn't a sysctl, and it doesn't contain sysctl information.
 * We now locate it in /proc/cpu/alignment instead.
 */
c0599cfc t __initcall_clocksource_done_booting5
Clocksource.c (kernel\time):fs_initcall(clocksource_done_booting);

/*
 * clocksource_done_booting - Called near the end of core bootup
 *
 * Hack to avoid lots of clocksource churn at boot time.
 * We use fs_initcall because we want this to start before
 * device_initcall but after subsys_initcall.
 */
c0599d00 t __initcall_init_pipe_fs5
Pipe.c (fs):fs_initcall(init_pipe_fs);
->
register_filesystem(&pipe_fs_type);
c0599d04 t __initcall_eventpoll_init5
Eventpoll.c (fs):fs_initcall(eventpoll_init);
/*  fs/eventpoll.c (Efficient event retrieval implementation)*/
c0599d08 t __initcall_anon_inode_init5
Anon_inodes.c (fs):fs_initcall(anon_inode_init);
->
register_filesystem(&anon_inode_fs_type)
c0599d0c t __initcall_blk_scsi_ioctl_init5
Scsi_ioctl.c (block):fs_initcall(blk_scsi_ioctl_init);
->
blk_set_cmd_filter_defaults(&blk_default_cmd_filter);
/* Basic read-only commands */
/* Audio CD commands */
/* CD/DVD data reading */
/* Basic writing commands */
c0599d10 t __initcall_chr_dev_init5
Mem.c (drivers\char):fs_initcall(chr_dev_init);
->
register_chrdev(MEM_MAJOR, "mem", &memory_fops)
c0599d14 t __initcall_firmware_class_init5
Firmware_class.c (drivers\base):fs_initcall(firmware_class_init);
->
Multi purpose firmware loading support
c0599d18 t __initcall_musb_init5
Musb_core.c (drivers\usb\musb):fs_initcall(musb_init);
/*MUSB OTG driver core code*/
c0599d1c t __initcall_cpufreq_gov_performance_init5
Cpufreq_performance.c (drivers\cpufreq):fs_initcall(cpufreq_gov_performance_init);

c0599d20 t __initcall_cpufreq_gov_userspace_init5
Cpufreq_userspace.c (drivers\cpufreq):fs_initcall(cpufreq_gov_userspace_init);
c0599d24 t __initcall_sysctl_core_init5
Sysctl_net_core.c (net\core):fs_initcall(sysctl_core_init);
/*sysctl interface to net core subsystem*/
c0599d28 t __initcall_inet_init5
Af_inet.c (net\ipv4):fs_initcall(inet_init);
/*INET		An implementation of the TCP/IP protocol suite for the LINUX
 *		operating system.  INET is implemented using the  BSD Socket
 *		interface as the means of communication with the user level.
 */
c0599d2c t __initcall_af_unix_init5
Af_unix.c (net\unix):fs_initcall(af_unix_init);
/* NET4:	Implementation of BSD Unix domain sockets*/
c0599d30 t __initcall_init_sunrpc5
Sunrpc_syms.c (net\sunrpc):fs_initcall(init_sunrpc);
/* Ensure we're initialised before nfs */
c0599d34 t __initcall_populate_rootfsrootfs
Initramfs.c (init):rootfs_initcall(populate_rootfs);
/*Trying to unpack rootfs image as initramfs*/
c0599d38 t __initcall_timer_init_syscore_ops6
Time.c (arch\arm\kernel):device_initcall(timer_init_syscore_ops);
/*system_timer = machine_desc->timer;
*system_timer->init();
*/
c0599d3c t __initcall_leds_init6
Leds.c (arch\arm\kernel):device_initcall(leds_init);
/*LED support code, ripped out of arch/arm/kernel/time.c*/
c0599d40 t __initcall_davinci_clk_debugfs_init6
Clock.c (arch\arm\mach-davinci):device_initcall(davinci_clk_debugfs_init);
->
/*Clock and PLL control for DaVinci devices*/
debugfs_create_file("davinci_clocks", S_IFREG | S_IRUGO, NULL, NULL,
						&davinci_ck_operations)
c0599d44 t __initcall_da850_evm_smsc911x_init6
Board-da850-evm.c (arch\arm\mach-davinci):device_initcall(da850_evm_smsc911x_init);
/* Initialize smsc911x device connected to the EMIFA. */
c0599d48 t __initcall_da850_evm_config_emac6
Board-da850-sdi.c (arch\arm\mach-davinci):device_initcall(da850_evm_config_emac);
/*网络设备的初始化*/
c0599d4c t __initcall_da850_evm_config_emac6
Board-da850-sdi.c (arch\arm\mach-davinci):device_initcall(da850_evm_config_emac);
Board-da850-evm.c (arch\arm\mach-davinci):device_initcall(da850_evm_config_emac);
/*在两个文件中进行不同的初始化*/
c0599d50 t __initcall_davinci_cpuidle_init6
Cpuidle.c (arch\arm\mach-davinci):device_initcall(davinci_cpuidle_init);
/* CPU idle for DaVinci SoCs*/
->
platform_driver_probe(&davinci_cpuidle_driver,
						davinci_cpuidle_probe);
->
davinci_cpuidle_probe
/* Wait for interrupt state */
/* Wait for interrupt and DDR self refresh state */
c0599d54 t __initcall_proc_execdomains_init6
Exec_domain.c (kernel):module_init(proc_execdomains_init);
/*
 * Handling of different ABIs (personalities).
 *
 * We group personalities into execution domains which have their
 * own handlers for kernel entry points, signal mapping, etc...
 */ 
c0599d58 t __initcall_ioresources_init6
Resource.c (kernel):__initcall(ioresources_init);
/*文件操作函数*/
c0599d5c t __initcall_uid_cache_init6
User.c (kernel):module_init(uid_cache_init);
/*
 * The "user cache".
 * We have a per-user structure to keep track of how many
 * processes, files etc the user has claimed, in order to be
 * able to have per-user limits for system resources. 
 */
c0599d60 t __initcall_init_posix_timers6
Posix-timers.c (kernel):__initcall(init_posix_timers);
/*
 * Initialize everything, well, just everything in Posix clocks/timers ;)
 */
c0599d64 t __initcall_init_posix_cpu_timers6
Posix-cpu-timers.c (kernel):__initcall(init_posix_cpu_timers);
/*
 * Implement CPU time clocks for the POSIX clock interface.
 */
c0599d68 t __initcall_init_sched_debug_procfs6
Debug.c (kernel\sched):__initcall(init_sched_debug_procfs);
->
proc_create("sched_debug", 0444, NULL, &sched_debug_fops);
c0599d6c t __initcall_timekeeping_init_ops6
Timekeeping.c (kernel\time):device_initcall(timekeeping_init_ops);
/*
 *  linux/kernel/time/timekeeping.c
 *  Kernel timekeeping code and accessor functions
 *  This code was moved from linux/kernel/timer.c.
 */
c0599d70 t __initcall_init_clocksource_sysfs6
Clocksource.c (kernel\time):device_initcall(init_clocksource_sysfs);
->
subsys_system_register(&clocksource_subsys, NULL);
c0599d74 t __initcall_init_timer_list_procfs6
Timer_list.c (kernel\time):__initcall(init_timer_list_procfs);
->
proc_create("timer_list", 0444, NULL, &timer_list_fops);
c0599d78 t __initcall_alarmtimer_init6
Alarmtimer.c (kernel\time):device_initcall(alarmtimer_init);
/**
 * alarmtimer_init - Initialize alarm timer code
 *
 * This function initializes the alarm bases and registers
 * the posix clock ids.
 */
c0599d7c t __initcall_futex_init6
Futex.c (kernel):__initcall(futex_init);
/*Fast Userspace Mutexes*/
/*
	 * This will fail and we want it. Some arch implementations do
	 * runtime detection of the futex_atomic_cmpxchg_inatomic()
	 * functionality. We want to know that before we call in any
	 * of the complex code paths. Also we want to prevent
	 * registration of robust lists in that case. NULL is
	 * guaranteed to fault and we get -EFAULT on functional
	 * implementation, the non-functional ones will return
	 * -ENOSYS.
	 */
->
cmpxchg_futex_value_locked(&curval, NULL, 0, 0)
c0599d80 t __initcall_proc_modules_init6
Module.c (kernel):module_init(proc_modules_init);
->
proc_create("modules", 0, NULL, &proc_modules_operations);
c0599d84 t __initcall_kallsyms_init6
Kallsyms.c (kernel):device_initcall(kallsyms_init);
/*kallsyms.c: in-kernel printing of symbolic oopses and stack traces.
*/
c0599d88 t __initcall_ikconfig_init6
Configs.c (kernel):module_init(ikconfig_init);
/* create the current config file */
	entry = proc_create("config.gz", S_IFREG | S_IRUGO, NULL,
			    &ikconfig_file_ops);
/*Echo the kernel .config file used to build the kernel*/
c0599d8c t __initcall_irq_gc_init_ops6
Generic-chip.c (kernel\irq):device_initcall(irq_gc_init_ops);
->
register_syscore_ops(&irq_gc_syscore_ops);
/**
 * register_syscore_ops - Register a set of system core operations.
 * @ops: System core operations to register.
 */
c0599d90 t __initcall_irq_pm_init_ops6
Pm.c (kernel\irq):device_initcall(irq_pm_init_ops);
/* This file contains power management functions related to interrupts.
 */
c0599d94 t __initcall_utsname_sysctl_init6
Utsname_sysctl.c (kernel):__initcall(utsname_sysctl_init);
->
register_sysctl_table(uts_root_table);
c0599d98 t __initcall_init_per_zone_wmark_min6
Page_alloc.c (mm):module_init(init_per_zone_wmark_min)
/*
 *  linux/mm/page_alloc.c
 *
 *  Manages the free list, the system allocates free pages here.
 *  Note that kmalloc() lives in slab.c
*/
/*
 * Initialise min_free_kbytes.
 *
 * For small machines we want it small (128k min).  For large machines
 * we want it large (64MB max).  But it is not linear, because network
 * bandwidth does not increase linearly with machine size.  We use
 *
 * 	min_free_kbytes = 4 * sqrt(lowmem_kbytes), for better accuracy:
 *	min_free_kbytes = sqrt(lowmem_kbytes * 16)
 *
 * which yields
 *
 * 16MB:	512k
 * 32MB:	724k
 * 64MB:	1024k
 * 128MB:	1448k
 * 256MB:	2048k
 * 512MB:	2896k
 * 1024MB:	4096k
 * 2048MB:	5792k
 * 4096MB:	8192k
 * 8192MB:	11584k
 * 16384MB:	16384k
 */
c0599d9c t __initcall_kswapd_init6
Vmscan.c (mm):module_init(kswapd_init)
/*Removed kswapd_ctl limits, and swap out as many pages as needed
 * to bring the system back to freepages.high
*/
c0599da0 t __initcall_setup_vmstat6
Vmstat.c (mm):module_init(setup_vmstat)
proc_create("buddyinfo", S_IRUGO, NULL, &fragmentation_file_operations);
	proc_create("pagetypeinfo", S_IRUGO, NULL, &pagetypeinfo_file_ops);
	proc_create("vmstat", S_IRUGO, NULL, &proc_vmstat_file_operations);
proc_create("zoneinfo", S_IRUGO, NULL, &proc_zoneinfo_file_operations);
c0599da4 t __initcall_mm_sysfs_init6
Mm_init.c (mm):__initcall(mm_sysfs_init);
/*
 * mm_init.c - Memory initialisation verification and debugging
*/
mm_kobj = kobject_create_and_add("mm", kernel_kobj);
c0599da8 t __initcall_proc_vmalloc_init6
Vmalloc.c (mm):module_init(proc_vmalloc_init);
->
proc_create("vmallocinfo", S_IRUSR, NULL, &proc_vmalloc_operations);
/*** Page table manipulation functions ***/
c0599dac t __initcall_memblock_init_debugfs6
Memblock.c (mm):__initcall(memblock_init_debugfs);
->
struct dentry *root = debugfs_create_dir("memblock", NULL);
/*
 * Procedures for maintaining information about logical memory blocks.
*/
c0599db0 t __initcall_procswaps_init6
Swapfile.c (mm):__initcall(procswaps_init);
->
proc_create("swaps", 0, NULL, &proc_swaps_operations);
c0599db4 t __initcall_slab_proc_init6
Slab.c (mm):module_init(slab_proc_init);
->
proc_create("slabinfo",S_IWUSR|S_IRUSR,NULL,&proc_slabinfo_operations);
Slub.c (mm):module_init(slab_proc_init);
->
proc_create("slabinfo", S_IRUSR, NULL, &proc_slabinfo_operations);
c0599db8 t __initcall_slab_sysfs_init6
Slub.c (mm):__initcall(slab_sysfs_init);
->
slab_kset = kset_create_and_add("slab", &slab_uevent_ops, kernel_kobj);
c0599dbc t __initcall_fcntl_init6
Fcntl.c (fs):module_init(fcntl_init)
/*
	 * Please add new bits here to ensure allocation uniqueness.
	 * Exceptions: O_NONBLOCK is a two bit define on parisc; O_NDELAY
	 * is defined as O_NONBLOCK on some platforms and not on others.
	 */
c0599dc0 t __initcall_proc_filesystems_init6
Filesystems.c (fs):module_init(proc_filesystems_init);
->
proc_create("filesystems", 0, NULL, &filesystems_proc_fops);
/*
 * Handling of filesystem drivers list.
 * Rules:
 *	Inclusion to/removals from/scanning of list are protected by spinlock.
 *	During the unload module must call unregister_filesystem().
 *	We can access the fields of list element if:
 *		1) spinlock is held or
 *		2) we hold the reference to the module.
 *	The latter can be guaranteed by call of try_module_get(); if it
 *	returned 0 we must skip the element, otherwise we got the reference.
 *	Once the reference is obtained we can drop the spinlock.
 */
c0599dc4 t __initcall_dio_init6
Dio.c (drivers\dio):subsys_initcall(dio_init);
/*Code to support devices on the DIO and DIO-II bus*/
Direct-io.c (fs):module_init(dio_init)
->
KMEM_CACHE(dio, SLAB_PANIC);
c0599dc8 t __initcall_fsnotify_mark_init6
Mark.c (fs\notify):device_initcall(fsnotify_mark_init);
/*kthread_run(fsnotify_mark_destroy, NULL, "fsnotify_mark");*/
c0599dcc t __initcall_dnotify_init6
Dnotify.c (fs\notify\dnotify):module_init(dnotify_init)
->
fsnotify_alloc_group(&dnotify_fsnotify_ops);
c0599dd0 t __initcall_inotify_user_setup6
Inotify_user.c (fs\notify\inotify):module_init(inotify_user_setup);
/*inotify support for userspace*/
c0599dd4 t __initcall_aio_setup6
Aio.c (fs):__initcall(aio_setup);
/* aio_setup
 *	Creates the slab caches used by the aio routines, panic on
 *	failure as this is done early during the boot sequence.
 */
c0599dd8 t __initcall_proc_locks_init6
Locks.c (fs):module_init(proc_locks_init);
->
proc_create("locks", 0, NULL, &proc_locks_operations);
c0599ddc t __initcall_init_mbcache6
Mbcache.c (fs):module_init(init_mbcache)

/*
 * Filesystem Meta Information Block Cache (mbcache)
 *
 * The mbcache caches blocks of block devices that need to be located
 * by their device/block number, as well as by other criteria (such
 * as the block's contents).
 *
 * There can only be one cache entry in a cache per device and block number.
 * Additional indexes need not be unique in this sense. The number of
 * additional indexes (=other criteria) can be hardwired at compile time
 * or specified at cache create time.
 *
 * Each cache entry is of fixed size. An entry may be `valid' or `invalid'
 * in the cache. A valid entry is in the main hash tables of the cache,
 * and may also be in the lru list. An invalid entry is not in any hashes
 * or lists.
 *
 * A valid cache entry is only in the lru list if no handles refer to it.
 * Invalid cache entries will be freed when the last handle to the cache
 * entry is released. Entries that cannot be freed immediately are put
 * back on the lru list.
 */
c0599de0 t __initcall_proc_cmdline_init6
Cmdline.c (fs\proc):module_init(proc_cmdline_init);
->
proc_create("cmdline", 0, NULL, &cmdline_proc_fops);

c0599de4 t __initcall_proc_consoles_init6
Consoles.c (fs\proc):module_init(proc_consoles_init);
->
proc_create("consoles", 0, NULL, &proc_consoles_operations);
c0599de8 t __initcall_proc_cpuinfo_init6
Cpuinfo.c (fs\proc):module_init(proc_cpuinfo_init)
->
proc_create("cpuinfo", 0, NULL, &proc_cpuinfo_operations);

c0599dec t __initcall_proc_devices_init6
Devices.c (fs\proc):module_init(proc_devices_init);
->
proc_create("devices", 0, NULL, &proc_devinfo_operations);
c0599df0 t __initcall_proc_interrupts_init6
Interrupts.c (fs\proc):module_init(proc_interrupts_init);
->
proc_create("interrupts", 0, NULL, &proc_interrupts_operations);
c0599df4 t __initcall_proc_loadavg_init6
Loadavg.c (fs\proc):module_init(proc_loadavg_init);

c0599df8 t __initcall_proc_meminfo_init6
Meminfo.c (fs\proc):module_init(proc_meminfo_init);
c0599dfc t __initcall_proc_stat_init6
Stat.c (fs\proc):module_init(proc_stat_init);
c0599e00 t __initcall_proc_uptime_init6
Uptime.c (fs\proc):module_init(proc_uptime_init);
c0599e04 t __initcall_proc_version_init6
Version.c (fs\proc):module_init(proc_version_init);
c0599e08 t __initcall_proc_softirqs_init6
Softirqs.c (fs\proc):module_init(proc_softirqs_init);
c0599e0c t __initcall_proc_kmsg_init6
Kmsg.c (fs\proc):module_init(proc_kmsg_init);
c0599e10 t __initcall_proc_page_init6
Page.c (fs\proc):module_init(proc_page_init);
c0599e14 t __initcall_init_devpts_fs6
Inode.c (fs\devpts):module_init(init_devpts_fs)
c0599e18 t __initcall_init_ext3_fs6
Super.c (fs\ext3):module_init(init_ext3_fs)
c0599e1c t __initcall_init_ext2_fs6
Super.c (fs\ext2):module_init(init_ext2_fs)
c0599e20 t __initcall_journal_init6
Journal.c (fs\jbd2):module_init(journal_init);
Journal.c (fs\jbd):module_init(journal_init);
c0599e24 t __initcall_init_cramfs_fs6
Inode.c (fs\cramfs):module_init(init_cramfs_fs)
c0599e28 t __initcall_init_ramfs_fs6
Inode.c (fs\ramfs):module_init(init_ramfs_fs)
c0599e2c t __initcall_init_fat_fs6
Inode.c (fs\fat):module_init(init_fat_fs)
c0599e30 t __initcall_init_vfat_fs6
Namei_vfat.c (fs\fat):module_init(init_vfat_fs)
c0599e34 t __initcall_init_msdos_fs6
Namei_msdos.c (fs\fat):module_init(init_msdos_fs)
c0599e38 t __initcall_init_nfs_fs6
Inode.c (fs\nfs):module_init(init_nfs_fs)
c0599e3c t __initcall_init_nfsd6
Nfsctl.c (fs\nfsd):module_init(init_nfsd)
c0599e40 t __initcall_init_nlm6
Svc.c (fs\lockd):module_init(init_nlm);
c0599e44 t __initcall_init_nls_cp4376
Nls_cp437.c (fs\nls):module_init(init_nls_cp437)
c0599e48 t __initcall_init_nls_ascii6
Nls_ascii.c (fs\nls):module_init(init_nls_ascii)
c0599e4c t __initcall_init_nls_iso8859_16
Nls_iso8859-1.c (fs\nls):module_init(init_nls_iso8859_1)

c0599e50 t __initcall_init_nls_utf86
Nls_utf8.c (fs\nls):module_init(init_nls_utf8)
c0599e54 t __initcall_init_autofs4_fs6
Init.c (fs\autofs4):module_init(init_autofs4_fs)
c0599e58 t __initcall_fuse_init6
Inode.c (fs\fuse):module_init(fuse_init);
c0599e5c t __initcall_ipc_init6
Util.c (ipc):__initcall(ipc_init);

/**
 *	ipc_init	-	initialise IPC subsystem
 *
 *	The various system5 IPC resources (semaphores, messages and shared
 *	memory) are initialised
 *	A callback routine is registered into the memory hotplug notifier
 *	chain: since msgmni scales to lowmem this callback routine will be
 *	called upon successful memory add / remove to recompute msmgni.
 */
c0599e60 t __initcall_ipc_sysctl_init6
Ipc_sysctl.c (ipc):__initcall(ipc_sysctl_init);
register_sysctl_table(ipc_root_table);
c0599e64 t __initcall_init_mqueue_fs6
Mqueue.c (ipc):__initcall(init_mqueue_fs);
/*POSIX message queues filesystem for Linux.*/
c0599e68 t __initcall_crypto_wq_init6
Crypto_wq.c (crypto):module_init(crypto_wq_init);
/*Workqueue for crypto subsystem*/
c0599e6c t __initcall_crypto_algapi_init6
Algapi.c (crypto):module_init(crypto_algapi_init);
/*Cryptographic API for algorithms (i.e., low-level API).*/
c0599e70 t __initcall_skcipher_module_init6
Ablkcipher.c (crypto):module_init(skcipher_module_init);
c0599e74 t __initcall_chainiv_module_init6
Chainiv.c (crypto):module_init(chainiv_module_init);
c0599e78 t __initcall_eseqiv_module_init6
Eseqiv.c (crypto):module_init(eseqiv_module_init);
c0599e7c t __initcall_crypto_ecb_module_init6
Ecb.c (crypto):module_init(crypto_ecb_module_init);
c0599e80 t __initcall_aes_init6
Aes_generic.c (crypto):module_init(aes_init);
c0599e84 t __initcall_arc4_init6
Arc4.c (drivers\staging\rtl8192u\ieee80211):module_init(arc4_init);
c0599e88 t __initcall_deflate_mod_init6
Deflate.c (crypto):module_init(deflate_mod_init);
c0599e8c t __initcall_michael_mic_init6
Michael_mic.c (crypto):module_init(michael_mic_init);
Michael_mic.c (drivers\staging\rtl8192u\ieee80211):module_init(michael_mic_init);
c0599e90 t __initcall_lzo_mod_init6
Lzo.c (crypto):module_init(lzo_mod_init);
c0599e94 t __initcall_krng_mod_init6
Krng.c (crypto):module_init(krng_mod_init);
c0599e98 t __initcall_proc_genhd_init6
Genhd.c (block):module_init(proc_genhd_init);
c0599e9c t __initcall_noop_init6
Noop-iosched.c (block):module_init(noop_init);
c0599ea0 t __initcall_ecap_init6
Ecap.c (drivers\pwm):module_init(ecap_init);
/*
 * eCAP driver for PWM output generation
 *
Ecap_cap.c (drivers\pwm):module_init(ecap_init);
/*eCAP driver for PWM Capture*/
c0599ea4 t __initcall_fb_console_init6
Fbcon.c (drivers\video\console):module_init(fb_console_init);
c0599ea8 t __initcall_pwm_backlight_driver_init6
c0599eac t __initcall_da8xx_fb_init6
Da8xx-fb.c (drivers\video):module_init(da8xx_fb_init);
c0599eb0 t __initcall_pty_init6
Pty.c (drivers\tty):module_init(pty_init);
c0599eb4 t __initcall_serial8250_init6
8250.c (drivers\tty\serial\8250):module_init(serial8250_init);
c0599eb8 t __initcall_rand_initialize6
Random.c (drivers\char):module_init(rand_initialize);
c0599ebc t __initcall_topology_sysfs_init6
Topology.c (drivers\base):device_initcall(topology_sysfs_init);
c0599ec0 t __initcall_brd_init6
Brd.c (drivers\block):module_init(brd_init);
c0599ec4 t __initcall_loop_init6
Loop.c (drivers\block):module_init(loop_init);
Rc-loopback.c (drivers\media\rc):module_init(loop_init);
c0599ec8 t __initcall_at24_init6
At24.c (drivers\misc\eeprom):module_init(at24_init);
/*
 * at24.c - handle most I2C EEPROMs
*/
c0599ecc t __initcall_davinci_aemif_init6
Davinci_aemif.c (drivers\mfd):module_init(davinci_aemif_init);
/*
 * AEMIF support for DaVinci SoCs
*/
c0599ed0 t __initcall_init_sd6
Sd.c (drivers\scsi):module_init(init_sd);
  /*Linux scsi disk driver*/
c0599ed4 t __initcall_init_sg6
Sg.c (drivers\scsi):module_init(init_sg);
c0599ed8 t __initcall_ahci_init6
Ahci.c (drivers\ata):module_init(ahci_init);
Ahci_platform.c (drivers\ata):module_init(ahci_init);
c0599edc t __initcall_init_mtd6
Mtdcore.c (drivers\mtd):module_init(init_mtd);
/*
 * Core registration and callback routines for MTD
 * drivers and users.
 */
c0599ee0 t __initcall_cmdline_parser_init6
Cmdlinepart.c (drivers\mtd):module_init(cmdline_parser_init);
c0599ee4 t __initcall_init_mtdchar6
Mtdchar.c (drivers\mtd):module_init(init_mtdchar);
c0599ee8 t __initcall_init_mtdblock6
Mtdblock.c (drivers\mtd):module_init(init_mtdblock);
c0599eec t __initcall_m25p80_init6
M25p80.c (drivers\mtd\devices):module_init(m25p80_init);
c0599ef0 t __initcall_nand_base_init6
Nand_base.c (drivers\mtd\nand):module_init(nand_base_init);
->
led_trigger_register_simple("nand-disk", &nand_led_trigger);
c0599ef4 t __initcall_nand_davinci_init6
Davinci_nand.c (drivers\mtd\nand):module_init(nand_davinci_init);


c0599ef8 t __initcall_ubi_init6
Build.c (drivers\mtd\ubi):module_init(ubi_init);
c0599efc t __initcall_davinci_spi_driver_init6

c0599f00 t __initcall_net_olddevs_init6
Space.c (drivers\net):device_initcall(net_olddevs_init);
c0599f04 t __initcall_smsc_init6
Smsc.c (drivers\net\phy):module_init(smsc_init);
c0599f08 t __initcall_smsc911x_init_module6
Smsc911x.c (drivers\net\ethernet\smsc):module_init(smsc911x_init_module);
c0599f0c t __initcall_davinci_mdio_init6
Davinci_mdio.c (drivers\net\ethernet\ti):device_initcall(davinci_mdio_init);
c0599f10 t __initcall_ppp_init6
Ppp_generic.c (drivers\net\ppp):module_init(ppp_init);
c0599f14 t __initcall_ppp_async_init6
Ppp_async.c (drivers\net\ppp):module_init(ppp_async_init);
c0599f18 t __initcall_bsdcomp_init6
Bsd_comp.c (drivers\net\ppp):module_init(bsdcomp_init);
c0599f1c t __initcall_deflate_init6
Ppp_deflate.c (drivers\net\ppp):module_init(deflate_init);
c0599f20 t __initcall_ppp_sync_init6
Ppp_synctty.c (drivers\net\ppp):module_init(ppp_sync_init);
c0599f24 t __initcall_hostap_init6
Hostap_main.c (drivers\net\wireless\hostap):module_init(hostap_init);
c0599f28 t __initcall_rndis_wlan_driver_init6

c0599f2c t __initcall_zd1201_usb_init6
c0599f30 t __initcall_asix_driver_init6
c0599f34 t __initcall_cdc_driver_init6
c0599f38 t __initcall_net1080_driver_init6
c0599f3c t __initcall_rndis_driver_init6
c0599f40 t __initcall_cdc_subset_driver_init6
c0599f44 t __initcall_zaurus_driver_init6
c0599f48 t __initcall_usbnet_init6
Usbnet.c (drivers\net\usb):module_init(usbnet_init);
c0599f4c t __initcall_cdc_ncm_driver_init6

c0599f50 t __initcall_uio_init6
Uio.c (drivers\uio):module_init(uio_init)
c0599f54 t __initcall_pruss_driver_init6

c0599f58 t __initcall_ohci_hcd_mod_init6
Ohci-hcd.c (drivers\usb\host):static int __init ohci_hcd_mod_init(void)
c0599f5c t __initcall_usb_stor_init6
Usb.c (drivers\usb\storage):module_init(usb_stor_init);
c0599f60 t __initcall_usb_serial_init6
Usb-serial.c (drivers\usb\serial):module_init(usb_serial_init);
c0599f64 t __initcall_option_init6
Option.c (drivers\usb\serial):module_init(option_init);
c0599f68 t __initcall_cppi41_dma_init6
Cppi41_dma.c (drivers\usb\musb):module_init(cppi41_dma_init);
c0599f6c t __initcall_msg_init6
Mass_storage.c (drivers\usb\gadget):module_init(msg_init);
c0599f70 t __initcall_serport_init6
Serport.c (drivers\input\serio):module_init(serport_init);
c0599f74 t __initcall_mousedev_init6
Mousedev.c (drivers\input):module_init(mousedev_init);
c0599f78 t __initcall_evdev_init6
Evdev.c (drivers\input):module_init(evdev_init);
c0599f7c t __initcall_gpio_keys_polled_driver_init6

c0599f80 t __initcall_ads7846_init6
Ads7846.c (drivers\input\touchscreen):module_init(ads7846_init);
c0599f84 t __initcall_rtc_init6
Class.c (drivers\rtc):subsys_initcall(rtc_init);
Rtc-davinci.c (drivers\rtc):module_init(rtc_init);
Rtc-omap.c (drivers\rtc):module_init(rtc_init);
Rtc.c (drivers\char):module_init(rtc_init);
c0599f88 t __initcall_i2c_dev_init6
I2c-dev.c (drivers\i2c):module_init(i2c_dev_init);
c0599f8c t __initcall_videodev_init6
V4l2-dev.c (drivers\media\video):module_init(videodev_init)
c0599f90 t __initcall_tvp514x_init6
Tvp514x.c (drivers\media\video):module_init(tvp514x_init);
c0599f94 t __initcall_ov2640_module_init6
Ov2640.c (drivers\media\video):module_init(ov2640_module_init);
c0599f98 t __initcall_soc_camera_init6
Soc_camera.c (drivers\media\video):module_init(soc_camera_init);
c0599f9c t __initcall_soc_mbus_init6
Soc_mediabus.c (drivers\media\video):module_init(soc_mbus_init);
c0599fa0 t __initcall_vpif_init6
Vpif.c (drivers\media\video\davinci):subsys_initcall(vpif_init);
Vpif_capture.c (drivers\media\video\davinci):module_init(vpif_init);
Vpif_display.c (drivers\media\video\davinci):module_init(vpif_init);
c0599fa4 t __initcall_uvc_init6
Uvc_driver.c (drivers\media\video\uvc):module_init(uvc_init);
c0599fa8 t __initcall_platform_wdt_driver_init6

c0599fac t __initcall_cpufreq_stats_init6
Cpufreq_stats.c (drivers\cpufreq):module_init(cpufreq_stats_init);
c0599fb0 t __initcall_cpufreq_gov_powersave_init6
Cpufreq_powersave.c (drivers\cpufreq):module_init(cpufreq_gov_powersave_init);
c0599fb4 t __initcall_cpufreq_gov_dbs_init6
Cpufreq_conservative.c (drivers\cpufreq):module_init(cpufreq_gov_dbs_init);
Cpufreq_ondemand.c (drivers\cpufreq):module_init(cpufreq_gov_dbs_init);
c0599fb8 t __initcall_cpufreq_gov_dbs_init6
Cpufreq_conservative.c (drivers\cpufreq):module_init(cpufreq_gov_dbs_init);
Cpufreq_ondemand.c (drivers\cpufreq):module_init(cpufreq_gov_dbs_init);
c0599fbc t __initcall_init_ladder6
Ladder.c (drivers\cpuidle\governors):module_init(init_ladder);
c0599fc0 t __initcall_init_menu6
Menu.c (drivers\cpuidle\governors):module_init(init_menu);
c0599fc4 t __initcall_mmc_blk_init6
Block.c (drivers\mmc\card):module_init(mmc_blk_init);
c0599fc8 t __initcall_davinci_mmcsd_init6
Davinci_mmc.c (drivers\mmc\host):module_init(davinci_mmcsd_init);

c0599fcc t __initcall_gpio_led_driver_init6

c0599fd0 t __initcall_timer_trig_init6
Ledtrig-timer.c (drivers\leds):module_init(timer_trig_init);
c0599fd4 t __initcall_heartbeat_trig_init6
Ledtrig-heartbeat.c (drivers\leds):module_init(heartbeat_trig_init);
c0599fd8 t __initcall_bl_trig_init6
Ledtrig-backlight.c (drivers\leds):module_init(bl_trig_init);
c0599fdc t __initcall_gpio_trig_init6
Ledtrig-gpio.c (drivers\leds):module_init(gpio_trig_init);
c0599fe0 t __initcall_defon_trig_init6
Ledtrig-default-on.c (drivers\leds):module_init(defon_trig_init);
c0599fe4 t __initcall_hid_init6
Hid-core.c (drivers\hid):module_init(hid_init);
Hid-core.c (drivers\hid\usbhid):module_init(hid_init);
c0599fe8 t __initcall_hid_init6
Hid-core.c (drivers\hid):module_init(hid_init);
Hid-core.c (drivers\hid\usbhid):module_init(hid_init);
c0599fec t __initcall_staging_init6
Staging.c (drivers\staging):module_init(staging_init);
c0599ff0 t __initcall_ad7606_init6
Ad7606_par.c (drivers\staging\iio\adc):module_init(ad7606_init);
c0599ff4 t __initcall_iio_trig_periodic_rtc_init6
Iio-trig-periodic-rtc.c (drivers\staging\iio\trigger):module_init(iio_trig_periodic_rtc_init);
c0599ff8 t __initcall_iio_gpio_trig_init6
Iio-trig-gpio.c (drivers\staging\iio\trigger):module_init(iio_gpio_trig_init);

c0599ffc t __initcall_iio_sysfs_trig_init6
Iio-trig-sysfs.c (drivers\staging\iio\trigger):module_init(iio_sysfs_trig_init);
c059a000 t __initcall_iio_davinci_tmr_trig_init6
Iio-trig-davinci-timer.c (drivers\staging\iio\trigger):module_init(iio_davinci_tmr_trig_init);
c059a004 t __initcall_alsa_hwdep_init6
Hwdep.c (sound\core):module_init(alsa_hwdep_init)
c059a008 t __initcall_alsa_timer_init6
Timer.c (sound\core):module_init(alsa_timer_init)
c059a00c t __initcall_alsa_pcm_init6
Pcm.c (sound\core):module_init(alsa_pcm_init)
c059a010 t __initcall_snd_mem_init6
Memalloc.c (sound\core):module_init(snd_mem_init)
c059a014 t __initcall_alsa_rawmidi_init6
Rawmidi.c (sound\core):module_init(alsa_rawmidi_init)
c059a018 t __initcall_snd_usb_audio_init6
Card.c (sound\usb):module_init(snd_usb_audio_init);
c059a01c t __initcall_snd_soc_init6
Soc-core.c (sound\soc):module_init(snd_soc_init);
c059a020 t __initcall_aic3x_modinit6
Tlv320aic3x.c (sound\soc\codecs):module_init(aic3x_modinit);
c059a024 t __initcall_davinci_pcm_driver_init6

c059a028 t __initcall_davinci_mcasp_driver_init6
c059a02c t __initcall_evm_init6
Davinci-evm.c (sound\soc\davinci):module_init(evm_init);
c059a030 t __initcall_alsa_sound_last_init6
Last.c (sound):__initcall(alsa_sound_last_init);
c059a034 t __initcall_sock_diag_init6
Sock_diag.c (net\core):module_init(sock_diag_init);
c059a038 t __initcall_flow_cache_init_global6
Flow.c (net\core):module_init(flow_cache_init_global);
c059a03c t __initcall_sysctl_ipv4_init6
Sysctl_net_ipv4.c (net\ipv4):__initcall(sysctl_ipv4_init);
c059a040 t __initcall_xfrm4_beet_init6
Xfrm4_mode_beet.c (net\ipv4):module_init(xfrm4_beet_init);
c059a044 t __initcall_xfrm4_transport_init6
Xfrm4_mode_transport.c (net\ipv4):module_init(xfrm4_transport_init);
c059a048 t __initcall_xfrm4_mode_tunnel_init6
Xfrm4_mode_tunnel.c (net\ipv4):module_init(xfrm4_mode_tunnel_init);
c059a04c t __initcall_ipv4_netfilter_init6
Netfilter.c (net\ipv4):module_init(ipv4_netfilter_init);
c059a050 t __initcall_inet_diag_init6
Inet_diag.c (net\ipv4):module_init(inet_diag_init);

c059a054 t __initcall_tcp_diag_init6
Tcp_diag.c (net\ipv4):module_init(tcp_diag_init);
c059a058 t __initcall_cubictcp_register6
Tcp_cubic.c (net\ipv4):module_init(cubictcp_register);
c059a05c t __initcall_packet_init6
Af_packet.c (net\packet):module_init(packet_init);
c059a060 t __initcall_lib80211_init6
Lib80211.c (net\wireless):module_init(lib80211_init);
c059a064 t __initcall_lib80211_crypto_wep_init6
Lib80211_crypt_wep.c (net\wireless):module_init(lib80211_crypto_wep_init);
c059a068 t __initcall_lib80211_crypto_ccmp_init6
Lib80211_crypt_ccmp.c (net\wireless):module_init(lib80211_crypto_ccmp_init);
c059a06c t __initcall_lib80211_crypto_tkip_init6
Lib80211_crypt_tkip.c (net\wireless):module_init(lib80211_crypto_tkip_init);
c059a070 t __initcall_davinci_cpufreq_init7
Cpufreq.c (arch\arm\mach-davinci):late_initcall(davinci_cpufreq_init);
c059a074 t __initcall_davinci_pm_init7
Pm.c (arch\arm\mach-davinci):late_initcall(davinci_pm_init);
c059a078 t __initcall_init_oops_id7
Panic.c (kernel):late_initcall(init_oops_id);
/*
 * This function is used through-out the kernel (including mm and fs)
 * to indicate a major problem.
 */
c059a07c t __initcall_printk_late_init7
Printk.c (kernel):late_initcall(printk_late_init);
c059a080 t __initcall_sched_init_debug7
Core.c (kernel\sched):late_initcall(sched_init_debug);
c059a084 t __initcall_pm_debugfs_init7
Main.c (kernel\power):late_initcall(pm_debugfs_init);
c059a088 t __initcall_pm_qos_power_init7
Qos.c (kernel\power):late_initcall(pm_qos_power_init);
c059a08c t __initcall_max_swapfiles_check7
Swapfile.c (mm):late_initcall(max_swapfiles_check);
c059a090 t __initcall_ubifs_init7
Super.c (fs\ubifs):late_initcall(ubifs_init);
c059a094 t __initcall_random32_reseed7
Random32.c (lib):late_initcall(random32_reseed);
c059a098 t __initcall_regulator_init_complete7
Core.c (drivers\regulator):late_initcall(regulator_init_complete);
c059a09c t __initcall_random_int_secret_init7
Random.c (drivers\char):late_initcall(random_int_secret_init);
c059a0a0 t __initcall_scsi_complete_async_scans7
Scsi_scan.c (drivers\scsi):late_initcall(scsi_complete_async_scans);
c059a0a4 t __initcall_init_netconsole7
Netconsole.c (drivers\net):late_initcall(init_netconsole);
c059a0a8 t __initcall_davinci_emac_init7
Davinci_emac.c (drivers\net\ethernet\ti):late_initcall(davinci_emac_init);
c059a0ac t __initcall_gpio_keys_init7
Gpio_keys.c (drivers\input\keyboard):late_initcall(gpio_keys_init);
c059a0b0 t __initcall_rtc_hctosys7
Hctosys.c (drivers\rtc):late_initcall(rtc_hctosys);
c059a0b4 t __initcall_net_secret_init7
Secure_seq.c (net\core):late_initcall(net_secret_init);
c059a0b8 t __initcall_tcp_congestion_default7
Tcp_cong.c (net\ipv4):late_initcall(tcp_congestion_default);
c059a0bc t __initcall_ip_auto_config7
Ipconfig.c (net\ipv4):late_initcall(ip_auto_config);
c059a0c0 t __initcall_initialize_hashrnd7s
Dev.c (net\core):late_initcall_sync(initialize_hashrnd);
c059a0c4 T __con_initcall_start

c059a0c4 t __initcall_da850_evm_console_init
Board-da850-evm.c (arch\arm\mach-davinci):console_initcall(da850_evm_console_init);
Board-da850-sdi.c (arch\arm\mach-davinci):console_initcall(da850_evm_console_init);
c059a0c4 T __initcall_end
c059a0c8 t __initcall_da850_evm_console_init
Vt.c (drivers\tty\vt):console_initcall(con_init);
c059a0cc t __initcall_con_init
c059a0d0 t __initcall_serial8250_console_init
8250.c (drivers\tty\serial\8250):console_initcall(serial8250_console_init);
c059a0d4 T __con_initcall_end
c059a0d4 T __initramfs_start
c059a0d4 t __irf_start
c059a0d4 T __security_initcall_end
c059a0d4 T __security_initcall_start

猜你喜欢

转载自blog.csdn.net/qq_40788950/article/details/84572223