0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenHarmony内核鼠标调试

OpenHarmony技术社区 来源:OST开源开发者 作者:OST开源开发者 2023-04-17 10:16 次阅读

USB鼠标插入USB2不供电问题解决

①增加 IO 控制驱动

解压 IO 控制驱动压缩包:

io_zhouke.tar.gz
复制压缩包的文件到 drivers/char/ 目录下:
tarzxvfio_zhouke.tar.gz
cpio_zhouke/*drivers/char/-avf
注释:这些文件可以在 3.1 LTS 版本中获取,复制完之后 drivers/char 目录结构如下。
-rw-rw-r--11000100013KDec1308:13id_card.cio:total28K-rw-rw-r--11000100044Jul1209:52Makefile-rw-rw-r--110001000138Dec1308:02built-in.a-rw-rw-r--1100010000Aug1706:41modules.order-rw-rw-r--1100010007.9KJul1209:52io.c-rw-rw-r--1100010002.6KJul1209:52io.h-rw-rw-r--1100010002.0KJul1209:52io_external.c-rw-rw-r--1100010004.0KJul1209:52io_stub.c
相应的修改Makefile文件,把驱动编译到内核中
drivers/char/Makefile
#SPDX-License-Identifier:GPL-2.0#
#Makefileforthekernelcharacterdevicedrivers.#
obj-y+=jy.o
obj-y+=mcu.o
+obj-y+=io///增加此行obj-y+=mem.orandom.o
obj-$(CONFIG_TTY_PRINTK)+=ttyprintk.oobj-y+=misc.o
obj-$(CONFIG_ATARI_DSP56K)+=dsp56k.o
obj-$(CONFIG_VIRTIO_CONSOLE)+=virtio_console.oobj-$(CONFIG_RAW_DRIVER)+=raw.o
obj-$(CONFIG_MSPEC)+=mspec.o
obj-$(CONFIG_UV_MMTIMER)+=uv_mmtimer.oobj-$(CONFIG_IBM_BSR)+=bsr.o
obj-$(CONFIG_PRINTER)+=lp.o
obj-$(CONFIG_APM_EMULATION)+=apm-emulation.oobj-$(CONFIG_DTLK)+=dtlk.o
obj-$(CONFIG_APPLICOM)+=applicom.o
obj-$(CONFIG_SONYPI)+=sonypi.o
obj-$(CONFIG_HPET)+=hpet.o
obj-$(CONFIG_XILINX_HWICAP)+=xilinx_hwicap/obj-$(CONFIG_NVRAM)+=nvram.o
obj-$(CONFIG_TOSHIBA)+=toshiba.o
obj-$(CONFIG_DS1620)+=ds1620.o
obj-$(CONFIG_HW_RANDOM)+=hw_random/obj-$(CONFIG_PPDEV)+=ppdev.o
obj-$(CONFIG_NWBUTTON)+=nwbutton.o
obj-$(CONFIG_NWFLASH)+=nwflash.o
obj-$(CONFIG_SCx200_GPIO)+=scx200_gpio.oobj-$(CONFIG_PC8736x_GPIO)+=pc8736x_gpio.oobj-$(CONFIG_NSC_GPIO)+=nsc_gpio.o
obj-$(CONFIG_GPIO_TB0219)+=tb0219.o
obj-$(CONFIG_TELCLOCK)+=tlclk.o
obj-$(CONFIG_MWAVE)+=mwave/
obj-y+=agp/
obj-$(CONFIG_PCMCIA)+=pcmcia/
obj-$(CONFIG_HANGCHECK_TIMER)+=hangcheck-timer.oobj-$(CONFIG_TCG_TPM)+=tpm/
obj-$(CONFIG_PS3_FLASH)+=ps3flash.oobj-$(CONFIG_XILLYBUS)+=xillybus/
obj-$(CONFIG_POWERNV_OP_PANEL)+=powernv-op-panel.oobj-$(CONFIG_ADI)+=adi.o

②增加 USB 相关支持

修改 arch/arm64/configs/rockchip_linux_defconfig:

CONFIG_USB_ACM=yCONFIG_USB_SERIAL_QT2=y
重新编译内核,此时 USB 可以正确识别鼠标生成对应的设备节点,但是鼠标还是不能正常工作。

内核崩溃问题解决

内核崩溃 log 如下:

[61.187709]kernelBUGatkernel/sched/walt.h:108![61.188143]Internalerror:Oops-BUG:0[#1]SMP[61.188573]Moduleslinkedin:
[61.188866]CPU:3PID:25Comm:migration/3Tainted:GW5.10.97#6[61.189541]Hardwarename:RockchipRK3399ExcavatorBoard(LinuxOpensource)(DT)[61.190214]pstate:80000085(NzcvdaIf-PAN-UAO-TCOBTYPE=--)
[61.190760]pc:dequeue_task_rt+0xf8/0xfc[61.191131]lr:dequeue_task_rt+0x68/0xfc[61.191497]sp:ffffffc011bd3ce0
[61.191797]x29:ffffffc011bd3ce0x28:0000000000000000[61.192281]x27:0000000000000000x26:0000000000000001[61.192765]x25:ffffffc011854000x24:ffffff800245cb00[61.193247]x23:ffffff80f779e440x22:ffffff800c799180[61.193729]x21:0000000000000000x20:ffffff800c798f00[61.194211]x19:ffffff80f779e440x18:00000000ffff1020[61.194693]x17:0000000000000000x16:00000000000000e0[61.195176]x15:ffffffc010645160x14:000000000000006c[61.195658]x13:ffffffc0100a2f8cx12:0000000000000000[61.196140]x11:0000000000000001x10:ffffffc010f7be28[61.196622]x9:0000000000000002x8:ffffffffffffffd8[61.197104]x7:6e6f636e69203a69x6:ffffffc011908110[61.197586]x5:0000000000000004x4:0000000000000001[61.198067]x3:0000000000000000x2:0000000000000000[61.198550]x1:0000000000000000x0:ffffff80f779e800[61.199034]Calltrace:[61.199264]dequeue_task_rt+0xf8/0xfc[61.199608]dequeue_task+0xbc/0x2c4[61.199935]deactivate_task+0x28/0x34[61.200278]rt_active_load_balance_cpu_stop+0x90/0x150[61.200749]cpu_stopper_thread+0xac/0x154[61.201119]smpboot_thread_fn+0x100/0x190[61.201491]kthread+0x11c/0x174[61.201787]ret_from_fork+0x10/0x30[61.202117]Code:f9400bf7a8c47bfdd50323bfd65f03c0(d4210000)[61.202662]---[endtrace72c26b1564636cfc]---[61.203076]Kernelpanic-notsyncing:Oops-BUG:Fatalexception[61.203639]SMP:stoppingsecondaryCPUs[62.370663]SMP:failedtostopsecondaryCPUs1,3-5[62.371105]CRU:[62.371291]00000000:0000004b0000130180000000000001080000000700007f000000000000000000[62.372052]00000020:0000004b0000110180000000000001080000000700007f000000000000000000[62.372812]00000040:0000006b000013018000031f000001080000000700007f000000000000000000[62.373573]00000060:0000008b000016048000031f000001080000000700007f000000000000000000
......

只需要修改 arch/arm64/configs/rockchip_linux_defconfig 文件,注释掉以下内容即可(此修改包含第二部分 USB 支持):

< CONFIG_PSI=y
---
>CONFIG_PSI=y98c98
< CONFIG_SCHED_RUNNING_AVG=y
---
>CONFIG_SCHED_RUNNING_AVG=y100c100
< CONFIG_SCHED_CORE_CTRL=y
---
>CONFIG_SCHED_CORE_CTRL=y139c139
< #CONFIG_SCHED_EAS=y
---
>CONFIG_SCHED_EAS=y4395c4395
< CONFIG_USB_ACM=y
---
>#CONFIG_USB_ACMisnotset4433c4433
< #CONFIG_USB_DWC3_HOST=y
---
>#CONFIG_USB_DWC3_HOSTisnotset4511c4511
< CONFIG_USB_SERIAL_QT2=y
---
>#CONFIG_USB_SERIAL_QT2isnotset
注释:红色内容为修改后的文件。解决上边崩溃问题只需要关闭 CONFIG_SCHED_EAS 一个配置即可。

①CONFIG_PSI

PSI (Pressure Stall Information) 机制,其核心思想是:如果有进程因为等待某种资源而 stall 了,那说明这个时候资源成了一个限制条件(生产资料的短缺导致了生产力的损失),那就应该适当增加分配给这个进程的资源。 在部署业务时,如果过于保守地追求安全,那资源往往得不到充分的利用,造成浪费,在成本上丧失竞争力。 而如果对资源进行过饱和使用(比如内存的 overcommit),又可能导致运行过程中的波动(spike),影响延迟敏感型的任务,甚至最终不得不走向 OOM。

所谓人尽其才,物尽其用,Linux 中 PSI 的目标就是让硬件资源的效能最大化。

②CONFIG_SCHED_RUNNING_AVG

用于确定平均运行队列的调度程序接口

③CONFIG_SCHED_CORE_CTRL

OpenHarmony CPU 轻量级隔离特性介绍。 基本概念 CPU 轻量级隔离特性提供了根据系统负载和用户配置来选择合适的 CPU 进行动态隔离的能力。 内核会将被隔离 CPU 上的任务和中断迁移到其他合适的 CPU 上执行,被隔离的 CPU 会进入 ilde 状态,以此来达到功耗优化的目标。同时提供用户的配置和查询接口来实现更好的系统调优。 配置指导 使能 CPU 轻量级隔离特性:打开相关配置项及依赖。启用 CPU 轻量级隔离,需要通过编译内核时打开相应的配置项及依赖,相关 CONFIG 如下。

④CONFIG_SCHED_EAS

能量感知调度(EAS)使调度程序能够预测其决策对 CPU 消耗的电量的影响。 EAS 依赖于 CPU的能量模型 (EM) 来为每个任务选择省电的 CPU,同时要求对执行任务的吞吐量的影响最小。 EAS 仅在异构 CPU 架构上(例如 Arm big.LITTLE)上运行,因为这是通过调度器节省电量的效果最大的地方。

多模子系统服务加载错误

错误日志 log:

[pid=1][Init][ERROR][init_signal_handler.c:42]
Childprocessmultimodalinput(pid1351)exitwithsignal:11[pid=1][Init][INFO][init_signal_handler.c:51]
SigHandler,SIGCHLDreceived,Service:multimodalinputpid:1351uid:6696status:11.[pid=1][Init][INFO][init_common_service.c:497]
Reapservicemultimodalinput,pid1351.[pid=1][Init][ERROR][init_common_service.c:540]
Servicename=multimodalinput,crash4times,nomorestart.
修改foundation/multimodalinput/input/service/window_manager/src/input_windows_manager.cpp文件
diff--gita/service/window_manager/src/input_windows_manager.cppb/service/window_manager/src/iindex1be96f7..6146c01100644
---a/service/window_manager/src/input_windows_manager.cpp
+++b/service/window_manager/src/input_windows_manager.cpp@@-229,6+229,7@@
int32_tlogicX=mouseLocation.physicalX+displayInfo->x;int32_tlogicY=mouseLocation.physicalY+displayInfo->y;std::optionalwindowInfo;
+CHKPV(lastPointerEvent_);
if(lastPointerEvent_->GetPointerAction()==PointerEvent::POINTER_ACTION_MOVE&&lastPointerEvent_->GetPressedButtons().empty()){
windowInfo=GetWindowInfo(logicX,logicY);@@-396,6+397,7@@
{
CALL_INFO_TRACE;
std::optionalwindowInfo;
+CHKPV(lastPointerEvent_);
if(lastPointerEvent_->GetPointerAction()==PointerEvent::POINTER_ACTION_MOVE&&lastPointerEvent_->GetPressedButtons().empty()){
windowInfo=GetWindowInfo(lastLogicX_,lastLogicY_);

总结

经过以上修改之后,系统完全启动进入桌面之后,输入 power-shell setmode 602 命令,设置电源模式,防止系统重启,鼠标可正常工作。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内核
    +关注

    关注

    3

    文章

    1309

    浏览量

    39846
  • usb
    usb
    +关注

    关注

    59

    文章

    7432

    浏览量

    258161
  • 鼠标
    +关注

    关注

    5

    文章

    576

    浏览量

    39195
  • 调试
    +关注

    关注

    7

    文章

    527

    浏览量

    33625
  • OpenHarmony
    +关注

    关注

    23

    文章

    3290

    浏览量

    15159

原文标题:OpenHarmony内核鼠标调试

文章出处:【微信号:gh_834c4b3d87fe,微信公众号:OpenHarmony技术社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    [HarmonyOS][鸿蒙专栏开篇]快速入门OpenHarmony的LiteOS微内核

    ://openharmony.gitee.com]仓库本专栏主要分析`OpenHarmony`内核的相关代码:Cortex-A系列处理器内核:[kernel_liteos_a](htt
    发表于 09-14 19:40

    OpenHarmony LiteOS-A内核介绍

    简介OpenHarmony LiteOS-A内核是基于Huawei LiteOS内核演进发展的新一代内核,Huawei LiteOS是面向IoT领域构建的轻量级物联网操作系统。在IoT
    发表于 08-19 10:46

    OpenHarmony支持的系统类型及内核

    本文介绍OpenHarmony所不同的系统类型以及支持的内核。系统类型OpenHarmony支持以下几种系统类型:轻量系统(迷你系统)给定的有限MCU类处理器例如Arm Cortex-M
    发表于 04-19 11:29

    【学习打卡】OpenHarmony内核层介绍

    在介绍OpenHarmony内核层之前,我们先介绍一下内核的概念,内核是操作系统的核心组件,是计算机物理硬件与运行在其上的进程之间的主要接口。内核
    发表于 07-12 09:07

    OpenHarmony内核学习[1]--单独编译OpenHarmony标准系统内核

    内核是操作系统的核心,学习掌握OpenHarmony内核对于开发人员至关重要。笔者整理学习OpenHarmony标准系统内核笔记如下:阅读本
    发表于 02-03 10:46

    OpenHarmony 内核鼠标

    /configs/rockchip_linux_defconfig CONFIG_USB_ACM=y CONFIG_USB_SERIAL_QT2=y 1. 复制 重新编译内核,此时USB可以正确识别鼠标生成
    发表于 05-11 09:23

    学会Linux内核调试方法!

    内核开发比用户空间开发更难的一个因素就是内核调试艰难。内核错误往往会导致系统宕机,很难保留出错时的现场。调试
    发表于 05-07 11:01 2179次阅读

    Linux:QEMU调试内核的步骤

    Linux:QEMU调试内核的步骤
    的头像 发表于 06-23 09:03 2887次阅读
    Linux:QEMU<b class='flag-5'>调试</b><b class='flag-5'>内核</b>的步骤

    浅谈OpenHarmony内核以及OpenHarmony开发语言

    、java、Python、C++ 等等。 OpenHarmony内核有两个,一个是liteos_A另一个是lite_M。 要说这俩有啥区别呢?按照我个人的理解大概就是liteos_A 是ARM架构
    的头像 发表于 06-24 09:47 3479次阅读

    OpenHarmony内核是什么

    OpenHarmony源码里面包含两个内核代码,分别是liteos_A和lite_M。
    的头像 发表于 06-24 10:08 2573次阅读

    嵌入式LINUX系统内核内核模块调试

    嵌入式LINUX系统内核内核模块调试(嵌入式开发和硬件开发)-嵌入式LINUX系统内核内核模块调试
    发表于 07-30 13:55 9次下载
    嵌入式LINUX系统<b class='flag-5'>内核</b>和<b class='flag-5'>内核</b>模块<b class='flag-5'>调试</b>

    OpenHarmony内核任务间IPC原理

    身为深开鸿 OS 内核开发师,我们常年深耕于 OpenHarmony内核开发,希望通过分享一些工作上的经验,帮助大家掌握开源知识。
    的头像 发表于 07-12 16:45 1364次阅读

    议程抢鲜看|OpenHarmony技术峰会——OS内核及视窗分论坛

    点击蓝字 ╳ 关注我们 开源项目 OpenHarmony 是每个人的 OpenHarmony 原文标题:议程抢鲜看|OpenHarmony技术峰会——OS内核及视窗分论坛 文章出处:【
    的头像 发表于 02-23 18:50 449次阅读

    Linux内核调试的方式以及工具汇总(下)

    内核总是那么捉摸不透, 内核也会犯错, 但是调试却不能像用户空间程序那样, 为此内核开发者为我们提供了一系列的工具和系统来支持内核
    的头像 发表于 05-12 14:59 959次阅读
    Linux<b class='flag-5'>内核</b><b class='flag-5'>调试</b>的方式以及工具汇总(下)

    OpenHarmony内核编程实战

    编写程序,让开发板在串口调试工具中输出”Hello,OpenHarmony“。▍操作在源码的根目录中有名为”applications“的文件,他存放着应用程序样例
    的头像 发表于 03-27 08:31 118次阅读
    <b class='flag-5'>OpenHarmony</b><b class='flag-5'>内核</b>编程实战