• 学内核之九:学会偷懒,善用内核的调试日志


    是什么在推动人类社会不断的发展?说的好听一点,可能是不断增加的需求;不好听一点呢,就是不断膨胀的欲望。欲望中的很大一部分就是让人可以更懒。

    动物把有效时间都拿来觅食了,所以,动物不需要专门去锻炼。人类在满足基础需求后,衍生了很多其他需求,这其中就包括了懒人需求。智能家居、自动驾驶、机器人等等,很多首先是让人可以更懒。可见,学会偷懒,是需要一点技术投入的。

    不过,话说回来,学会偷懒,可以让我们提升自己。因为,转换一下思路,学会偷懒,就是创新了,就是找到更有效率的方法,避免低水平的重复!

    好了,废话说多了。回归正题。

    学内核的过程中,避免不了看代码,调代码。有时候,将执行过程的参数和流程打印出来,可以帮助我们更快速的了解执行逻辑,也可以辅助我们更深入的理解代码。

    那么,问题来了,如何添加日志?其实,在我们考虑添加自己的日志前,可以先看看内核是否留有日志相关的代码,只是没有打开而已。如果能够利用内核自带的日志代码,可以比较有效和快速的辅助我们理解代码逻辑。

    最近在看内存相关的代码时,就发现不少这样的代码。下面举个例子。

     上面的memeblock.c代码中,有定义一个early_param,如果这个param的值为debug,那么memblock_debug就会被置为1。这个是通过注册一个关联处理函数early_memblock来实现的。

    可以猜到,如果这个memblock_debug被设置了的话,这部分相关的处理日志就应该输出。还有一个好处,就是这个是通过参数来决定的,所以,不需要重新编译代码,这非常关键,很大程度上扩展了使用环境,减少了限制条件

    那么,怎么打开这个开关呢?关于early_param的原理,网上有很多介绍,但是仅限于介绍原理。关于使用,很少有明确说明的。

    这时候,最需要的是先猜。从它的原理和名字来看,应该是内核启动前获取的,那很可能是uboot传递进去的。跟uboot传递的其他参数,有格式上的区别吗?

    试试再说。

    于是,我在内核启动传递参数中,加上了上面的参数。(还是基于前面搭建的qemu环境)

    qemu-system-arm -nographic -s -S  -m 512M -M virt -kernel /home/work/KernelStudy/Kernel/linux-4.19.244/arch/arm/boot/zImage -append "rdinit=/linuxrc root=/dev/ram console=ttyAMA0 loglevel=8  memblock=debug" -initrd /home/work/KernelStudy/rootfs/rootfs.img

    qemu-system-arm -nographic -s -S  -m 512M -M virt -kernel /home/work/KernelStudy/Kernel/linux-4.19.244/arch/arm/boot/zImage -append "rdinit=/linuxrc root=/dev/ram console=ttyAMA0 loglevel=8  memblock=debug" -initrd /home/work/KernelStudy/rootfs/rootfs.img

    如上,加上了memblock=debug

    现在,我们再启动内核看看。

     可以看到,成功了,输出中增加了很多memblock的日志。现在,就可以代码结合日志,进一步的协助分析了。

    内核其他模块也可以采用这种方式偷偷懒。这种内置的日志,是内核开发者们保留调试的,所以输出的都是比较关键的信息,可以节省我们的分析时间。现在就好好利用吧!

  • 相关阅读:
    [附源码]JAVA毕业设计基于web的面向公众的食品安全知识系统(系统+LW)
    BCN点击试剂:1516551-46-4,BCN-succinimidylester,BCN NHS
    c语言tips-带参main函数
    Python基础之生成器
    RabbitMQ(三)持久化与发布确认
    【目标检测】Faster R-CNN论文的讲解
    P08 DQL
    垂起固定翼无人机基础知识,垂起固定翼无人机应用前景,垂起固定翼无人机优缺点分析
    Java基于springboot+vue的防护用品销售购物商城系统 前后端分离
    乾元通多卡聚合设备 消防行业应用解决方案
  • 原文地址:https://blog.csdn.net/wwwyue1985/article/details/126453622