从Firefly官网下载的安卓系统源码,编译后,修改了部分驱动,启动的时候偶尔会出现”Unable to handle kernel paging request at virtual address 490000004c“的报错,出现这种情况基本系统就无法启动了。

[    1.739143] ioctrl: ioctrl driver register success!
[    1.739187] register ioctrl driver platform!
[    1.739201] register ioctrl driver chrdev!
[    1.739221] register ioctrl driver create!
[    1.744889] register ioctrl driver success!
[    1.745023] Unable to handle kernel paging request at virtual address 490000004c
[    1.746071] pgd = ffffff80093ea000
[    1.746373] [490000004c] *pgd=0000000000000000, *pud=0000000000000000
[    1.746965] Internal error: Oops: 96000005 [#1] PREEMPT SMP
[    1.747465] Modules linked in:
[    1.747761] CPU: 4 PID: 37 Comm: kdevtmpfs Not tainted 4.4.103 #559
[    1.748318] Hardware name: AIO-3399JD4 Board mipi (Android) (DT)
[    1.748853] task: ffffffc0f1d00000 task.stack: ffffffc0f1d08000
[    1.749382] PC is at __kmalloc_track_caller+0xe8/0x238
[    1.749837] LR is at __kmalloc_track_caller+0x58/0x238
[    1.750291] pc : [<ffffff80081adee4>] lr : [<ffffff80081ade54>] pstate: 60400145
[    1.750943] sp : ffffffc0f1d0bc80
[    1.751242] x29: ffffffc0f1d0bc80 x28: ffffff80093d0520
[    1.751736] x27: ffffff80093a4b90 x26: 000000000001119c
[    1.752229] x25: ffffffc0f1d00000 x24: ffffffc0f1d00000
[    1.752721] x23: ffffff8008535158 x22: 00000000024000c0
[    1.753214] x21: 000000000000000a x20: ffffffc000201e00
[    1.753707] x19: 000000490000004c x18: 0000000030d00800
[    1.754199] x17: 0000000000000000 x16: 0000000000000000
[    1.754691] x15: 0000000000000000 x14: 0fffffffffffffff
[    1.755184] x13: 0000000000000030 x12: 0000000000000008
[    1.755676] x11: 0101010101010101 x10: 7f7f7fff7f7f7f7f
[    1.756168] x9 : fefeff93fefeff71 x8 : 7f7f7f7f7f7f7f7f
[    1.756661] x7 : 646c68732e636d72 x6 : 0080808000808080
[    1.757153] x5 : 0000000000000000 x4 : 0000000000000000
[    1.757645] x3 : 0000009500000072 x2 : 000000000001119c
[    1.758137] x1 : 00000040ede26000 x0 : 0000000000000000
[    1.758630]
[    1.758630] PC: 0xffffff80081ade64:
[    1.759071] de64  d2800013 b40007e0 d5384118 aa1803f9 b9401b00 11000400 b9001b00 f9400280
[    1.759856] de84  d538d081 91002000 f860683a b9401b00 51000400 b9001b00 35000080 f9400300
[    1.760636] dea4  36080040 94260e30 f9400280 d538d081 8b000022 f9400442 eb02035f 54fffda1
[    1.761417] dec4  f8606833 b50000d3 aa1403e0 2a1603e1 97fff86c aa0003f3 1400001c b9802280
[    1.762197] dee4  f8606a7b b9401b20 11000400 b9001b20 f9400281 91002342 d538d080 8b010000
[    1.762977] df04  f9800011 c87f7003 ca130063 ca1a039c aa1c007c b500007c c823081b 35ffff43
[    1.763757] df24  b9401b20 51000400 b9001b20 35000080 f9400320 36080040 94260e0b b5fff9bc
[    1.764536] df44  b9802280 f8a06b60 367800d6 b40000b3 b9801e82 aa1303e0 52800001 94074b68
[    1.765317]
[    1.765317] LR: 0xffffff80081addd4:
[    1.765758] ddd4  aa1503e1 97fff44f f94006a0 b4fffee0 2a1403e0 a94153f3 a9425bf5[    1.766440] mmc0: MAN_BKOPS_EN bit is not set

根据网上的搜索结果,查看地址为pgd = ffffff80093ea000,查看系统源码下的kernel下的System.map,查看该该地址对应的函数,为swapper_pg_dir,这个函数不是自己写的函数,因此再往下查有些困难。

ubt@ubt-ThinkPad-E470:~/proj/firefly-rk3399/kernel$ vim System.map1 0000000000000000 A __rela_size2 0000000000000000 A _kernel_flags_le_hi323 0000000000000000 A _kernel_offset_le_hi324 0000000000000000 A _kernel_size_le_hi325 000000000000000a A _kernel_flags_le_lo326 0000000000000200 A PECOFF_FILE_ALIGNMENT7 0000000000080000 A _kernel_offset_le_lo328 000000000113fdb0 A __rela_offset9 000000000136d000 A _kernel_size_le_lo3210 ffffff8008080000 t _head11 ffffff8008080000 T _text12 ffffff8008080800 T __exception_text_start13 ffffff8008080800 T _stext14 ffffff8008080800 T do_undefinstr15 ffffff8008080b0c T do_mem_abort16 ffffff8008080bd0 T do_sp_pc_abort17 ffffff8008080ccc T do_debug_exception18 ffffff8008080d98 t gic_handle_irq19 ffffff8008080e3c t gic_handle_irq20 ffffff8008080f90 T __entry_text_start21 ffffff8008080f90 T __exception_text_end22 ffffff8008081000 T vectors23 ffffff8008081784 t el0_sync_invalid24 ffffff8008081834 t el0_irq_invalid25 ffffff80080818e4 t el0_fiq_invalid26 ffffff8008081994 t el0_error_invalid27 ffffff8008081a44 t el0_fiq_invalid_compat28 ffffff8008081af8 t el0_error_invalid_compat29 ffffff8008081bac t el1_sync_invalid30 ffffff8008081c4c t el1_irq_invalid31 ffffff8008081cec t el1_fiq_invalid32 ffffff8008081d8c t el1_error_invalid33 ffffff8008081e40 t el1_sync34 ffffff8008081f14 t el1_da35 ffffff8008081f14 t el1_ia36 ffffff8008081fb4 t el1_sp_pc37 ffffff8008081fc4 t el1_undef38 ffffff8008081fd0 t el1_dbg39 ffffff8008082060 t el1_inv40 ffffff8008082080 t el1_irq41 ffffff80080821f0 t el1_preempt
……
……
……
109720 ffffff80093e6048 B cfg80211_regdomain
109721 ffffff80093e6050 b reg_crda_timeouts
109722 ffffff80093e6058 b reg_pdev
109723 ffffff80093e6060 b reg_requests_lock
109724 ffffff80093e6068 b user_alpha2
109725 ffffff80093e6070 b reg_pending_beacons_lock
109726 ffffff80093e6078 b reg_indoor_lock
109727 ffffff80093e607c b reg_is_indoor
109728 ffffff80093e6080 b reg_is_indoor_portid
109729 ffffff80093e6088 b csa_attrs.67572
109730 ffffff80093e6798 b __key.66742
109731 ffffff80093e6798 b nullstats.40117
109732 ffffff80093e67b8 b __key.61255
109733 ffffff80093e67b8 b __key.61515
109734 ffffff80093e67b8 b __key.69218
109735 ffffff80093e67b8 b __key.69219
109736 ffffff80093e67b8 b __key.69220
109737 ffffff80093e67b8 b __key.69224
109738 ffffff80093e67b8 b rfkill_no.23457
109739 ffffff80093e67c0 b rfkill_global_states
109740 ffffff80093e67d8 b __key.23501
109741 ffffff80093e67d8 b __key.23502
109742 ffffff80093e67d8 b __key.23603
109743 ffffff80093e67d8 b g_rfkill
109744 ffffff80093e67e0 b power_set_time
109745 ffffff80093e67e4 b wifi_power_state
109746 ffffff80093e67e8 b country_cloc
109747 ffffff80093e67f8 b wifi_chip_type_string
109748 ffffff80093e6838 B wifi_custom_mac_addr
109749 ffffff80093e6840 b g_rfkill
109750 ffffff80093e6848 b bt_power_state
109751 ffffff80093e6850 b bluetooth_dir
109752 ffffff80093e6858 b sleep_dir
109753 ffffff80093e6860 b empty.48655
109754 ffffff80093e68a0 b net_header
109755 ffffff80093e68a8 b klist_remove_lock
109756 ffffff80093e68b0 A __bss_stop
109757 ffffff80093e7000 A idmap_pg_dir
109758 ffffff80093ea000 A swapper_pg_dir
109759 ffffff80093ec000 A reserved_ttbr0
109760 ffffff80093ed000 A _end

这步走不通,只能用笨方法。还原逐步添加。

首先屏蔽掉自己添加的所有驱动,图中可以看到,一共添加了4个驱动,分别是adc,tlc,ioctrl,ioint。首先全部屏蔽,编译,大量测试,结果测试约100次左右没有出现任何启动失败的情况,说明问题肯定出现在这几个驱动中。然后依次添加驱动,当添加到ioctrl时,大量测试,出现了启动失败的情况,那么问题逐步缩小到了ioctrl中。

在ioctrl的文件中,有以下几个函数,全部屏蔽,依次添加测试,当添加到firefly_ioctrl_probe()函数的时候,大量测试又出现了同样的问题,说明在这个函数中存在问题。继续在这个函数中依次屏蔽测试。

此函数中初始化了几个IO引脚,依次添加测试,当添加到红绿黄灯的IO引脚控制时,问题复现。

分析该问题,初始化红绿黄引脚后,复现问题,该引脚为指示灯引脚,且该引脚在初始化之前,adc的电量检测中调用过,因此可以断定,出现该问题为引脚未初始化,被调用引起异常,解决方式即为调整驱动启动顺序或者在adc中延后调用该接口,修改后进行测试。

经过多次测试,出现该问题原因为在系统的其他函数中,调用该引脚资源,但是使用时未作判断,导致使用越界,系统崩溃。具体哪里调用仍未查出,只能使用是避免使用这三个IO口。

【RK3399 Android系统】,启动时出现”Unable to handle kernel paging request at virtual address 490000004c“的解决思路相关推荐

  1. Unable to handle kernel paging request at virtual address 的解决办法

    原文地址为: Unable to handle kernel paging request at virtual address 的解决办法 今天想正式开始编写各底层硬件的驱动程序,首先是双口RAM的 ...

  2. Unable to handle kernel paging request at virtual address 问题定位

    调试模块的时候出现这个问题,看panic 系统调用堆栈,cpu执行到连接跟踪模块那里,难道是内核模块有问题?不可能,想起之前内核奔溃的教训,问题肯定是出在自己的模块上.又重新详细看日志,看到最后一行有 ...

  3. android启动画面白屏,Android app启动时黑屏或者白屏的原因及解决办法

    1.产生原因 其实显示黑屏或者白屏实属正常,这是因为还没加载到布局文件,就已经显示了window窗口背景,黑屏白屏就是window窗口背景. 示例: 2.解决办法 通过设置设置Style (1)设置背 ...

  4. Android系统编译时集成三方APK

    1. 前言 最近在学习Android系统开发,在开发过程中可能要到将三方apk集成到系统中的需求.目前我了解的方法有两种. 一种是在系统编译完毕之后,再将三方apk文件放置到系统目录之下.参考如何将a ...

  5. Android应用启动时白色闪屏原因及解决办法

    白色闪屏现象: 如果OnCreate().onStart().onResume()中操作太多,耗时较久.那么就会在主界面显示出来之前出现白色闪屏.为了更清晰的看出白色闪屏,这里在代码中执行50000次 ...

  6. Unable to handle kernel NULL pointer dereference at virtual address 0000000d[ 435.859000] pgd = c9

    由于本人刚学驱动新手,不会太多反向操作.看了很多博主也没有解决. 经过我一个下午尝试,把代码缩减缩减在缩减之后,我发现了 先看下面的代码,有问题的代码(扫一眼就行了,估计没人看的出来) #includ ...

  7. Nvidia AGX Xavier 升级到 JetPack 4.6版本 反复打开camera导致内核出错 Unable to handle kernel NULL pointer

    这里写自定义目录标题 现象 日志显示 分析过程 解决思路 代码修改 现象 在原来 JetPack4.4 运行稳定的camera驱动,由于算法功能需要,升级到最新的JetPack4.6. 刚开始自测,功 ...

  8. Unable to handle kernel NULL pointer dereference at virtual address

    1:从sd卡出错log里可以看出来pc指针以及出错位置 PC is at dw_mci_pre_dma_transfer.isra.19+0x7c/0x158 pc : [<8032e130&g ...

  9. Unable to handle kernel NULL pointer dereference at virtual address 分析

    Unable to handle kernel NULL pointer dereference at virtual address 分析 现象 [ 136.847780] br-lan: rece ...

最新文章

  1. 【Android工具】更新手机视频流媒体客户端播放器OPlayer
  2. React 新 Context API 在前端状态管理的实践
  3. HIVE攻略 JFK_Hive安装及使用攻略
  4. React中的CSS——styled-components
  5. 2016年12月20日感想
  6. 关于十字翻转棋的解法研究
  7. CSV导入到clickhouse
  8. 线性代数史蒂文_史蒂文·弗兰克的博客国歌
  9. springboot+教学工作量管理系统 毕业设计-附源码221541
  10. N,N-二甲基十二烷基胺(CAS 112-18-5)的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  11. 网站运营手册_分享几款运营必备软件合集,欢迎补充
  12. linux调整列显示宽度,使单元格或列自动调整宽度 - 在SWT中使用OLE操纵Excel_Linux编程_Linux公社-Linux系统门户网站...
  13. 专业办公套件(Office 2019)for Mac
  14. 基于TextRank的抽取式文本摘要(英文)
  15. ubuntu安装zlib
  16. Java 执行 JS 脚本工具
  17. 新服务器或者vps如何挂载硬盘(安装硬盘)教程
  18. 《数字化的力量》入选瞭望智库“思·享读书会”推荐图书
  19. 中小企业面临“招聘难”
  20. 基于Spring Boot的学生志愿者管理系统的设计与实现

热门文章

  1. 给定4个点判断是否能构成正方形
  2. 基于jsoup的爬虫 创建多线程刷访客
  3. 矢量网络分析仪的校准及测试方法
  4. 秋交会又要来了,你的智能名片准备好了吗?
  5. Java实现第三方登录之微博登录
  6. 纽马克-贝塔法(Newmark-Beta Method)原理
  7. WSN 硬件实验平台综述——调研报告
  8. 单片机_第4章 单片机的C51语言
  9. 互联网产品经理是通才不是专才
  10. 2023年武汉大学914自动控制原理考研真题下载