- 博客(366)
- 收藏
- 关注
原创 ZYNQ-7020(AX7020)AMP 异构双核:软件延迟与抖动测量
软件抖动本质上是定时器中断发生到我们的应用程序开始执行,这中间的差值。理想情况下,这个差值每次都应该一样。但在 Linux 系统下,定时器中断会被更高优先级的事件抢占,导致从定时器中断发生到 CPU 执行我们指定的软件之间,这个差值每次不同、波动较大,这就是软件抖动。拿到裸机下的软件抖动数据,与 Linux 做对比,比较两者差距是有意义的。硬件测量定时器每次反转触发GPIO1电平波动,同时flag + 1。主函数收到flag后,执行完delay延迟再反转GPIO2。GPIO1和GPIO2。
2026-10-27 16:23:09
218
原创 Rk3568驱动开发_iic_17
iic驱动kernel已经写好了直接用即可,需要操作的地方在于用i2c驱动接口调用光敏传感器的数据,这个是驱动开发者要做的点。3.在节点中配合i2c驱动接口初始化光敏传感器、读光敏传感器数据。在i2c总线中定义光敏传感器节点已经光敏传感器地址0x1e。1.首先要告诉i2c,光敏传感器的地址(设备树)应用层通过调用自己写好的设备驱动来读取传感器信息。设备驱动中用内核写好的i2c总线与传感器通信。4.用户层调用光敏传感器设备节点,读取数据。2.创建光敏传感器设备节点。
2025-12-24 19:06:16
285
原创 Rk3568驱动开发_非阻塞IO_16
用于将文件描述符加入队列,当文件描述符能用的时候,用于唤醒应用层的select函数,否则select函数,就一直处于阻塞状态,key_poll用于判断此文件描述符可不可用,根据return的值去判断文件描述符状态,如果可用,poll_wait会唤醒应用层select函数,去继续执行下面层序,否者根据需要,会选择等待和阻塞程序。应用层调用select函数,应用层会去调用驱动层poll函数实现接口。
2025-07-21 20:17:36
398
原创 Rk3568驱动开发_阻塞IO_15
按键未被操作ret = wait_event_interruptible(key.r_wait, KEY_KEEP!会休眠程序,按键被操作后触发上升沿或下降沿,进入定时器、进入中断后唤醒程序,将键值发送给用户。驱动中应用层循环读取按键状态耗费太多cpu资源,期望在按键未被操作时以阻塞形式让程序休眠,待按键被操作时,唤醒读取数据给应用层。
2025-07-09 17:05:49
363
原创 Rk3568驱动开发_中断_14
设备树中给gpio口配置的是上升沿和下降沿都会触发中断,驱动中key_interrupt为中断处理函数,中断产生后会进入这个函数做延时操作mod_timer是定时器操作,定时结束后会进入,驱动中注册好的定时器处理函数key_timer_function 在这里读取按键值key_read 将值发送给用户。给gpio添加中断功能。
2025-07-07 14:50:17
298
原创 Rk3568驱动开发_Key驱动_13
补全read函数,应用层调用read命令后读取到驱动发送的数据。注册节点,将信息写入设备,方便后续驱动读取设备。
2025-06-26 19:19:51
379
原创 Linux项目交叉编译
注意要配置软件链接,类似快捷方式,因为项目依赖libreadline.so识别不出libreadline.so.8所以用ln -s [源文件路径] [目标软连接路径] 创建链接,方便Makefile引导 ,注意动态库是arm架构的不然交叉编译不了。.c文件需要依赖上述头文件,需要添加上述依赖文件源码。x86系统上编写代码,想部署到arm架构设备上运行。需要将gcc换成arm64架构的交叉编译器。将动态库和可执行文件分别移植到设备中。将动态库移植到要交叉编译的项目中。
2025-06-19 15:08:41
481
原创 can通信传输bz2文件损坏解决方法
代码中使用fgets打开文件进行读取传输,fgets适合传输文本信息,读取二进制数据有的字符无法读到,故接收端文件损坏。利用can传输文本文件,但是传输压缩包文件会显示文件损坏。打开文件采用fread函数即可读取二进制,又可读取文本。can通信每次传输8个字节数据。
2025-06-09 13:58:58
236
原创 Rk3568驱动开发_GPIO点亮LED_12
驱动中需要读取上述gpioled设备节点找到对应的引脚,向内核申请这个引脚的使用权gpio_request(gpioled.led_gpio, “LED-GPIO”);这样能防止多个驱动程序抢夺一个引脚问题,申请使用权成功后就能使用Linux自带的GPIO函数了ret = gpio_direction_output(gpioled.led_gpio, 0);然后就是在/dev目录下创建设备节点了,创建设备节点分为:创建设备号、初始化并添加字符驱动、创建类、创建设备。可以用cat读取相关信息。
2025-05-31 19:23:21
760
原创 Rk3568驱动开发_设备树点亮LED_11
代码中通过读取alphaled节点数据,alphaled中存放的是led灯引脚地址,这样led灯引脚发生变化,只需要更改设备树中地址的具体值,无需更改代码。
2025-05-26 16:56:12
777
原创 vscode ssh连接ubantu显示管道不存在,VMware Virtual Ethernet Adapter for VMnet8不存在
2、查看网络适配器发现没有VMware Virtual Ethernet Adapter。3、设备管理器中VMware Virtual Ethernet Adapter带感叹号。4、主机ping ubantu无法ping通,但ubantu可以上网。1、首先是vscode ssh连接ubantu失败显示管道不存在。重启虚拟机,勾选将主机虚拟虚拟适配器连接到此网络然后应用即可。主机能ping通虚拟机即可,再次做ssh连接即可成功。大概率原因是因为你有太多无用注册表,需要清理。
2025-03-25 21:30:04
453
原创 Rk3568驱动开发_设备树点亮LED_10
在设备树文件中添加led节点,添加完后需要重新编译内核,因为单独编译这个设备树文件生成的dtb文件目前不能直接做替换,所以要编译内核将编译好的boot.img文件烧录到设备里,boot.img里包含新添加的设备树节点,注意zboot.img没有设备树。
2025-03-24 21:29:29
455
原创 Rk3568驱动开发_设备树_9
{ 为根节点,代表设备树的起点,compatible:这是设备树中非常重要的属性,用于标识设备的兼容性,“rockchip,rk3568-evb1-ddr4-v10”:这是第一个兼容性字符串,表示该设备树描述的是 Rockchip RK3568 的开发板 EVB1 DDR4 V10 版本。外设设备:reg 属性包含地址和大小部分,因为外设设备的寄存器区域需要定义一个地址范围,以便内核能够正确地访问这些寄存器。<0x0 0x100>:这是一个由两个单元组成的地址值,每个单元是 32 位(4 字节)。
2025-03-20 17:08:33
1326
原创 计算机组成相关知识
它的宽度决定了一次可以传输的数据量,比如32位数据总线一次可以传输4个字节的数据。重要性:控制总线用于传输控制信号,这些信号指导和同步系统中各部件的操作。作用:数据总线是系统中数据流通的通道,无论是从内存读取数据还是向内存写入数据,或是与外设交换数据,都需要通过数据总线进行。作用:在访问内存或外设时,CPU通过地址总线发送地址信息,以确保数据可以被正确地发送到或从指定位置读取。作用:控制总线使得CPU能够控制内存和外设的操作,如发起读操作或写操作,以及处理中断等。控制总线(Control Bus,CB)
2025-03-18 21:23:02
562
原创 vscode错误:Unable to connect to VS Code server: Error in request.
【代码】vscode错误:Unable to connect to VS Code server: Error in request.
2025-03-13 09:06:46
401
原创 vscode通过ssh远程连接(linux系统)不能跳转问题
注意:有网的条件下主机下载插件后ubantu会相应下载不用移植,没有网络的条件下,需要将下载好的插件移植到unbantu的对应上述目录就可以使用。
2025-03-03 13:06:00
1738
原创 Rk3568驱动开发_自动创建设备节点_8
在 Linux 驱动开发中,通过 class_create 和 device_create 函数自动在 /dev 下创建设备节点的过程,本质上是利用了内核的 sysfs 文件系统 和 udev 用户空间守护进程 的协同机制。调用 class_create 会为设备驱动创建一个类(Class),该类的信息会被注册到 /sys/class 目录下。例如,代码中 NEWCHRLED_NAME 对应的类会在 /sys/class 下生成一个同名目录(如 /sys/class/newchrled)
2025-03-01 21:18:56
733
原创 Rk3568驱动开发_点亮led灯代码完善(手动挡)_6
open函数在驱动中属于可选实现,而write/read等函数则是必须实现的。由于最开始设备led灯会闪烁,应该是有这个驱动用echo 0 > /sys/class/leds/work/brightness命令关闭后再挂载驱动。驱动的.open函数是设备初始化的入口,但不影响文件描述符的分配机制。文件描述符的返还是内核的默认行为,仅当驱动.open返回错误时,内核会撤销分配。配置和读写操作的时候要谨慎,比如先关掉gpio再注销掉虚拟内存否则照成内存泄漏设备直接死机(别问我怎么知道的)
2025-02-26 21:50:22
786
原创 Rk3568驱动开发_点亮led灯(手动挡)_5
stm32没有这个MMU其控制gpio直接操作寄存器就行,在linux上由于这个内存映射在,需要知道真实物理地址,反推其虚拟地址才能像stm32一样操作寄存器。
2025-02-26 20:30:45
593
原创 Rk3568驱动开发_完善字符驱动_4
用户层在调用open函数打开设备节点后,应用层上的write和read函数调用的是我们自己实现的驱动函数,同理在linux操作系统上调用write和read函数去操作txt文件的时候调用的是系统实现的函数应用层没办法直接读取或写入数据到内核里,所以要借助接口函数copy_to_user、copy_from_user函数去做app层往内核写数据要注意安全严谨,容易发生缓冲区溢出。
2025-02-25 22:45:33
497
原创 Rk3568驱动开发_驱动实现流程以及本质_3
Linux中为何一切皆文件?open函数打开txt文件调用的是读取txt文件的函数,open函数打开串口是调用串口的驱动函数,打开chrdevbase文件就是调用我们自己写的驱动函数,也就是说每一个设备都有其对应的实现驱动模块,open打开他的时候就会去调用这个接口,我们要做的就是实现这些驱动的接口,创建一个节点/dev节点也就是所谓文件,open调用这个文件的时候能正确的调用我们的驱动模块,实现我们的目的。
2025-02-24 23:38:05
1017
1
原创 Rk3568驱动开发_驱动编写和挂载_2
file_operations通过接口抽象简化了系统调用与驱动的交互,而硬件初始化(如时钟配置)由底层框架或库函数自动处理,开发者只需关注核心逻辑(如GPIO引脚配置和数据传输)
2025-02-23 22:04:30
655
原创 Rk3568驱动开发_开发环境的搭建_1
Linux系统镜像文件通常是多个模块的集合,不同镜像封装不同功能组件,常见类型包括:引导镜像(如u-boot.img)封装内容:引导加载程序(如U-Boot),负责初始化硬件并加载内核。作用:提供启动流程控制、环境变量管理、内核加载入口。内核镜像(如vmlinuz或bzImage)封装内容:内核核心代码,包含进程调度、内存管理、VFS等模块的二进制代码。作用:驱动硬件、管理系统资源、提供基础服务(如系统调用)。根文件系统镜像(如rootfs.img)
2025-02-23 15:58:41
1100
1
原创 python实现情绪识别模块,并将模块封装成可执行文件
封装好的模型直接做一个函数来使用了,也就是获取用户情绪函数,让它单独做一个进程去使用,将用户的情绪结果放置到active_emotion文件中,其他进程需要使用到用户情绪的时候直接打开文件读取即可为了读取方便可以用a、b、c、d…需要获取用户摄像头权限,摄像头会捕获用户的面部视频流,程序会在每一定时间内抽取一帧做处理,将图片与训练好的模型进行张量运算,最后输出各个情绪可能的百分比,取最高百分比的情绪为本次图片的情绪。目前用不了GPU,应该是python库版本问题。
2025-02-09 19:39:15
575
1
原创 git clone必须使用sudo否则失败 && git推送错误想再次编辑和推送
我的问题比较特别用env | grep -i proxy发现没问题所幸直接删掉~/.ssh下的秘钥,重新弄。按照这个操作重新搞后git clone就不用sudo了,之前搞的秘钥要重新配置一下。2.git reset HEAD@{18} 回退到我想回退的18结点。1.git reflog 查看一下你想回退到哪里。至此就可以再次编辑,推送了。
2024-12-24 21:35:49
709
原创 ubantu设置静态ip后不能上网解决方案
如果未成功,执行 gedit /etc/resolv.conf ,查看是否有以下内容,没有就添上。添入以下内容:(clone后的机器若想要修改ip并联网,还要重新再编辑一遍这一步)编辑——虚拟网络编辑器——VMnet8——NAT设置——网关IP(G)执行 ifconfig 命令可查看所配置的 ip 地址是否生效;其中gateway必须是vmware虚拟机分配的默认网关,查看。注:第二步我执行执行是失败的,但好像对整体并不影响。#将managed=false 改成true。
2024-12-24 16:56:49
1460
原创 vscode免密ssh登录ubantu && 配置ubantu静态ip
之前ubantu一直用的是动态ip,ubantu的ip变一次我就要从新配置一次ssh十分不方便,直接改成静态ip。
2024-12-11 10:14:14
479
原创 设置数据,再次读取数据出现:段错误 (核心已转储)解決方案
通过putleu32(buf, MSG_INDEX, data_number);利用socket将数据传输给服务端,服务端接收数据后更新自己的数据。
2024-12-10 17:27:44
606
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