当前位置: 首页 > news >正文

linux系统移植过程中挂死问题分析

1,场景分析

设备有一个硬件寄存器,用于存储一个 32 位的状态码。我们编写了一个函数来读取这个状态码,现在需要将这部分代码运行在aarch64位系统上,但是移植后会出现系统挂死的问题。

第一步:在 ARM32 上“正常”运行的代码

首先,是共享给用户空间的头文件和驱动代码。

// my_dma.h - 用户空间和内核空间共用
struct dma_config {unsigned int status_code; // 4字节,用于返回操作状态void* user_buffer;        // 在ARM32上是4字节指针,指向用户缓冲区
};
// my_dma_driver.c - 内核驱动代码
#include "my_dma.h"long my_dma_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) {struct dma_config cfg;// 从用户空间复制结构体if (copy_from_user(&cfg, (void __user *)arg, sizeof(cfg))) {return -EFAULT;}// ... 启动DMA硬件 ...// *** BUGGY CODE START ***// DMA完成后,硬件返回一个64位的状态码(虽然ARM32只有32位寄存器)// 程序员想把这个状态码写入status_code,他错误地认为应该按64位写入// 他没有创建新指针,而是直接对结
http://www.dtcms.com/a/557086.html

相关文章:

  • C++笔记:std::variant
  • day03(11.1)——leetcode面试经典150
  • 《算法通关指南:数据结构和算法篇 --- 顺序表相关算法题》---移动零,颜色分类
  • 视觉差网站制作百度站长统计
  • 求职专栏-【面试-自我介绍】
  • Chroma向量数据库详解:高效向量检索在AI应用中的实践指南
  • 【开题答辩全过程】以 风聆精酿啤酒销控一体系统的设计与实现为例,包含答辩的问题和答案
  • 二.docker安装与常用命令
  • 珠海网红打卡景点网站排名优化首页
  • 计算机网络Day01
  • QCES项目Windows平台运行指南
  • 多线程编程:条件变量、同步、竞态条件与生产者消费者模型
  • 怎么做高端品牌网站设计潍坊市住房和城乡建设网站
  • 哪个协会要做网站建设啊甘肃做网站哪家专业
  • springcloud : 理解Sentinel 熔断与限流服务稳定性的守护神
  • Webpack Tree Shaking 原理与实践
  • 一文讲透 npm 包版本管理规范
  • Qt 绘画 Widget 详解:从基础到实战
  • 【计算机网络】深入理解网络层:IP地址划分、CIDR与路由机制详解
  • 力扣3281. 范围内整数的最大得分
  • 力扣hot100----15.三数之和(java版)
  • 网站建设最重要的是什么什么是网站的主页
  • 影视传媒网站源码成华区建设局网站
  • 快速搭建网站 开源网络营销推广的目的是什么
  • 超越传统:大型语言模型在文本分类中的突破与代价
  • 【洛谷算题】顺序,分支,循环结构部分题目分享
  • Jmeter吞吐量控制器详解
  • 最全网站源码分享哈尔滨建设发展集团有限责任公司
  • 机器学习-KNN算法示例
  • 【随机访问介质访问控制-1】为什么纯 ALOHA 效率不到 20%?3 大随机访问 MAC 协议拆解