摘要: 一、简介 有些时候,我们特别关注程序的性能,特别是底层软件,比如驱动程序,OS等。为了更好的优化程序性能,我们必须找到性能瓶颈点,“好钢用在刀刃上”才能取 得好的效果,否则可能白做工作。为了找到关键路径,我们可以使用profilng技术,在linux平台上,我们可以使用gprof和oprofile工 阅读全文
posted @ 2020-05-06 14:04 smilingsusu 阅读(608) 评论(0) 推荐(0) 编辑
摘要: 一、OOM处理的基本流程简单描述如下: 1、检查是否配置了/proc/sys/kernel/panic_on_oom,如果是则直接触发panic。 2、检查是否配置了oom_kill_allocating_task,即是否需要kill current进程来回收内存,如果是,且current进程是ki 阅读全文
posted @ 2020-04-28 17:23 smilingsusu 阅读(2327) 评论(0) 推荐(0) 编辑
摘要: 1.介绍 Linux kernel中,我们经常需要从uboot传入一些参数给kernel,用来设置driver的行为。 2.方法 kernel已经封装好API了,使用方法非常简单,例子如下: 在bootargs中加入uartp_mode=1,则在driver初始化之前,就会设置uartp_optio 阅读全文
posted @ 2020-04-24 16:59 smilingsusu 阅读(913) 评论(0) 推荐(0) 编辑
摘要: 1.介绍 ARM自带有HW debug功能,作用是在某个内存或者地址被读写时,可以触发异常,然后我们可以在异常中进行一些必要信息的打印,比如stack,这非常有利于debug内存,寄存器越界读写的问题。 aarch32 linux4.9 kernel 有breakpoint的編碼例項data_bre 阅读全文
posted @ 2020-04-24 16:17 smilingsusu 阅读(928) 评论(0) 推荐(0) 编辑
摘要: 1.简介 近期遇到一个uart数据部分丢失的问题,比较怀疑在中断中,寄存器发生异常。 选择使用kernel自带的Trace工具追踪UART IRQ信号。 2.使用方法 追踪IRQirq:irq_handler_exitirq:irq_handler_entry proc/interrupts //查 阅读全文
posted @ 2020-04-15 15:43 smilingsusu 阅读(1430) 评论(0) 推荐(0) 编辑
摘要: 1.首先从log分析,可以看到最后挂在mdrv_HDMI_GetSourceSelect + 0x8c处。 <4>[ 5022.810137] [<ffffff8000ffcd74>] mdrv_HDMI_GetSourceSelect+0x8c/0x118 [utpa2k] <4>[ 5022.8 阅读全文
posted @ 2020-04-15 09:10 smilingsusu 阅读(1010) 评论(0) 推荐(0) 编辑
摘要: 最近遇到在64bit kernel执行32bit的程序时,ioctl无法操作tty driver。问题是kernel中tty设备没有compat_ioctl回调导致的,最后自己修改uart_ops解决的问题。 在debug此问题时,需要在syscall中加入log,加入之后会导致log过多而影响观察 阅读全文
posted @ 2020-04-02 20:34 smilingsusu 阅读(416) 评论(0) 推荐(0) 编辑
摘要: UBOOT中增加backtrace功能 目前有些bootloader中编译时,没有设置fp寄存器,因此无法打印出backtrace,调试时会较为麻烦,按照如下方法,可以在异常时增加backtrace打印,更加方便debug。 1. arch/arm/cpu/armv7/config.mk中加入编译参 阅读全文
posted @ 2020-02-27 10:47 smilingsusu 阅读(1150) 评论(0) 推荐(0) 编辑
摘要: 一、介绍 Linux中,如果需要访问物理内存,可以用kmalloc等申请空间,而如果需要访问特定物理内存,可以使用memremap、phys_to_virt。 Like user space, the kernel accesses memory through page tables; as a 阅读全文
posted @ 2019-12-02 17:16 smilingsusu 阅读(2571) 评论(0) 推荐(0) 编辑
摘要: 一、打印far、fsr寄存器,进行错误确认。 打印CP15的C5、C6寄存器进行错误信息确认。 unsigned int far, fsr; __asm__ ("MRC p15, 0, %0, c6, c0, 0" : "=r" far); __asm__ ("MRC p15, 0, %0, c5, 阅读全文
posted @ 2019-11-25 13:20 smilingsusu 阅读(1276) 评论(0) 推荐(0) 编辑