嵌入式开发调试与性能分析全攻略
1. 调试指针空值问题
在调试过程中,发现 m 变量为 null 指针,这导致了系统出现 Oops 错误。查看 m 初始化的代码,发现缺少一行代码。修改驱动以初始化指针后,问题解决,系统不再出现 Oops 错误。以下是修改后的代码:
static int mbx_open(struct inode *inode, struct file *file)
{
if (MINOR(inode->i_rdev) >= NUM_MAILBOXES) {
printk("Invalid mbx minor number\n");
return -ENODEV;
}
file->private_data = &mailboxes[MINOR(inode->i_rdev)];
return 0;
}
2. 保存 Oops 信息
要解析 Oops 错误,首先需要捕获它。如果系统在启动过程中控制台未启用时崩溃,或者在挂起后崩溃,就无法看到 Oops 信息。可以使用一些机制将内核 Oops 和消息记录到 MTD 分区或持久内存中,这里介绍一种简单的方法:
1. 只要重置过程中内存内容未损坏(通常不会损坏),就可以重新启动到引导加载程序,并使用它来显示内存内容。
2. 需要知道内核日志缓冲区的位置,其符号为 __log_buf 。可以在 System.map </
超级会员免费看
订阅专栏 解锁全文
49

被折叠的 条评论
为什么被折叠?



