• SystemTap使用技巧-找代码

    背景 使用SystemTap打点时,首先要确认探测点,但有时我们可能只知道探测点的函数名称,不知道其具体的实现位置,典型的就是系统调用,内核中实现系统调用的方式有点特别,比如sys_open(),在内核中找不到sys_open()的函数的实现。 另一方面,由于代码编译时做的优化,一些代码行并不能直接做为探测点,此时需要有方法来获取可用的探测点。 查找函数位置 使用stap...


  • SystemTap使用技巧-跟踪函数指针

    背景 内核中(应该说是C代码中)经常会使用函数指针,原因很简单,依赖倒置原则,利用函数指针可以实现在运行时动态调整依赖,解除各模块直接的耦合,增加代码(框架)的扩展性,这里不关注~ 在阅读代码是,遇到函数指针,通常会比较难准确找到其具体对应的函数,通常需要在代码中去搜索相应的关键字,比较麻烦,而且不容易找到。 在内核中问题尤其明显,内核中为实现层间的隔离,使用了大量的函数指针,函数指针由底层实现,不同底层会有不同的实现,比如一个显卡驱动实现的函数指针,在内核中有大量的显卡驱动,每个显卡驱动都有自己的实现,光阅读代码,很难找到自己的环境中具体使用的是那个函数实现,除非你非常了解硬件的相关信息。 示例如mmap流程中的如下代码:...


  • SystemTap使用技巧-查看变量

    背景 最近分析内核驱动故障时,重新又开始用SystemTap了,这个用起来最方便。 对我个人来说,SystemTap中最常用的就是查看变量(包括函数入参、局部变量和全局变量)操作了,查看变量看似很简单,但其中也有不少坑。 基本用法 SystemTap脚本中,查看变量的方法很简单,就直接$变量名就可以了,比如...


  • mmap原理及流程(kernel 4.1版本)

    背景 最近在分析问题时,遇到了mmap fb设备失败问题,顺便看了下4.1版本内核中的mmap相关流程,以前看过老版本的,有些忘记了,这里权当记录,供后续参考。 mmap是什么? 相信做过Linux开发的兄弟都或多或少用过,或者听说过mmap,但可能并不完全了解mmap的作用。...


  • 关机动画打开后关机死机问题

    背景 最近在国产芯片环境中,发现打开开机动画后,关机时,时有死机现象出现,X86环境中没有出现,又是死机问题,由于之前研究过开机动画,这个问题看起来好像可以信手拈来,但过程比预想中要麻烦许多。 故障现象 打开开机动画后,执行reboot命令,很快死机,关机动画没有显示出来,显示器黑屏,鼠标键盘没有任何反应,但单板还处于上电状态,不会下电。 故障现象很简单,但要分析就很麻烦了,最大的困难在于没有任何错误打印,打开plymouth的调试开关(在内核启动参数中加入plymouth:debug),plymouth的日志中也没有任何打印(话说回来,由于是在关机过程中出现问题,即使有日志。启动时也会相应的日志冲掉,所以,不做修改的话,也不能指望这里会有收获。)...


  • 开机动画plymouth相关原理

    背景 最近遇到桌面系统中,开机动画卡顿的问题,第一印象感觉好像是显卡驱动或者是硬件问题,绘图慢,从而导致卡顿。 但是,打开plymouth相关的调试开关后并没有发现明显的错误打印,甚是疑惑。于是,对开机动画组件plymouth做了一番研究,其实就是看代码了,搞明白其原理后,才明白原来是这么回事儿。 开机动画相关概念 开机动画就是在开机后,系统启动过程中看到的一些动画显示,通常的桌面系统中(服务器系统不一定),都会有这样的动画,目的是不想让用户看到具体的启动过程,另一方面也更美观。...


  • 闲聊Framebuffer

    背景 接触过图形相关的同学应该对Framebuffer这个名词不陌生,但Framebuffer究竟是什么,用来做什么,在我接触图形相关工作以前,对我来说一直是模糊的。 本文主要闲聊Framebuffer。 什么是Framebuffer? Framebuffer,也叫帧缓冲,其内容对应于屏幕上的界面显示,可以将其简单理解为屏幕上显示内容对应的缓存,修改Framebuffer中的内容,即表示修改屏幕上的内容,所以,直接操作Framebuffer可以直接从显示器上观察到效果。...


  • 使用mmap来共享内存

    背景 Linux中常使用mmap来实现共享内存,但场景还是比较多,这里做简单介绍。 什么是mmap? mmap的本质是用来将文件(也可以是设备)内容映射到进程地址空间(虚拟内存,返回虚拟内存地址),映射后,进程直接往指定内存地址(虚拟内存地址)中读写内容,即可实现该文件内容的读写。 这里有几种典型的使用场景:...


  • 闲聊敏捷中的设计

    闲话 公司从去年开始搞敏捷,如火如荼,开始并没什么感觉,但随之逐渐深入,感觉确实有很多不同,敏捷中还是有很多的可取之处,尽管并不完美,但至少已经逐步被大家和我自己接受。 今天要闲聊的话题是:敏捷中的架构设计。 什么是架构设计? 软件领域中未见一个标准的定义。靠自己理解。...


  • 闲聊Libhybris

    闲话 最近开始考虑Android和Linux桌面兼容的问题,目的是丰富Linux当前最大的短板:应用生态圈。了解到Libhybris相关的内容,在此闲聊,权当总结和记录 什么是Libhybris? Libhybris是一套适配库,用于解决GNU lib和Android...