I2C驱动培训文档(4)

2025-08-02

4.执行各种模块的初始化 5.挂接根文件系统 6.启动第一个init进程

在4步骤之后,start_kernel--->rest_init

__initcall_start和__initcall_end在源码中并无定义,只是在include/linux/init.h中申明为外部变量。

arm平台下,连接控制脚本为vmlinux.lds, 它们定义是在/arch/arm/vmlinux.lds中,看下图红色标记部分。

其含义是指示连接程序让__initcall_start指向代码节.initcall.init的节首,而__initcall_end指向.initcall.init的节尾。

在内核中,只要把需要初始化调用的函数的指针放在__initcall_start和__initcall_end之间的节内,函数就会在内核初始化时被调用。

加入到.initcall.init的代码段,是按如上方式调用的。主要是各个驱动模块。

Machine_desc的是怎么加载的呢?

先看下面几个截图中红色标记部分:

由上图可以看到,成员函数init_machine就是在这里被调用的。但是它没有被显式调用,而是放在了arch_initcall这个宏里,去看看它怎么定义的:

#define arch_initcall(fn) __define_initcall(\#define __define_initcall(level,fn,id) \\


I2C驱动培训文档(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:[JSP]网上书店

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219