这两天在调试一个音频ADC 芯片,也是之前的项目,但是一直调不出来,我发现我总是在这样的问题上纠结很久,以前踩过的坑后面照样会踩,只不过踩完会迅速把脚拉出来继续前进,我经常听到有人说「做嵌入式真的太容易了,来来去去就那点东西」。

不是小瞧,做嵌入式真的就来来去去那点东西,我们前几天调试一个屏幕,刚开始也是怎么点也点不亮,屏幕的分辨率是1920*1200,但是我们把这个分辨率软件设置好烧录开机后,内核崩溃了。

调试驱动不像写应用程序,如果应用程序崩溃了,系统还是活的,系统活着,就可以继续搞事情,继续看系统抛出来的信息调试。驱动不一样,驱动是内核的一部分,而且是内核的很大一部分,如果驱动异常了,很大可能性会影响到内核。

提个题外话「为什么内核下面那么多用不着的驱动代码不直接删除掉?」

再提个问题「为什么明明可以在内核里面找到答案,大家还是习惯百度?google?」

应用是人身体上的衣服,是帽子,是鞋子,但是驱动不一样,它是人身上的手,是脚,是鼻子,是耳朵。

——转回来

针对上面的问题,我们就查呀查,最后发现MTK 的代码里面有问题。

—— 这个问题出现的情况是

如果我们软件设置1920*1080的分辨率的话,内核是不会崩溃的,但是我们写入1920*1200的分辨率的话,内核就崩溃了。

我们想「是不是因为增大了分辨率,但是默认的buff 空间没有那么大,这样使用的虚拟内存就越界了,然后就崩溃了?

然后我们就找这部分的信息,你们知道,内核代码是一些非常困难的代码,阅读代码的时候,有时候要猜测它的行为,阅读一份完全陌生的代码,而且你还不知道它的行为意图,这是很困难的。

— — 然后怎么办?

然后我们就正向分析了,找到崩溃的位置,然后注释它,对,你看的没有错,我们注释了看不懂的那段代码,就是这个操作让我们的系统正常开机,而且能够正常显示画面。

然后复盘的时候,我们咨询了MTK 的技术开发,他们给出的解释是「出问题的这段代码只是为了在eng 版本调试」,这还没有完,我们虽然知道这样修改可以,但是还是看不懂它的这个函数有什么调试的意义所在。

韦老师好像有一个名言,说20%的时候在写代码,80%的时间在调试代码。调试要花费的功夫确实比写代码多,搞嵌入式,因为涉及硬件,如果有一个东西被卡住了,那时候的感觉,那个焦急的心都快孳出来了,所以搞技术,没有一个好的心态是不行的,毕竟它不是砍树,也不是真的搬水泥或者搬砖。

推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

记一次解决问题的掉坑过程相关推荐

  1. 【结果很简单,过程很艰辛】记阿里云Ons消息队列服务.NET接口填坑过程

    Maybe 这个问题很简单,因为解决方法是非常简单,但填坑过程会把人逼疯,在阿里云ONS工作人员.同事和朋友的协助下,经过一天的调试和瞎捣鼓,终于解决了这个坑,把问题记下来,也许更多人在碰到类似问题的 ...

  2. vsftpd 配置-掉坑记

    vsftpd 配置-掉坑记 教程来源 linux公社 –更改前– listen=NO listen_ipv6=NO anonymous_enable=NO local_enable=YES write ...

  3. docker mysql配置 丢失_Docker 从入门到掉坑

    Docker 介绍 简单的对docker进行介绍,可以把它理解为一个应用程序执行的容器.但是docker本身和虚拟机还是有较为明显的出入的.我大致归纳了一下,可以总结为以下几点: docker自身也有 ...

  4. docker pull 下载一半_Docker 从入门到掉坑

    Docker 介绍 简单的对docker进行介绍,可以把它理解为一个应用程序执行的容器.但是docker本身和虚拟机还是有较为明显的出入的.我大致归纳了一下,可以总结为以下几点: docker自身也有 ...

  5. Docker 从入门到掉坑

    Docker 介绍 简单的对docker进行介绍,可以把它理解为一个应用程序执行的容器.但是docker本身和虚拟机还是有较为明显的出入的.我大致归纳了一下,可以总结为以下几点: docker自身也有 ...

  6. docker privileged作用_Docker 从入门到掉坑

    Docker 介绍 简单的对docker进行介绍,可以把它理解为一个应用程序执行的容器.但是docker本身和虚拟机还是有较为明显的出入的.我大致归纳了一下,可以总结为以下几点: docker自身也有 ...

  7. centos 8 使用 nmcli 配置网桥Bridge(最后有踩坑过程)

    文章最后有踩坑过程,前面先写正常流程. 背景:最近想在自己笔记本上搭建openstack集群,再在集群上面上面跑K8S. 首先需要准备两个网络供虚拟机使用,一个网络用于连接互联网用来在线安装各种服务和 ...

  8. v50.03 鸿蒙内核源码分析(编译环境) | 编译鸿蒙防掉坑指南 | 百篇博客分析HarmonyOS源码

    颜渊死.子曰:"噫!天丧予!天丧予!" <论语>:先进篇 百篇博客系列篇.本篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙防掉坑指南 编译构建相关篇 ...

  9. HBase眼高手低从Shell到IDEA编程、心路笔记、踩坑过程

    HBase眼高手低从Shell到IDEA编程.心路笔记.踩坑过程 HBase眼高手低 通过shell操作Hbase Foundation 在terminal中输入hbase,就可以查看hbase命令的 ...

最新文章

  1. 解决电信网通封锁路由以及上网机器台数的破解方法
  2. 2017-2018-1 20155223 实验三 实时系统
  3. 在head标签内css代码,怎么在head区域引入css
  4. 2011年 7月6日の朝会文章 手塚 治虫
  5. 卸载软件后,win10应用与功能中仍有残留,解决方案。
  6. VS2010 上手案例---hello word
  7. 面试题:赛马最快N匹
  8. 人人皆可二次元!小姐姐生成不同风格动漫形象,肤色、发型皆可变
  9. 浮动广告代码在网页两侧
  10. 排序?吹泡泡吹到排序
  11. 6种不良坐姿最伤脊椎
  12. cut out数据增强_常见的数据增强项目和论文介绍
  13. 云计算助力中国产业数字化升级
  14. 这是我的第一个学Python的博客
  15. 华为云云主机体验有感:你的软件收纳专家
  16. 设计一个ATXPowerController装置解决外置显卡ATX电源与主机同步开关机的问题
  17. JS数据格式化保留两位小数的多种实现方法总结
  18. java毕业设计超市购物系统mybatis+源码+调试部署+系统+数据库+lw
  19. RationalDMIS 2020 圆柱测针如何校验?(环规法)
  20. windows的commonfiles

热门文章

  1. 数据库不完全恢复 以及恢复到测试环境:
  2. 登录失败时记住访问的地址
  3. Spark 1.1.1 Submitting Applications
  4. linux下安装oracle 11g R2
  5. Adobe Dreamweaver 添加库、标签和属性
  6. JAVA中字符串比较equals()和equalsIgnoreCase()的区别
  7. 自顶向下和自底向上测试的优缺点
  8. spring data jpa和mybatis的不同
  9. 前端之 JavaScript 基础
  10. Linux 监控命令之 vmstat