尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
【T113】buildroot增加app
文章目录新增app源码monitor_usb.cMakefilebuildroot 配置Config.inmonitor_usb.mkplatform/config/buildroot/Config.inplatform/config/buildroot/platform.mkbuildroot/buildroot-201902/configs/sun8iw20p1_t113_defconfig配置程序为默认启动S92monitor_usb.sh原文链接https://lixiaogang03.github.io/2023/12/05/Buildroot-Add-App/新增app源码目录t113_linux/platform/apps/monitor_usb$ tree.├── Makefile └── monitor_usb.cmonitor_usb.c#includeunistd.h#includestdio.h#includestring.h#includelibudev.h#includestdlib.h#includesys/reboot.h/** * swupdate ota */voidswupdate_ota(){constchar*filename/mnt/usb/sda1/update.swu;intresultaccess(filename,F_OK);if(result0){intresponsesystem(swupdate -v -i /mnt/usb/sda1/update.swu -e stable,now_A_next_B);if(response-1){printf(Failed to execute swupdate command\n);}else{printf(Rebooting the device...\n);sync();// 同步磁盘上的数据if(reboot(RB_AUTOBOOT)-1){printf(Failed to reboot the system\n);}}}else{printf(/mnt/usb/sda1/update.swu does not exits\n);}}intmain(){structudev*udev;structudev_monitor*mon;structudev_device*dev;intfd;/* 初始化 udev */udevudev_new();if(!udev){fprintf(stderr,Cant create udev\n);return1;}/* 创建 udev 监听器 */monudev_monitor_new_from_netlink(udev,udev);if(!mon){fprintf(stderr,Cant create udev monitor\n);return1;}/* 设置要监听的事件类型 */if(udev_monitor_filter_add_match_subsystem_devtype(mon,block,disk)0||udev_monitor_enable_receiving(mon)0){fprintf(stderr,Cant filter block subsystem or enable receiving\n);return1;}// 获取文件描述符fdudev_monitor_get_fd(mon);/* 循环监听并处理事件 */while(1){// 使用 select 系统调用来等待设备事件或超时fd_set fds;FD_ZERO(fds);FD_SET(fd,fds);structtimevaltimeout;timeout.tv_sec5;// 设置超时时间为 5 秒timeout.tv_usec0;// 使用 select() 设置超时时间if(select(fd1,fds,NULL,NULL,timeout)0){printf(Error waiting for device event\n);continue;}if(FD_ISSET(fd,fds)){// 当设备事件发生时从监视器接收设备对象devudev_monitor_receive_device(mon);if(devNULL){printf(Invalid device received from udev monitor\n);continue;}constchar*actionudev_device_get_action(dev);constchar*devpathudev_device_get_devnode(dev);printf(Action: %s, Device Path: %s\n,action,devpath);if(strcmp(add,action)0){swupdate_ota();}udev_device_unref(dev);}else{// 没有设备事件发生// printf(No device events received\n);}}/* 清理资源 */udev_monitor_unref(mon);udev_unref(udev);return0;}MakefileOBJSmonitor_usb.o OUT_BINmonitor_usb all:$(OBJS)$(CC)$(LDFLAGS)-g-o$(OUT_BIN)$^ %.o: %.c$(CC)$(CFLAGS)-c-o$$.PHONY: clean clean:rm-rf*.orm-rf$(OUT_BIN)rm-rf$(shellfind-name*.d)buildroot 配置t113_linux/platform/config/buildroot/monitor_usb$ tree.├── Config.in └── monitor_usb.mkConfig.inconfig BR2_PACKAGE_MONITOR_USB boolmonitor_usbselectBR2_PACKAGE_EUDEVhelpmonitor usbmonitor_usb.mk################################################################################## monitor usb#################################################################################MONITOR_USB_SITE_METHODlocalMONITOR_USB_SITE$(PLATFORM_PATH)/../../apps/monitor_usb MONITOR_USB_LICENSEGPLv2, GPLv3 MONITOR_USB_LICENSE_FILESCopyright COPYING MONITOR_USB_DEPENDENCIESudev MONITOR_USB_LDFLAGS-L$(TARGET_DIR)/usr/lib/-ludevdefine MONITOR_USB_BUILD_CMDS$(MAKE)CC$(TARGET_CC)CFLAGS$(MONITOR_USB_CFLAGS)\LDFLAGS$(MONITOR_USB_LDFLAGS)-C$(D)all endef define MONITOR_USB_INSTALL_TARGET_CMDS$(INSTALL)-D-m0755$(D)/monitor_usb$(TARGET_DIR)/usr/bin endef$(eval$(generic-package))platform/config/buildroot/Config.insource../../platform/config/buildroot/monitor_usb/Config.inplatform/config/buildroot/platform.mkinclude${PLATFORM_PATH}/monitor_usb/monitor_usb.mkbuildroot/buildroot-201902/configs/sun8iw20p1_t113_defconfigBR2_PACKAGE_MONITOR_USBy配置程序为默认启动t113_linux/platform/framework/auto/rootfs/etc/init.d$ tree.├── rcK ├── rcS ├── S01syslogd ├── S02klogd ├── S05mount_userdata ├── S10udev ├── S20urandom ├── S30dbus ├── S40network ├── S50bluetooth ├── S50postgresql ├── S52_4G-Daemon.sh ├── S80dnsmasq ├── S90alsa.sh └── S92monitor_usb.shS92monitor_usb.sh#!/bin/shcase$1instart)echoStarting monitor_usb/usr/bin/monitor_usb;;stop)echoStopping monitor_usbkillallmonitor_usb;;restart)$0stop$0start;;*)echoUsage:$0{start|stop|restart}exit1;;esacexit0
RELATED

