linux - 无法处理虚拟地址处的内核分页请求...自定义板

标签 linux linux-kernel

我已将 rpi 作为引用并尝试将内核引导到我们的自定义板,通过将 rpi 板的基地址更改为我们的板特定地址,通过删除除 UART 和中断 Controller 之外的所有外围设备来修改“dts”文件。

如下查看环境变量,

$ setenv initrd 0xc3000000;setenv initrd_high 0xc4000000;setenv fdt_high 0xc1001000;setenv fdt_addr_r 0xc1000000


$ setenv bootargs earlyprintk console=ttyAMA0 mem=128M noinitrd root=/dev/mtdblock3 rw rootfstype=jffs2 rw init=/sbin/init

这是我们得到的错误日志....

 SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1




[    0.000000] NR_IRQS:16 nr_irqs:16 16




[    0.000000] Unable to handle kernel paging request at virtual address 48000fe0
[    0.000000] pgd = c0004000




[    0.000000] [48000fe0] *pgd=00000000




[    0.000000] Internal error: Oops: 5 [#1] ARM




[    0.000000] Modules linked in:




[    0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 4.9.22+ #81




[    0.000000] Hardware name: BCM2835





[    0.000000] task: c0497f58 task.stack: c0494000





[    0.000000] PC is at __vic_init+0x3c/0x178





[    0.000000] LR is at 0x48000fe0






[    0.000000] pc : [<c0473b74>]    lr : [<48000fe0>]    psr: a00000d3






[    0.000000] sp : c0495f50  ip : 00000000  fp : c0495f7c





[    0.000000] r10: 00000001  r9 : 410fb767  r8 : 48000000






[    0.000000] r7 : 00000000  r6 : 00000000  r5 : ffffffff  r4 : 00000000





[    0.000000] r3 : 48000fe0  r2 : 00000000  r1 : 00000000  r0 : 00000000







[    0.000000] Flags: NzCv  IRQs off  FIQs off  Mode SVC_32  ISA ARM  





Segment user
[    0.000000] Control: 00c5387d  Table: c0004008  DAC: 00000055





[    0.000000] Process swapper (pid: 0, stack limit = 0xc0494188)





[    0.000000] Stack: (0xc0495f50 to 0xc0496000)

请帮助我,在此先感谢。

最佳答案

问题似乎发生在过程 __vic_init 的中断上下文中。此过程试图访问虚拟地址 48000fe0。

顺便说一句 - 你确定这是从 dmesg 获取的完整调用跟踪吗? 如果这只是从 dmesg 中摘取的片段 - 将整个调用跟踪放在这里。

如果您有此过程 __vic_init 的源代码,您可以对其进行调试 - 我的意思是找到源文件中的行号并进行进一步调试。

关于linux - 无法处理虚拟地址处的内核分页请求...自定义板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45853306/

相关文章:

linux -/proc/[pid]/io 中的计数器是什么意思?

c - 函数 struct page* alloc_pages() 中的 unsigned int 顺序是什么

linux - 查找键盘、鼠标的事件设备

c - 如何使用printf调试linux内核的汇编代码

linux - 如何更改内核定时器频率?

java - 使用 java 类路径运行脚本

python - 在Linux中安装SetupTools时出错

c - 如何在 Linux 内核中跟踪传出 ICMP 数据包的代码路径?

java - 使用python与java程序交互

java - Ubuntu 现在可以设置 java 路径