<div dir="ltr"><div><div><div><div>Hi Michael,<br><br></div>You can use binary utils like nm or objdump to exam your vmlinux.<br><br></div>Linker collects initcall functions and puts them in initcall section.<br></div>Kernel can find all initcall functions in initcall section.<br>
<br></div>Regards,<br>MH<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Jan 10, 2014 at 3:00 AM, m silverstri <span dir="ltr">&lt;<a href="mailto:michael.j.silverstri@gmail.com" target="_blank">michael.j.silverstri@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Thanks.  The vmlinx is a binary file, I don&#39;t see what you show in<br>
your response.<br>
<br>
I have another question is where does the kernel find these driver<br>
modules for it to load?<br>
>From the make file, a driver will compile into a .o file?<br>
<br>
As an example<br>
<br>
$ more Makefile<br>
s5p-jpeg-objs := jpeg-core.o<br>
obj-$(CONFIG_VIDEO_SAMSUNG_S5P_JPEG) += s5p-jpeg.o<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
On Thu, Jan 9, 2014 at 8:15 AM, Miles MH Chen &lt;<a href="mailto:orca.chen@gmail.com">orca.chen@gmail.com</a>&gt; wrote:<br>
&gt; Hello Michael,<br>
&gt;<br>
&gt; The module_init call is defined as device_initcall, which is one of kernel<br>
&gt; inicalls.<br>
&gt; All initcalls are put to initcall section and kernel calls all initcalls at<br>
&gt; boot time.<br>
&gt;<br>
&gt; You can check this in your vmlinux:<br>
&gt;<br>
&gt; ffffffff81765ed8 T __initcall_start<br>
&gt; ffffffff81765ed8 T __setup_end<br>
&gt; ffffffff81765ee0 t __initcall_trace_init_flags_sys_exitearly<br>
&gt; ffffffff81765ee8 t __initcall_trace_init_flags_sys_enterearly<br>
&gt; ffffffff81765ef0 t __initcall_init_hw_perf_eventsearly<br>
&gt; ffffffff81765ef8 t __initcall_register_trigger_all_cpu_backtraceearly<br>
&gt; ffffffff81765f00 t __initcall_spawn_ksoftirqdearly<br>
&gt; ffffffff81765f08 t __initcall_init_workqueuesearly<br>
&gt; ffffffff81765f10 t __initcall_check_cpu_stall_initearly<br>
&gt; ffffffff81765f18 t __initcall_migration_initearly<br>
&gt; ...<br>
&gt;<br>
&gt; kernel calls do_initcalls in do_basic_setup<br>
&gt;<br>
&gt; 783 static void __init do_basic_setup(void)<br>
&gt; 784 {<br>
&gt; 785         cpuset_init_smp();<br>
&gt; 786         usermodehelper_init();<br>
&gt; 787         shmem_init();<br>
&gt; 788         driver_init();<br>
&gt; 789         init_irq_proc();<br>
&gt; 790         do_ctors();<br>
&gt; 791         usermodehelper_enable();<br>
&gt; 792         do_initcalls();<br>
&gt; 793         random_int_secret_init();<br>
&gt; 794 }<br>
&gt;<br>
&gt; Regards,<br>
&gt; MH<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; On Thu, Jan 9, 2014 at 10:25 AM, m silverstri<br>
&gt; &lt;<a href="mailto:michael.j.silverstri@gmail.com">michael.j.silverstri@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Hi,<br>
&gt;&gt;<br>
&gt;&gt; In a kernel driver code, I see it has &#39;module_init(jpeg_init)&#39; and<br>
&gt;&gt; &#39;module_exit(jpeg_exit)&#39;.  I would like how know how will<br>
&gt;&gt; jpeg_init(void) gets call during kernel bring up.<br>
&gt;&gt;<br>
&gt;&gt; As an example:<br>
&gt;&gt; static int __init jpeg_init(void)<br>
&gt;&gt; {<br>
&gt;&gt; printk(KERN_CRIT &quot;Initialize JPEG driver\n&quot;);<br>
&gt;&gt;<br>
&gt;&gt; platform_driver_register(&amp;jpeg_driver);<br>
&gt;&gt;<br>
&gt;&gt; return 0;<br>
&gt;&gt; }<br>
&gt;&gt;<br>
&gt;&gt; static void __exit jpeg_exit(void)<br>
&gt;&gt; {<br>
&gt;&gt; platform_driver_unregister(&amp;jpeg_driver);<br>
&gt;&gt; }<br>
&gt;&gt;<br>
&gt;&gt; module_init(jpeg_init);<br>
&gt;&gt; module_exit(jpeg_exit);<br>
&gt;&gt;<br>
&gt;&gt; Thank you.<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; Kernelnewbies mailing list<br>
&gt;&gt; <a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>
&gt;&gt; <a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br></div>