问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

linux系统启动中的initcall实现原理和调试方法

发布网友 发布时间:2024-09-28 15:05

我来回答

1个回答

热心网友 时间:2024-09-28 15:12

Linux系统启动中的initcall机制是内核经典设计之一,用于在启动过程中调用不同的初始化函数。此机制不仅简化了代码结构,还提升了代码的可维护性。在2018年,为追踪并调试初始化函数耗时,Steven Rostedt引入了追踪功能。

initcall的意义在于执行特定架构下CPU与外设驱动的初始化,不需显式传递、存储和调用函数指针,只需标记函数类型即可自动执行。基于initcall的初始化代码应以`__init`修饰,并使用`xxx_initcall`声明初始化类型。

initcall实现原理基于`__define_initcall`宏,将所有`xxx_initcall`统一链接至不同subsection,根据ID编号排序执行。通过`rockchip_grf_init()`示例,可见使用GNU编译工具链属性实现细节。

执行流程涉及生成不同类别的section,内部函数按照编译顺序执行,不同类之间在`init/main.c`中定义执行顺序。`do_initcalls()`遍历ID编号的initcall,通过`xxx_start`链接找到相对应的`.initcall entry`,进而循环执行各初始化函数。

调试方法包括`initcall_debug`和`ftrace`。`initcall_debug`通过CMDLINE选项启用,帮助检测耗时较长的初始化调用。然而,可能因日志级别设置不当,导致调试信息与常规日志混杂。相比之下,`ftrace`在较新内核版本中提供更细致的追踪分析,通过打开trace功能并使用CMDLINE选项,能够详尽追踪initcall执行情况。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 羊炭疽病[ 预防 ] 地下城与勇士狂战附魔选择 85级版本地下城60级狂战穿什么装备好,? 《DNF》狂战完美附魔需要什么 杭州保融科技怎么样? 凤岗防刮花亚克力镜片镜面 妨害安全驾驶罪的法定最高刑是什么? 妨害交通公共安全驾驶罪的量刑标准是什么? 妨害安全驾驶罪处罚依据是什么? 妨害交通运输行为构成什么罪? 广东在安徽的什么方向 直经230分8等份怎么求得出来,越详细越好? ...由于漏写除数个位上的0,变成了8,结果得到商是230,那 230元汽油行了413公里!油耗是多少? 230元打8折是多少钱? 玩具车230元大约是魔方8元的多少倍? 收纳物语第十九关怎么通过-最强大脑通关技巧攻略 在淘宝上充值话费安全吗?哪家店好一点呢? 请问在淘宝上充值话费安全吗? 作文智慧助我成功200字 intrd是什么 梦见和熟人打架是什么征兆,梦见两个熟人打架 做梦梦见被冤枉与人争执是什么征兆 扬州师范学院怎么样? 扬州大学有那好专业 养羊最常见的三种病分别如何防治 国际证书哪个权威 羊的常见病防治内容简介 养羊羊病防治 养羊与羊病防治(畜牧兽医专业用)内容简介 新编羊病防治手册目录 梦见自己车子停在路边等朋友结果朋友卖毒品被抓自己也被带逬派出所是... 刮胡子刮出血会留疤吗? 刮胡子刮出血怎么办 第一次约会女孩子带去ktv是什么意思 第一次与约会的人见面,在KTV唱歌的时候,她总看着我,我对她看她立刻往... 第一次跟女生约会 喊我去KTV 她说我不守时间 我在楼下 等我朋友。 等... 溶脂针瘦脸管用吗 溶脂针真的有用吗 ...手里拿着手枪进派出所,说是要找部队的射击场练习打枪,警察说不在这... 作、作业、作品、作为的区别是什么?有何联系呢?