当前位置: 首页 > wzjs >正文

新月传媒做网站 怎么样营销网络推广方式有哪些

新月传媒做网站 怎么样,营销网络推广方式有哪些,wordpress菜单显示选项,北京网站设计费用Buildroot 增加自启动项 概述增加模块源码结构编写测试程序编译测试增加系统自启动一个问题解决方案:显式指定输入设备 其他/etc/init.d 目录下的 SXXxxx 文件作用解析‌ 概述 Buildroot 是一款轻量级、高度可定制的开源工具集,专为嵌入式系统打造。它通…

在这里插入图片描述

Buildroot 增加自启动项

  • 概述
  • 增加模块
  • 源码结构
  • 编写测试程序
  • 编译测试
  • 增加系统自启动
  • 一个问题
    • 解决方案:显式指定输入设备
  • 其他
    • /etc/init.d 目录下的 SXXxxx 文件作用解析‌

概述

Buildroot 是一款轻量级、高度可定制的开源工具集,专为嵌入式系统打造。它通过自动化构建流程(交叉编译工具链、Linux内核、根文件系统、引导程序),将复杂的嵌入式开发简化为“菜单配置”(make menuconfig)。开发者无需手动处理依赖与兼容性问题,只需勾选所需软件包,即可生成完整的可烧录镜像。在嵌入式场景中,服务进程的自动加载是刚需, 通常将启动脚本置于/etc/init.d/(SysV init)或编写systemd单元文件,实现服务的全自动托管。

增加模块

参考: Buildroot 添加自定义模块-内置文件到文件系统

–本文不再复述–

源码结构

package/auto_run/
├── CMakeLists.txt
├── Config.in
├── dumpsys.cpp
├── auto_run.mk
└── S99dumpsys

编写测试程序

dumpsys.cpp

#include <stdio.h>
#include <string.h>
#include <sys/statvfs.h>
#include <unistd.h>void print_memory() {FILE *meminfo = fopen("/proc/meminfo", "r");if (!meminfo) {printf("无法读取内存信息\n");return;}char line[256];unsigned long total_mem = 0, free_mem = 0;while (fgets(line, sizeof(line), meminfo)) {if (strncmp(line, "MemTotal:", 9) == 0) {sscanf(line + 9, "%lu", &total_mem);} else if (strncmp(line, "MemFree:", 8) == 0) {sscanf(line + 8, "%lu", &free_mem);}}fclose(meminfo);printf("可用内存: %lu MB / 最大内存: %lu MB\n", free_mem / 1024, total_mem / 1024);
}void print_disk() {struct statvfs stat;if (statvfs("/", &stat) != 0) {printf("无法读取磁盘信息\n");return;}unsigned long free_space = (stat.f_bfree * stat.f_frsize) / (1024 * 1024);unsigned long total_space = (stat.f_blocks * stat.f_frsize) / (1024 * 1024);printf("可用空间: %lu MB / 最大空间: %lu MB\n", free_space, total_space);
}int main() {char input[10];while (1) {printf("输入命令 (mem/disk/exit): ");if (!fgets(input, sizeof(input), stdin)) {continue;}// 移除换行符input[strcspn(input, "\n")] = 0;if (strcmp(input, "mem") == 0) {print_memory();} else if (strcmp(input, "disk") == 0) {print_disk();} else if (strcmp(input, "exit") == 0) {break;} else {printf("无效命令\n");}}return 0;
}

编译测试

编译完成后, 可以直接将dumpsys 程序拷贝到/usr/data/dumpsys运行测试:

# /usr/data/dumpsys 
输入命令 (mem/disk/exit): mem
可用内存: 397 MB / 最大内存: 447 MB
输入命令 (mem/disk/exit): exit

增加系统自启动

auto_run.mk

AUTO_RUN_SITE = $(TOPDIR)/package/auto_run
AUTO_RUN_SITE_METHOD = local
AUTO_RUN_INSTALL_STAGING = YES# dumpsys
define AUTO_RUN_INSTALL_INIT_SYSV$(INSTALL) -D -m 0755 $(AUTO_RUN_SITE)/S99dumpsys $(TARGET_DIR)/etc/init.d/S99dumpsys
endefAUTO_RUN_POST_INSTALL_TARGET_HOOKS += AUTO_RUN_INSTALL_INIT_SYSV$(eval $(cmake-package))

S99dumpsys

#!/bin/shcheck_run(){local file="/usr/data/dumpsys"local max_attempts=10local attempt=1while [ $attempt -le $max_attempts ]; doif [ -f "$file" ]; thenecho "File $file found, starting dumpsys..."/usr/data/dumpsys &return 0elseecho "Attempt $attempt: File $file not found, waiting..."sleep 1attempt=$((attempt + 1))fidoneecho "file not found and exit"return 1
}case "$1" instart)echo "Starting dumpsys..."check_run || exit 1;;stop)echo "Stopping dumpsys..."killall dumpsys;;restart)$0 stop$0 start;;*)echo "Usage: $0 {start|stop|restart}"exit 1;;
esacexit 0

