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锁和静态对象池进行初始化。
分享到:
相关推荐
Linux内核函数Start_kernel()中调用了一系列初始化函数,以完成kernel本身的设置。这些动作有的是公共的,有的则是需要配置的才会执行的。本文介绍了在start_kernel()函数中的一些功能。
Daniel Jslin教授分析linux kernel 中的start_kernel详细过程。by the way.可以关注我在csdn上关于linux kernel的课程https://edu.csdn.net/course/detail/9089
arm linux 从入口到start_kernel 代码分析 第四部分
arm linux 从入口到start_kernel 代码分析
很好的linux启动代码分析 LINUX , start_kernel , 启动代码 linux kernel 从入口到start_kernel 的代码分析.rar 104.59 KB, 下载次数: 31 , 下载积分: 资产 -2 信元, 下载支出 2 信元
arm linux 从入口到start_kernel 代码详细分析.doc
该文档描述了linux 内核内存管理部分的相关分析,从start_kernel入手,注重代码分析。
start_kernel流程图 linux2.6 内核支持两种格式的 initrd,一种是 image-initrd,其核心文件就是 /linuxrc。另外一种是cpio-initrd,使用 cpio 工具生成,其核心文件不再是 /linuxrc,而是 /init。尽管 linux2.6...
linux内核从start_kernel到init.pdf
arm linux 从入口到start_kernel 代码分析 第六部分
arm linux 从入口到start_kernel 代码分析第三部分
arm linux 从入口到start_kernel 代码分析 第5部分
arm linux 从入口到start_kernel 代码分析 第7部分
第一部分从Linux系统程序入口地址_start开始直到调用start_kernel函数;第二部分从start_kernel函数开始直到使用kernel_thread函数创建init进程。 本文件的代码分析将从第二次引导,即start_kernel()开始,直到mem_...
打印机驱动 START_PLQ6_OKI5_Drvsky打印机驱动 START_PLQ6_OKI5_Drvsky打印机驱动 START_PLQ6_OKI5_Drvsky打印机驱动 START_PLQ6_OKI5_Drvsky打印机驱动 START_PLQ6_OKI5_Drvsky打印机驱动 START_PLQ6_OKI5_Drvsky...