linux - 在 Linux 驱动程序中执行引导 ROM 功能
问题描述
我正在尝试在 Linux 设备驱动程序中从 NXP IMX6UL 上的引导 ROM 执行一些功能。我认为设备驱动程序是我唯一可以管理它的地方。
目前,我使用映射引导 ROM devm_ioremap_resource()
,我可以很好地读取设备中的 ROM 表,它显示了预期的值。当我尝试从那里执行一个函数时,问题就来了,我收到一个分页请求错误并崩溃。
我收到以下崩溃消息:
Unable to handle kernel paging request at virtual address bf968f88
pgd = 8e5fa23c
[bf968f88] *pgd=b839e811, *pte=00008653, *ppte=00008453
Internal error: Oops: 8000000f [#1] PREEMPT ARM
Modules linked in:
CPU: 0 PID: 299 Comm: sh Not tainted 4.19.35-00007-ga99feb79b139-dirty #639
Hardware name: Freescale i.MX6 UltraLite (Device Tree)
PC is at 0xbf968f88
LR is at hab_rvt_entry+0x98/0xb4
pc : [<bf968f88>] lr : [<804ee430>] psr: 600f0033
sp : b9f85ea8 ip : 00000000 fp : 00000000
r10: b9e55e90 r9 : b9f85f78 r8 : b9a96800
r7 : 00000002 r6 : bf960000 r5 : 00008f89 r4 : bf968f89
r3 : fde952f0 r2 : fde952f0 r1 : 00000001 r0 : 00000000
Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA Thumb Segment none
Control: 10c53c7d Table: b9ea8059 DAC: 00000051
Process sh (pid: 299, stack limit = 0x00d86b0c)
Stack: (0xb9f85ea8 to 0xb9f86000)
5ea0: 00000002 b9e55e80 00000000 00000000 b9a96800 8027b3ec
5ec0: 00000000 00000000 81004048 8027b304 002478d0 b9f85f78 00000000 002478d0
5ee0: 00000002 802032c0 00002ee7 00000000 81004048 fde952f0 81004048 7e87c490
5f00: 00235a30 80208600 000007ff 00008180 00000001 00001000 00000000 00000000
5f20: 00000000 00000000 00002ee7 00000000 00000000 fde952f0 b98f1164 00000002
5f40: b9cbb840 002478d0 b9f85f78 00000000 002478d0 8020357c 5dca454a 00000000
5f60: 81004048 b9cbb840 00000000 00000000 b9cbb840 80203794 00000000 00000000
5f80: 00000000 fde952f0 00000002 002478d0 76ec0d98 00000004 80101204 b9f84000
5fa0: 00000004 80101000 00000002 002478d0 00000001 002478d0 00000002 00000000
5fc0: 00000002 002478d0 76ec0d98 00000004 002478d0 00000002 00000000 00000000
5fe0: 00000064 7e87c9d0 76de9ce0 76e42a74 600e0010 00000001 00000000 00000000
[<804ee430>] (hab_rvt_entry) from [<8027b3ec>] (kernfs_fop_write+0xe8/0x1c8)
[<8027b3ec>] (kernfs_fop_write) from [<802032c0>] (__vfs_write+0x2c/0x160)
[<802032c0>] (__vfs_write) from [<8020357c>] (vfs_write+0xa4/0x17c)
[<8020357c>] (vfs_write) from [<80203794>] (ksys_write+0x4c/0xac)
[<80203794>] (ksys_write) from [<80101000>] (ret_fast_syscall+0x0/0x54)
Exception stack(0xb9f85fa8 to 0xb9f85ff0)
5fa0: 00000002 002478d0 00000001 002478d0 00000002 00000000
5fc0: 00000002 002478d0 76ec0d98 00000004 002478d0 00000002 00000000 00000000
5fe0: 00000064 7e87c9d0 76de9ce0 76e42a74
Code: ffc4 f7fd f833 e7fe (b5f0) b087
作为参考和稍微理解这些错误消息,BF960000 是我的引导 ROM 的基础映射到的,我尝试执行的命令的地址物理上是 8F89,实际上是 BF968F89。
有没有办法执行启动 ROM 中存在的此类命令?
解决方案
推荐阅读
- node.js - ReferenceError:未定义猫鼬。- 当我在 Chrome DevTools 上运行 jest 调试时
- php - 为指定类别的产品添加文本挂钩
- windows - 在 Docker 构建期间访问 Gitlab CI 变量
- sapper - 如何使用 svelte/sapper 进行页面转换
- swift - 如何从 UnsafeMutablePointer 获取 CVPixelBuffer 句柄
在斯威夫特? - r - 使用循环更改函数名称和过滤器值
- javascript - 检查输入验证 [Javascript]
- sharepoint - 无法从 sharepoint rest api 仅检索文件夹
- android - 当应用程序在后台没有前台服务时如何检测蓝牙变化(连接状态和特征)
- mysql - 有没有办法使用 PyQt5 和 QMYSQL 或 QMYSQL3 驱动程序实现事务