一切准备就绪! 打包烧录!

一个问题

为了方便测试, 默认/usr/data/目录下没有dumpsys, 通过命令拷贝并重启.
意外出现:

输入命令 (mem/disk/exit): 输入命令 (mem/disk/exit): 输入命令 (mem/disk/exit): 输入命令 (mem/disk/exit): 输入命令 (mem/disk/exit): 输入命令 (mem/disk/exit): 输入命令 (mem/disk/exit): 输入命令 (mem/disk/exit): ...

循环输出LOG: 输入命令 (mem/disk/exit):
调试发现问题出在

if (!fgets(input, sizeof(input), stdin))

原因是从stdin读取输入出现了问题.

在Buildroot环境中,fgets()在通过init脚本启动时失败但在手动启动时正常,这通常与标准输入(stdin)的环境差异有关。

由于 后台运行(&)的影响

  • &使程序在后台运行,可能导致stdin被关闭或重定向
  • init系统可能进一步处理了标准流

解决方案:显式指定输入设备

修改程序代码:

FILE *input_stream = fopen("/dev/console", "r");
if (!input_stream) {input_stream = fopen("/dev/tty", "r");
}
if (!input_stream) {input_stream = stdin;
}if (!fgets(input, sizeof(input), input_stream)) {// 错误处理
}

根本原因是初始化环境和交互式shell环境的差异。在系统启动时,标准输入可能没有绑定到有效的终端设备,而手动启动时则会有完整的终端环境。

其他

/etc/init.d 目录下的 SXXxxx 文件作用解析‌

文件命名规则与核心作用‌

  • S 前缀‌:表示 ‌启动(Start)‌ 服务,与之对应的 K 前缀表示 ‌停止(Kill)‌ 服务‌。
    XX 数字‌:决定脚本执行顺序,数值小的优先执行(如 S10network 先于 S20apache 执行),用于解决服务间的依赖关系(例如网络接口需先于 Web 服务启动)‌。
    xxx 服务名‌:标识具体服务(如 S50ssh 表示 SSH 服务)。

  • SXXxxx 文件是 SysVinit/BusyBox 初始化系统中,通过数字排序和符号链接机制实现服务按需启动的核心配置单元,直接影响嵌入式设备或服务器在特定运行级别的服务状态‌。

http://www.dtcms.com/wzjs/264821.html

相关文章:

  • dns网站卫士 收录加强服务保障 满足群众急需需求
  • 好知网做网站搜索引擎优化方案
  • 怎样建设个人游戏网站社群营销怎么做
  • 西宁做网站的公司cpa游戏推广联盟
  • 湖南对外建设集团网站网络营销策略论文
  • 做会员体系的网站小网站搜什么关键词好
  • 政府网站 内容建设标准百度一下百度网站
  • 计算机网站开发图片最近实时热点新闻事件
  • 平台网站兼职做sap学历提升哪个教育机构好一些
  • seo管理系统创作东莞关键词排名快速优化
  • 网站建设需要提供什么小程序开发流程详细
  • 单位网站建设与管理产品运营推广方案
  • 自家宽带怎么建设网站重庆seo教程博客
  • 提取卡密网站怎么做关键词推广优化
  • 做外汇网站代理商青岛百度网站排名
  • 天眼查企业查询在线官网经典seo伪原创
  • dw怎么用div css做网站社会化媒体营销
  • 台州本地做网站的求好用的seo软件
  • 温江网站建设seo会被取代吗
  • 太子河网站建设营业推广的方式有哪些
  • 和小孩做的网站seow
  • 福建建设执业资格网站报名系统百度平台商家订单查询
  • 如东网站建设今天上海最新新闻事件
  • 做网站的实验报告如何做好宣传推广
  • 网上开店准备工作seo优化博客
  • 轻设计 让网站灵敏轻便的6个技巧江门搜狗网站推广优化
  • 织梦cms sql注入破解网站后台管理员账号密码企业营销
  • 空间域名一年要多少钱乐陵市seo关键词优化
  • 长沙做网站a微联讯点很好梧州网站seo
  • 怎么做免费公司网站山东百度推广代理