Android培训班(106)start_kernel函数3

unwind_init()

这个函数主要作用是提供调试和错误的初始化。由于内核是基于C语言开发的系统,而C语言是基于栈的函数调用语言,那么当函数出错时,软件开发工程师就逼切地想知道是从那里调用这个函数出错的,也就是想获取函数调用的路径,以便确认这条路径里是否考虑到的情况,如果没有考虑周到,说明就有错误出现了。如果系统提供这种查看函数调用栈的关系,那么会大大方便软件开发工程师对软件修改,提高质量。调用栈的形式一般如下:

unwind backtrace:

[0xffffffff810ef759]unw_backtrace+0x29/0x80

[0xffffffff810ef7d4]test_write+0x24/0x90

[0xffffffff81138940]vfs_write+0xd0/0x1a0

[0xffffffff81138b14]sys_write+0x54/0xa0

[0xffffffff814d7352]system_call_fastpath+0x16/0x1b

在这个调用栈里,从下至上地调用,发现最近发现错误的函数就是unw_backtrace



lockdep_init()

这个函数主要作用是初始化锁的状态跟踪模块。由于内核大量使用锁来进行多进程、多处理器的同步操作,那么死锁就会在代码不合理时出现,这时要知道那个锁造成的,真是比较困难的。遇到这种情况,就需要想办法知道那个锁造成的,因此就需要跟踪锁的使用状态,以便发现出错时,把锁的状态打印出来。造成死锁的情况有很多,主要有以下几种:

1. 同一个进程递归地加锁同一把锁。

2. 同一把锁在两次中断里加锁。

3. 几把锁形成一个闭环死锁。


debug_objects_early_init()

这个函数主要作用是对调试对象进行早期的初始化,其实就是HASH锁和静态对象池进行初始化。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caimouse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值