相关推荐

#FastReport .NET 设备日报,数据怎么接进模板?

#FastReport .NET 设备日报,数据怎么接进模板?

设备运行日报接入现有工业 IoT 平台时,可以先明确一条链路:业务服务按设备、日期和班次查询并整理结果,再把数据交给 FastReport .NET,最后由报表模板组织展示并提供预览、导出。 FastReport .NET 是报表组件。在本文场景中&#…

📅 2026/10/30 15:44:04
五条判据:部署链路、预测可信度、热流体联合验证、资产性能闭环与工厂侧降本

五条判据:部署链路、预测可信度、热流体联合验证、资产性能闭环与工厂侧降本

能源装备数字孪生的首要判断题是:设计阶段的仿真模型能否以可执行数字孪生的形态进入运营现场,并在工况变化时保持可信。本文给出五条判据,按部署优先级排列,并说明每条判据对应的能力与验收口径。一、为什么能源装备数字孪生难以…

📅 2026/10/30 15:44:04
Drools 7.48.0.Final企业级规则引擎实战指南

Drools 7.48.0.Final企业级规则引擎实战指南

简介:本资源为 Drools 规则引擎 7.48.0 Final 正式发行版的完整分发包,面向 Java 开发者、企业级规则系统架构师及业务规则管理(BRMS)实践者,用于快速集成轻量级、可扩展的规则推理能力至 Spring Boot、Quarkus 等现代…

📅 2026/10/30 15:44:04
MORE NEWS

更多资讯

📰

Django语音垃圾分类系统:WebSocket+Whisper.cpp轻量部署实战

简介:这是一套基于Django框架开发的智能垃圾分类系统实战项目,面向计算机专业本科生、毕业设计与课程设计学习者,聚焦语音识别与Web应用集成场景,解决生活化AI功能落地问题。资源包含305个文件,以31个Python核心逻辑文…

📰

RAG答非所问?先查向量检索链路再调模型

1. 先搞清楚问题出在“找”还是“编”做RAG(检索增强生成)项目的人,十有八九都遇到过这种场景:知识库明明有正确答案,模型却一本正经地胡编乱造。我最初做本地知识库问答时也这样,系统答非所问,…

📰

基于深度学习的多弹时间角度协同制导律设计与验证

简介:一份面向人工智能与制导控制交叉领域学习者的实践项目,聚焦如何利用深度神经网络优化时间角度协同制导律,提升飞行器在时间、角度双重约束下的自主控制能力。资源包共六个文件,包含深度学习源程序、数据生成脚本、已训练好的…

📰

Excel隔行上色技巧与高级应用详解

1. Excel隔行上色的基础原理与应用场景Excel表格隔行上色(又称斑马纹效果)是数据处理中最基础却最实用的视觉优化技巧。这种看似简单的操作背后,其实融合了条件格式、函数计算和视觉设计的多重逻辑。为什么需要隔行上色?当处理超过…

📰

图像分类技术:从CNN原理到PyTorch实践

1. 图像分类基础概述图像分类是计算机视觉领域最基础也最重要的任务之一。简单来说,就是让计算机能够识别一张图片中包含了什么物体或场景。比如给定一张猫的照片,计算机能够正确识别出"猫"这个类别。这项技术在日常生活中有着广泛应用&#x…

📰

微信小程序+SpringBoot刷题系统毕业源码

简介:本资源是一套完整的微信小程序SpringBoot双端刷题系统毕业设计源码,面向计算机专业本科生、Java与前端初学者及毕设开发者,解决在线学习平台从0到1的全栈开发实践问题。资源包共773个文件,涵盖101个Java后端业务逻辑与实体类…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