参照下面的patch:
1 | diff --git a/arch/arm/configs/xxx_defconfig b/arch/arm/configs/xxx_defconfig |
thinking all the time
参照下面的patch:
1 | diff --git a/arch/arm/configs/xxx_defconfig b/arch/arm/configs/xxx_defconfig |
在项目A(纯linux系统),挂载/system
分区为rw
的时候,使用如下命令,该命令可正常挂载。
1 | # mount -o remount,rw /system |
但是,在另外一个项目B上(Android系统),想要使用该命令去挂载,发现挂载失败,输出的log如下:
mount: ‘/dev/block/mmcblk0p1’->’/system’: Device or resource busy
上网搜了一下,发现是mount
用法错了,修改之后如下:
1 | # mount -o rw,remount /system |
具体这两者的差异是由于项目A和项目B使用的命令工具不一样,前者使用busybox
,后者使用toybox
。具体两者关于mount
命令的用法,还在继续查找。
https://landley.net/toybox/help.html
https://busybox.net/downloads/BusyBox.html
在kernel中,有一个函数可以用来产生panic,就是panic()
函数。
本文主要讲述如何模拟产生panic以及输出堆栈信息。
在嵌入式开发中,出现freeze的问题很让人头疼,就是那种不发生kernel panic,什么log不输出,串口终端死掉,无法输入输出。这时候,肯定是哪里出现了死锁或者死循环,长时间占用CPU资源,导致其他进程无法运行。
比如说,在底层的USB Host控制器驱动中,设置完某个控制寄存器,然后用while来检查状态寄存器的某一位是否满足条件。如果该控制器本身出现了问题,那么,将会一直卡在while中无法退出,此时就会出现freeze。
还有,我们有时候会看到watchdog/0
进程的CPU占用率非常高,此时也有可能是哪个循环语句占用太长的时间导致的。
以下的内容参照:http://blog.csdn.net/luckyapple1028/article/details/51932414
这篇文章帮助很大,在此表示感谢。
本文主要讲述taglist
+ vim
+ ctags
+ cscope
这几个工具的安装以及结合起来使用。
本文将介绍__func__
和__LINE__
和格式化打印%p
、%pf
、%pF
的用法。
最近在看Linux USB Composite Framework
的内容,经常看到函数指针跳转来跳转去。比如说会看到某个代码执行结构体中的.bind
函数指针,但又不知道到底是谁在调用它。
此时,就可以用dump_stack()
这个函数来追踪函数调用关系。当然,还是要自己尝试学习理解这个框架结构,不然纯粹的知道函数调用关系意义不大。另外,dump_stack()
可用来定位Kernel Panic和Oop的问题,配合objdump
和addr2line
可以定位到哪一行的哪句代码出现问题。
需求:
在开发过程中,我们经常需要读取CPU中某个寄存器的地址,比如说读取某一个GPIO的输出状态。如读取GPIO1_IO01
的值(以i.MX6为例),那么就是要读取寄存器0x0209c000
中bit1的值。
ioremap_nocache()
将该地址映射出来,然后去读取。mmap()
去读取。下面我们将使用mmap()
函数读取该寄存器的值,并写一个专门的应用程序regctl
来读写任意寄存器的值。需求:
Linux发生panic之后,如果/proc/sys/kernel/panic
没有值的话,会一直停留在panic的界面。如果有值,则会自动重启。在一般的客户版本中,一般都会设置成自动重启,但这样的话就无法查看重启的原因了。
为了调查问题,经常需要保留现场。因此,希望在重启之前把相应的信息以文件的形式保存下来。但是如果是文件系统发生panic,这个方案明显不行。我们可以将现场的信息暂时保留在内存里面,重启的话再从内存中将信息以log的形式保存下来。
本文主要讲述在linux3.0的版本上实现这个方案
问题:正常情况下我们要在Kernel中配置某个功能,会去Kernel_SrcDir/arch/arm/configs/xxx_defconfig
文件中修改某个宏 =y
或者is not set
。
但是有时候我们明明设置进去了,在Kernel_SrcDir/.config
中却没有看到已配置进去。出现该问题基本上以下几个原因导致的: