
解压IO控制驱动压缩包io_zhouke.tar.gz。
复制压缩包的文件到drivers/char/目录下。
tar zxvf io_zhouke.tar.gz
cp io_zhouke/* drivers/char/ -avf注释:这些文件可以在3.1LTS版本中获取,复制完之后drivers/char目录结构如下:
-rw-rw-r-- 1 1000 1000 13K Dec 13 08:13 id_card.c io:total 28K-rw-rw-r-- 1 1000 1000 44 Jul 12 09:52 Makefile -rw-rw-r-- 1 1000 1000 138 Dec 13 08:02 built-in.a -rw-rw-r-- 1 1000 1000 0 Aug 17 06:41 modules.order -rw-rw-r-- 1 1000 1000 7.9K Jul 12 09:52 io.c -rw-rw-r-- 1 1000 1000 2.6K Jul 12 09:52 io.h -rw-rw-r-- 1 1000 1000 2.0K Jul 12 09:52 io_external.c -rw-rw-r-- 1 1000 1000 4.0K Jul 12 09:52 io_stub.c
相应的修改Makefile文件,把驱动编译到内核中
drivers/char/Makefile
# SPDX-License-Identifier: GPL-2.0 #
# Makefile for the kernel character device drivers. #
obj-y += jy.o
obj-y += mcu.o
+ obj-y += io/ //增加此行 obj-y += mem.o random.o
obj-$(CONFIG_TTY_PRINTK) += ttyprintk.o obj-y += misc.o
obj-$(CONFIG_ATARI_DSP56K) += dsp56k.o
obj-$(CONFIG_VIRTIO_CONSOLE) += virtio_console.o obj-$(CONFIG_RAW_DRIVER) += raw.o
obj-$(CONFIG_MSPEC) += mspec.o
obj-$(CONFIG_UV_MMTIMER) += uv_mmtimer.o obj-$(CONFIG_IBM_BSR) += bsr.o
obj-$(CONFIG_PRINTER) += lp.o
obj-$(CONFIG_APM_EMULATION) += apm-emulation.o obj-$(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.o obj-$(CONFIG_PC8736x_GPIO) += pc8736x_gpio.o obj-$(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.o obj-$(CONFIG_TCG_TPM) += tpm/
obj-$(CONFIG_PS3_FLASH) += ps3flash.o obj-$(CONFIG_XILLYBUS) += xillybus/
obj-$(CONFIG_POWERNV_OP_PANEL) += powernv-op-panel.o obj-$(CONFIG_ADI) += adi.o修改 arch/arm64/configs/rockchip_linux_defconfig。
CONFIG_USB_ACM=y CONFIG_USB_SERIAL_QT2=y重新编译内核,此时USB可以正确识别鼠标生成对应的设备节点,但是鼠标还是不能正常工作。
内核崩溃log如下:
[ 61.187709] kernel BUG at kernel/sched/walt.h:108! [ 61.188143] Internal error: Oops - BUG: 0 [#1] SMP [ 61.188573] Modules linked in:
[ 61.188866] CPU: 3 PID: 25 Comm: migration/3 Tainted: G W 5.10.97 #6 [ 61.189541] Hardware name: Rockchip RK3399 Excavator Board (Linux Opensource) (DT) [ 61.190214] pstate: 80000085 (Nzcv daIf -PAN -UAO -TCO BTYPE=--)
[ 61.190760] pc : dequeue_task_rt+0xf8/0xfc [ 61.191131] lr : dequeue_task_rt+0x68/0xfc [ 61.191497] sp : ffffffc011bd3ce0
[ 61.191797] x29: ffffffc011bd3ce0 x28: 0000000000000000 [ 61.192281] x27: 0000000000000000 x26: 0000000000000001 [ 61.192765] x25: ffffffc011854000 x24: ffffff800245cb00 [ 61.193247] x23: ffffff80f779e440 x22: ffffff800c799180 [ 61.193729] x21: 0000000000000000 x20: ffffff800c798f00 [ 61.194211] x19: ffffff80f779e440 x18: 00000000ffff1020 [ 61.194693] x17: 0000000000000000 x16: 00000000000000e0 [ 61.195176] x15: ffffffc010645160 x14: 000000000000006c [ 61.195658] x13: ffffffc0100a2f8c x12: 0000000000000000 [ 61.196140] x11: 0000000000000001 x10: ffffffc010f7be28 [ 61.196622] x9 : 0000000000000002 x8 : ffffffffffffffd8 [ 61.197104] x7 : 6e6f636e69203a69 x6 : ffffffc011908110 [ 61.197586] x5 : 0000000000000004 x4 : 0000000000000001 [ 61.198067] x3 : 0000000000000000 x2 : 0000000000000000 [ 61.198550] x1 : 0000000000000000 x0 : ffffff80f779e800 [ 61.199034] Call trace: [ 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: f9400bf7 a8c47bfd d50323bf d65f03c0 (d4210000) [ 61.202662] ---[ end trace 72c26b1564636cfc ]--- [ 61.203076] Kernel panic - not syncing: Oops - BUG: Fatal exception [ 61.203639] SMP: stopping secondary CPUs [ 62.370663] SMP: failed to stop secondary CPUs 1,3-5 [ 62.371105] CRU: [ 62.371291] 00000000: 0000004b 00001301 80000000 00000108 00000007 00007f00 00000000 00000000 [ 62.372052] 00000020: 0000004b 00001101 80000000 00000108 00000007 00007f00 00000000 00000000 [ 62.372812] 00000040: 0000006b 00001301 8000031f 00000108 00000007 00007f00 00000000 00000000 [ 62.373573] 00000060: 0000008b 00001604 8000031f 00000108 00000007 00007f00 00000000 00000000
......只需要修改 arch/arm64/configs/rockchip_linux_defconfig 文件,注释掉以下内容即可(此修改包含第二部分USB支持):
< CONFIG_PSI=y
---
>CONFIG_PSI=y 98c98
< CONFIG_SCHED_RUNNING_AVG=y
---
>CONFIG_SCHED_RUNNING_AVG=y 100c100
< CONFIG_SCHED_CORE_CTRL=y
---
>CONFIG_SCHED_CORE_CTRL=y 139c139
< #CONFIG_SCHED_EAS=y
---
>CONFIG_SCHED_EAS=y 4395c4395
< CONFIG_USB_ACM=y
---
># CONFIG_USB_ACM is not set 4433c4433
< #CONFIG_USB_DWC3_HOST=y
---
># CONFIG_USB_DWC3_HOST is not set 4511c4511
< CONFIG_USB_SERIAL_QT2=y
---
># CONFIG_USB_SERIAL_QT2 is not set注释:红色内容为修改后的文件。解决上边崩溃问题只需要关闭 CONFIG_SCHED_EAS 一个配置即可。
PSI (Pressure Stall Information) 机制,其核心思想是:如果有进程因为等待某种资源而 stall 了,那说明这个时候资源成了一个限制条件(生产资料的短缺导致了生产力的损失),那就应该适当增加分配给这个进程的资源。
在部署业务时,如果过于保守地追求安全,那资源往往得不到充分的利用,造成浪费,在成本上丧失竞争力。而如果对资源进行过饱和使用(比如内存的 overcommit),又可能导致运行过程中的波动(spike),影响延迟敏感型的任务,甚至最终不得不走向 OOM。
所谓人尽其才,物尽其用,Linux 中 PSI 的目标就是让硬件资源的效能最大化。
用于确定平均运行队列的调度程序接口。
CPU轻量级隔离特性提供了根据系统负载和用户配置来选择合适的CPU进行动态隔离的能力。内核会将被隔离CPU上的任务和中断迁移到其他合适的CPU上执行,被隔离的CPU会进入ilde状态,以此来达到功耗优化的目标。同时提供用户的配置和查询接口来实现更好的系统调优。
打开相关配置项及依赖。启用CPU轻量级隔离,需要通过编译内核时打开相应的配置项及依赖,相关CONFIG如下:
能量感知调度(EAS)使调度程序能够预测其决策对 CPU 消耗的电量的影响。EAS 依赖于 CPU的能量模型 (EM) 来为每个任务选择省电的 CPU,同时要求对执行任务的吞吐量的影响最小。
EAS 仅在异构 CPU 架构上(例如 Arm big.LITTLE)上运行,因为这是通过调度器节省电量的效果最大的地方。
错误日志log:
[pid=1][Init][ERROR][init_signal_handler.c:42]
Child process multimodalinput(pid 1351) exit with signal : 11 [pid=1][Init][INFO][init_signal_handler.c:51]
SigHandler, SIGCHLD received, Service:multimodalinput pid:1351 uid:6696 status:11. [pid=1][Init][INFO][init_common_service.c:497]
Reap service multimodalinput, pid 1351. [pid=1][Init][ERROR][init_common_service.c:540]
Service name=multimodalinput, crash 4 times, no more start.
修改 foundation/multimodalinput/input/service/window_manager/src/input_windows_manager.cpp 文件
diff --git a/service/window_manager/src/input_windows_manager.cpp b/service/window_manager/src/i index 1be96f7..6146c01 100644
--- a/service/window_manager/src/input_windows_manager.cpp
+++ b/service/window_manager/src/input_windows_manager.cpp @@ -229,6 +229,7 @@
int32_t logicX = mouseLocation.physicalX + displayInfo->x; int32_t logicY = mouseLocation.physicalY + displayInfo->y; std::optional<WindowInfo> windowInfo;
+ CHKPV(lastPointerEvent_);
if (lastPointerEvent_->GetPointerAction() == PointerEvent::POINTER_ACTION_MOVE && lastPointerEvent_->GetPressedButtons().empty()) {
windowInfo = GetWindowInfo(logicX, logicY); @@ -396,6 +397,7 @@
{
CALL_INFO_TRACE;
std::optional<WindowInfo> windowInfo;
+ CHKPV(lastPointerEvent_);
if (lastPointerEvent_->GetPointerAction() == PointerEvent::POINTER_ACTION_MOVE && lastPointerEvent_->GetPressedButtons().empty()) {
windowInfo = GetWindowInfo(lastLogicX_, lastLogicY_);经过以上修改之后,系统完全启动进入桌面之后,输入 power-shell setmode 602 命令,设置电源模式,防止系统重启,鼠标可正常工作。
GivenIamadumbprogrammerandIamusingrspecandIamusingsporkandIwanttodebug...mmm...let'ssaaay,aspecforPhone.那么,我应该把“require'ruby-debug'”行放在哪里,以便在phone_spec.rb的特定点停止处理?(我所要求的只是一个大而粗的箭头,即使是一个有挑战性的程序员也能看到:-3)我已经尝试了很多位置,除非我没有正确测试它们,否则会发生一些奇怪的事情:在spec_helper.rb中的以下位置:require'rubygems'require'spork'
使用Ruby1.9.2运行IDE提示说需要gemruby-debug-base19x并提供安装它。但是,在尝试安装它时会显示消息Failedtoinstallgems.Followinggemswerenotinstalled:C:/ProgramFiles(x86)/JetBrains/RubyMine3.2.4/rb/gems/ruby-debug-base19x-0.11.30.pre2.gem:Errorinstallingruby-debug-base19x-0.11.30.pre2.gem:The'linecache19'nativegemrequiresinstall
我有:When/^(?:|I)follow"([^"]*)"(?:within"([^"]*)")?$/do|link,selector|with_scope(selector)doclick_link(link)endend我打电话的地方:Background:GivenIamanexistingadminuserWhenIfollow"CLIENTS"我的HTML是这样的:CLIENTS我一直收到这个错误:.F-.F--U-----U(::)failedsteps(::)nolinkwithtitle,idortext'CLIENTS'found(Capybara::Element
Ruby是否有逐步调试器,类似于Perl的“perl-d”? 最佳答案 ruby-debug(对于ruby1.8),debugger(对于ruby1.9),byebug(对于ruby2.0)以及trepanning系列都有一个-x或--trace选项。在调试器内部,命令setlinetrace将打开或关闭线路跟踪。这是themanualforruby-debug原来的答案已经修改,因为数据噪声文章的链接,唉,不再有效了。还添加了ruby-debug的后继者 关于ruby-Ruby
在Ruby(1.8.X)中为什么Object既继承了内核又包含了内核?仅仅继承还不够吗?irb(main):006:0>Object.ancestors=>[Object,Kernel]irb(main):005:0>Object.included_modules=>[Kernel]irb(main):011:0>Object.superclass=>nil请注意,在Ruby1.9中情况类似(但更简洁):irb(main):001:0>Object.ancestors=>[Object,Kernel,BasicObject]irb(main):002:0>Object.included
文章目录一、项目场景二、基本模块原理与调试方法分析——信源部分:三、信号处理部分和显示部分:四、基本的通信链路搭建:四、特殊模块:interpretedMATLABfunction:五、总结和坑点提醒一、项目场景 最近一个任务是使用simulink搭建一个MIMO串扰消除的链路,并用实际收到的数据进行测试,在搭建的过程中也遇到了不少的问题(当然这比vivado里面的debug好不知道多少倍)。准备趁着这个机会,先以一个很基本的通信链路对simulink基础和相关的debug方法进行总结。 在本篇中,主要记录simulink的基本原理和基本的SISO通信传输链路(QPSK方式),计划在下篇记
我已经开始使用RubyMine6。我正在处理Rails4、Ruby2.1.1项目。我无法找到如何使用Pow作为服务器调试到RubyMine。你能给我指明正确的方向吗? 最佳答案 我能够使用远程调试从RubyMine进行调试。我正在使用RubyMine6、Rails3、Ruby2.1.1。首先创建一个.powenv文件并添加:exportRUBY_DEBUG_PORT=1234exportPOW_WORKERS=1将以下gem添加到您的Gemfile:gem'ruby-debug-ide'gem'debase'创建一个新的初始化器st
当我编写代码时,我非常频繁地使用“puts”语句进行调试。它允许我查看服务器中发生的情况。在调试代码的时候,不知道是什么原因,我把这些“puts”语句去掉了。这是个好主意还是我应该保留它们以使我的服务器日志更加清晰? 最佳答案 您应该使用记录器而不是puts。使用这种语句:Rails.logger.debug"DEBUG:#{self.inspect}#{caller(0).first}"ifRails.logger.debug?如果您想(几乎)实时查看调试,只需在另一个终端窗口中使用tail命令:tail-Flog/develop
我试图在我的RubyonRails应用程序中调试一个极其缓慢的请求调用。我已设法根据自己的喜好优化Controller方法,Rails的日志告诉我它已在XX毫秒内完成操作(Completed200OKin5049ms(Views:34.9ms|ActiveRecord:76.3ms)).但是,在加载页面时,在浏览器中实际呈现任何内容之前打印此消息很长;最多约15秒的等待时间。Rackmini-profiler证实了这一点,告诉我GET操作(不计算完成Controller操作所花费的时间)花费了14秒左右。(分析器还确认Controller操作的执行时间约为5秒)。我可以接受Contro
假设我在调试时停在了点上:defget_databyebug=>@cache||=calculate_dataend而@cache有值,所以step函数calculate_data不会被执行。但是我需要在这个确切的运行时点检查calculate_data内部发生了什么。我可以只执行calculate_data并在控制台输出中查看其结果,但是我可以从调试控制台执行函数并同时进入它?(使用byebug或其他一些调试工具)。目标-是在任意时间检查calculate_data逻辑,特别是当get_data调用时@cache已填充。 最佳答案