linux核心初始化步驟(六)
阿新 • • 發佈:2018-12-01
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, ¬es_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