How static init and exit functions in a module are called outside the file by the kernel?
<p>I am reading LDD3 and had a doubt regarding the usage of static storage class in the __init and __exit function calls.
<a href="http://static.lwn.net/images/pdf/LDD3/ch02.pdf" rel="nofollow">http://static.lwn.net/images/pdf/LDD3/ch02.pdf</a></p>

<blockquote>
  <p>"Initialization functions should be declared static, since they are
  not meant to be visible outside the specific file; there is no hard
  rule about this, though, as no function is exported to the rest of the
  kernel unless explicitly requested"</p>
</blockquote>

<p>But then the kernel is able to use init and exit function using insmod and rmmod system calls. If static functions are functions that are only visible to other functions in the same file, then how is the kernel able to use the __init and __exit functions defined static in our module?</p>