版权声明:转载请注明出处: http://blog.csdn.net/sy373466062 作者: TonyHo https://blog.csdn.net/sy373466062/article/details/50363151 </div>
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css">
<div class="htmledit_views" id="content_views">
可能的原因
昨晚在Yocto中适配TQIMX6的时候,bootm之后出现start kenrel之后没有任何输出。对此一般有多种调试方法,与调查方向,可能的原因如下级类:
- 串口的引脚是否配置正确,例如pincltrl指定的Debug串口引脚,串口选错没有
- 串口的直连与交叉问题
- 查看bootargs传过去的console=是否正确,例如ttyXX是否正确,波特率
- 内核使用的command Line是uboot的还是内核的,还是dtb中chosen中的
调查方法
串口硬件问题的调查
可以使用示波器与逻辑分析仪来确认
串口软件配置问题的调查
可以使用在uboot查看log_buf的方法来查看问题出在哪里
当内核在start kernel之后,没有任何输出,等一会于用reset按键软reset,并停在uboot命令行中,使用下面方法来查看kenrel的log_buf,即printk存储log的地方。
在内核编译目录下面的System.map中找到__log_buf的位置,例如:
这个表示log_buf位于内核虚拟地址0x80dcdd84的位置,这个地方是直接映射段,因此对于imx6而言就是0x10dcdd84。
于是在uboot中使用md命令来查看这段区域的内容:
然后一直回车,最后可以看到内核最后使用的bootargs/commandLine:
然后我们可以看看内核中使用的串口叫上面名字其实是ttymx0,而不是前面我们指定的ttySC0:
kernel command line传入的调查
新的内核支持四种方式来组成commandline:
- 使用uboot中的
- 使用内核配置中的
- 使用uboot+内核配置中的
- 使用dtb中的chosen中的bootargs
这些都在menuconfig中可以看到,因此如果你在内核中看到的commandline与自己从uboot中传入的不一样,那么检查下面选项: