- 博客(43)
- 收藏
- 关注
原创 ubuntu根文件系统软件部署
在 /etc/systemed/system/ 或 /lib/systemed/system/ 下添加服务运行指定脚本。脚本:运行可执行二进制文件,路径一般:/usr/bin 、/usr/local/bin。apt download upower 下载安装包upower。与环境无关时用qmeu仿真技术。根据依赖关系解压安装包包。
2025-05-13 10:08:30
117
原创 git 命令集
创建完成后,复制仓库的 HTTPS 或 SSH URL(如 https://github.com/yourname/my-project.git)。输入仓库名称(如 my-project),不要勾选 “Initialize with README”(保持空仓库)。完成后,你的项目已上传到远程仓库!拉取完成后,你的本地文件夹已与远程仓库同步!登录你的账号,点击 New Repository。克隆仓库到指定文件夹。
2025-04-25 14:02:20
569
原创 4G/5G模组----概念+驱动+调试
功能: 提供 USB 串口设备的支持,使设备表现为虚拟串口。用途: 广泛用于调制解调器、GPS 接收器等设备,允许通过标准串口接口进行通信。。
2025-04-13 01:14:43
1422
原创 udev规则实例:监听usb插拔事件并做出相应
在 Linux 和 Android 系统中,USB 插拔事件的判断涉及从内核到用户空间的多层协作。
2025-04-10 17:04:03
670
原创 触摸屏触摸坐标与画面对齐
其中,前三个元素(a、b、c)表示新坐标系中x轴的方向,接下来的三个元素(d、e、f)表示新坐标系中y轴的方向,最后三个元素(g、h、i)通常用于平移变换,但在此矩阵中未使用,保持为0、0、1。例如,如果显示内容是横屏显示,但触摸输入为竖屏,通过应用此变换矩阵,可以将触摸输入旋转,使其与显示内容一致。将一个点(x, y)表示为列向量 [x, y, 1],与上述变换矩阵相乘,得到新的坐标(x’,y’):。因此,原始点(x, y)经过此变换后,得到新坐标(y, -x + 1),实现了逆时针旋转90度的效果。
2025-04-10 16:41:49
413
原创 在uboot添加设备实例
在uboot阶段实现关机充电,充电时led黄灯常亮,刚充电或者短摁按键屏幕会显示充电动画,长摁按键如果满足条件系统会进行重启。
2025-03-13 15:26:11
1005
原创 gadget uac
Gadget UAC在RK3588平台中通过灵活的USB Gadget框架实现了音频设备的模拟,适用于需要高实时性音频传输的场景。其核心在于内核驱动配置与用户空间的动态功能绑定,开发者可根据需求选择UAC1或UAC2协议,并结合复合设备功能扩展应用场景。
2025-03-10 10:34:45
1002
原创 Peripheral mode 或Host mode这两种模式的区别、用途
通过ConfigFS创建Gadget设备,设置PID/VID、功能描述符(如Mass Storage或MTP),并绑定到USB控制器(UDC)。实际开发中需结合具体需求,通过设备树、内核配置和用户空间工具(如ConfigFS)灵活调整模式,并参考Rockchip官方文档进行验证。用途:将RK3588作为存储设备(如U盘)、调试设备(ADB/MTP)或外设(如HID设备)连接到PC或其他主机设备。:启用Host控制器节点(如usb_host0_ehci),并关联对应的USB PHY28。
2025-03-10 10:26:52
869
原创 rk3588s USB外设与Gadget Config
当然,若想利用官方文件,模拟各种外设,可以将USB_FUNCS=""的值赋为:adb、mtp、acm…Windows:更新 MTP 驱动(设备管理器 → 便携设备 → 更新驱动 → 自动搜索)。通过以上步骤,可在 RK3588S 开发板上实现USB的 UMS/MTP 功能。Windows/Linux:插入开发板后,存储设备应显示为 U 盘。Windows:资源管理器应显示为“便携设备”,可浏览内部存储。若内核未配置,需重新编译(见文末 内核编译补充说明)。错误现象:MTP 设备显示为空。
2025-03-07 15:38:02
1193
原创 01.编译AIO-RK3588SJD4
查看编译buildroot时的config文件是【TARGET_BUILDROOT_CONFIG=firefly_rk3588】执行完命令后即可看到源码文件。修改权限,谨慎使用sudo。
2025-03-07 09:35:32
207
原创 创建存储空间
当前分区格式为ext4格式,在Linux系统中可以识别,如果想在Window下识别存储空间,需要把分区通过mkfs.fat命令转为fat格式。至此,分区就创建成功了!
2025-03-05 13:48:45
220
原创 简单cli示例---demo
def cli():""": 这个装饰器将函数cli()标记为Click命令组的入口点。它定义了整个CLI的顶层命令组。cli()函数: 作为命令组的入口点,它的主要作用是提供CLI的基础结构和文档字符串作为CLI的帮助文本。name }!')name }!'): 这个装饰器定义了一个CLI命令,这里是hello命令。: 用于定义命令的选项。在这里,--name(或-n的简写)是一个选项,它可以提示用户输入,用于指定要打招呼的人的名字。hello()函数: 实际执行打招呼功能的函数,使用。
2025-02-28 17:57:18
56
原创 device*和of函数的区别
如何将 device_property_read_u32() 和 of_property_read_u32() 关联起来。使用 device_property_read_u32() 通过设备对象读取属性。使用 of_property_read_u32() 直接读取设备树属性。
2025-02-27 11:07:06
241
原创 buildroot进行个性化rootfs.img
在buildroot/package目录下建立helloworld,并在该目录下建立Config.in 和 helloworld.mk 两个文件。在external 下创建helloworld文件夹,并在该文件夹下创建.c源码工程文件和Makefile文件。helloworld.mk里的宏,除了BR2开头的,其余宏都要以HELLOWORLD_ 开头。编译完成并进行挂载后可以看到home下有app/app.txt 目录结构。在package/下找到Config.in文件,在最后添加自己的软件。
2025-02-26 19:31:06
567
原创 系统级调试
在Linux系统中,系统级调试涉及通过各种工具来分析、排查和修复系统运行中的问题。常见的系统级调试任务包括进程管理、内存分析、CPU性能监控、磁盘I/O分析、网络调试等。Linux提供了许多命令和工具来帮助开发者和管理员进行系统级调试。查看所有进程:bash复制代码ps aux查看某个用户的进程:bash复制代码1.2 top 命令top 命令提供实时的系统性能视图,包括CPU、内存、负载和运行中的进程。它是一个动态更新的界面,帮助用户监控系统的运行状况。
2024-11-12 13:59:05
529
原创 linux启动流程
在旧版计算机中,BIOS(基本输入输出系统)负责硬件初始化,包括CPU、内存、键盘、显示器、硬盘、网络等设备的初始化。内核启动时,会挂载根文件系统(/),这可能是通过initrd(或initramfs)暂时加载一个临时文件系统,待内核识别并挂载真实的文件系统。这个过程中涉及的技术,如进程管理、内核态与用户态切换、信号与中断处理、文件系统管理等,都是Linux系统正常运行和资源管理的核心部分。init进程是Linux系统的根进程,进程ID为1,它负责初始化用户空间,挂载文件系统,启动系统服务等。
2024-11-12 13:57:26
491
原创 python包总结
尝试寻找一个库然后返回其路径名,name是库名称,且去除lib等前缀和.so、.dylib、版本号等后缀。当一个协程通过asyncio.create_task()等函数被封装为一个任务,该协程会被自动调度执行。适合处理I/O密集型任务,如:网络请求,文件读写,可以并发运行多个任务,而不需要线程或进程切换。用于执行外部命令(如系统命令、脚本等),它会创建一个新的子进程来运行指定的命令。保护一个可等待对象,防止其被取消,如果aw是一个协程,它将自动被作为任务调度。它会等待命令的输出,然后返回结果。
2024-11-12 12:02:43
757
原创 cli-tool
功能点:1.调用动态库函数作为命令。如:get_portState,slot_present等。2.调用可执行程序作为命令。如:iio-info,cpld-upgrade3.满足tab键补全和上键补全历史记录难点:1.进程和线程同时使用stdin,需要加锁。本示例中锁为 stop_thread2.实现命令的方式有三种,三种方式各不相同直接写调用动态库函数------lib = ctypes.CDLL(‘/usr/lib/libfpga.so’) ; lib.fpga_is_slot_pre
2024-08-21 15:35:01
358
原创 gdb调试
①启动gdb这将启动 ‘gdb’ 并加载指定的程序②加载程序加载指定的程序到 ‘gdb’ 中③运行程序启动程序并传递命令行参数。可以在 ’ run ‘ 后加上程序所需的参数。
2024-08-07 10:01:56
323
原创 demo-1-Determine if ping is successful
【代码】demo-1-Determine if ping is successful。
2024-08-06 10:59:40
129
原创 基于【python click框架,做cli 】检索结果,输出合适的内容
import clickimport subprocessimport sysimport ctypesimport timeimport threadingimport shleximport restop_thread = threading.Event()'''c structtypedef struct PORTSTATUSINFO{ char portName[64]; uint16_t linkStatus
2024-07-30 09:27:43
120
原创 shell-script-base-pl
d:匹配任何数字,等价于[0-9]。\d匹配 “1”、“2”、“3” 等。\D:匹配任何非数字字符,等价于[^0-9]。\D匹配 “a”、“b”、“!” 等。\w:匹配任何字母数字字符及下划线,等价于。\w匹配 “a”、“1”、“_” 等。\W:匹配任何非字母数字字符及下划线,等价于。\W匹配 “!”、“@”、" " 等。\s:匹配任何空白字符(空格、制表符、换行符等),等价于。\s匹配 " “、”\t"、“\n” 等。\S:匹配任何非空白字符。\S。
2024-07-18 14:20:14
961
原创 简单cli示例---demo
def cli():""": 这个装饰器将函数cli()标记为Click命令组的入口点。它定义了整个CLI的顶层命令组。cli()函数: 作为命令组的入口点,它的主要作用是提供CLI的基础结构和文档字符串作为CLI的帮助文本。name }!')name }!'): 这个装饰器定义了一个CLI命令,这里是hello命令。: 用于定义命令的选项。在这里,--name(或-n的简写)是一个选项,它可以提示用户输入,用于指定要打招呼的人的名字。hello()函数: 实际执行打招呼功能的函数,使用。
2024-07-16 14:06:30
395
原创 python click框架,做cli
python click框架,做cliimport clickimport subprocessimport sysimport ctypesimport timeimport threadingimport shlex# 线程控制标志位stop_thread = threading.Event()'''c中structtypedef struct PORTSTATUSINFO{ char portName[64]; uint16_t
2024-07-15 17:46:56
834
原创 makefile 编写
定义变量可以使Makefile,更易于维护和修改CC = gcc #编译器CFLAGS = -WALL -g #编译选项LDFLAGS = =lm #链接选项。
2024-07-15 15:58:32
320
原创 shell script base
在shell编程中,变量是用于存储数据值的名称;在定义变量时,变量名不加美元符号($,PHP语言中需要)变量名和等号之间不能有空格只包含字母(大小写敏感)、数字(不能以数字开头)、下划线(_)避免shell关键字(例:if 、then 、else 、fi 、for 、while等)使用大写字母表示常量read命令一个一个词组接收输入的参数,每个词组需要使用空格进行分割;如果输入的词组大于需要的参数个数,则多出来的词组将被作为整体为最后一个参数接收。
2024-06-06 10:29:01
666
原创 -设备树-
aliases节点是一个特殊的节点,用于定于设备别名。该节点位于设备树的根部,并具有节点路径 /aliases.aliases节点是一个容器节点,包含一组属性,每个属性都代表一个设备别名。每个属性的名称是别名的标识符,而属性的值是被引用设备节点的路径或设备树中其他节点的路径。示例aliases{在上述例子中,由四个别名的定义:mmc0别名与设备树中的sdmmc0节点相关联,通过使用别名mmc0,其他设备节点设备或客户端程序可以更方便地引用sdmmc节点,而不必直接使用其完整路径。
2024-05-17 16:42:49
1336
原创 -字符设备-
在linux系统中每一个设备都有相应的设备号,通过该设备号查找对应的设备,从而进行之后的的文件操作,设备号有主设备号与此设备号之分,主设备号用来表示一个特定的驱动,此设备号用来管理下面的设备。功能:初始化传入的cdev类型的结构体,并与自定义的file_operations * 类型的结构体进行链接。功能:动态申请设备号,内核会自动分配一个未使用的设备号,相较于静态申请设备号,动态申请会。//隶属于同一主设备号的次设备号的个数。//字符设备的设备号,由主设备号和次设备号构成。
2024-05-17 16:01:16
947
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人