开发一套SDK 第一弹

news2025/2/27 22:56:48

在这里插入图片描述

自动安装依赖包

在这里插入图片描述

添加条件使能

#ex: filetype=sh

bash_ls 识别

在这里插入图片描述

达到预期,多个硬件环境

在这里插入图片描述
在这里插入图片描述

等待文件文件系统挂在完成

或者创建 /sys/class/ 属性文件灌入配置操作

AI 提供的 netlink 调试方法,也是目前主流调用方法,socket yyds

#include <linux/module.h>
#include <linux/netlink.h>
#include <linux/skbuff.h>
#include <net/sock.h>

#define NETLINK_USER 31
#define NETLINK_CMD_DEBUG_INFO 100 // 调试命令

struct sock *nl_sock = NULL;

static void send_debug_info(struct sk_buff *skb, struct nlmsghdr *nlh) {
    struct sk_buff *skb_out;
    struct nlmsghdr *nlh_out;
    char *debug_info = "Kernel Debug Info: Module is working correctly.";
    int debug_info_len = strlen(debug_info);
    int pid;
    int res;

    pid = nlh->nlmsg_pid; // 用户进程的 PID

    // 创建响应消息
    skb_out = nlmsg_new(debug_info_len, GFP_KERNEL);
    if (!skb_out) {
        pr_err("Failed to allocate new skb\n");
        return;
    }

    nlh_out = nlmsg_put(skb_out, 0, 0, NLMSG_DONE, debug_info_len, 0);
    strncpy(nlmsg_data(nlh_out), debug_info, debug_info_len);

    // 发送消息
    res = nlmsg_unicast(nl_sock, skb_out, pid);
    if (res < 0) {
        pr_err("Failed to send debug info to user-space\n");
    }
}

static void netlink_receive_msg(struct sk_buff *skb) {
    struct nlmsghdr *nlh;

    nlh = (struct nlmsghdr *)skb->data;
    pr_info("Received Netlink message: %s\n", (char *)nlmsg_data(nlh));

    // 根据命令类型处理消息
    switch (nlh->nlmsg_type) {
    case NETLINK_CMD_DEBUG_INFO:
        send_debug_info(skb, nlh);
        break;
    default:
        pr_warn("Unknown Netlink command: %d\n", nlh->nlmsg_type);
        break;
    }
}

static int __init netlink_debug_init(void) {
    struct netlink_kernel_cfg cfg = {
        .input = netlink_receive_msg, // 接收消息的回调函数
    };

    nl_sock = netlink_kernel_create(&init_net, NETLINK_USER, &cfg);
    if (!nl_sock) {
        pr_err("Failed to create Netlink socket\n");
        return -ENOMEM;
    }

    pr_info("Netlink Debug Module initialized\n");
    return 0;
}

static void __exit netlink_debug_exit(void) {
    netlink_kernel_release(nl_sock);
    pr_info("Netlink Debug Module exited\n");
}

module_init(netlink_debug_init);
module_exit(netlink_debug_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("Netlink Debug Interface Example");

最方便的是直接访问内核,有bug 的时候非常容易内核崩溃

开发一些自定义的驱动还是很快乐的,使用netlink 接口完成热加载配置

简单的设备场景就完全可以配置进行,用户和多内核就在sysfs中配置使用

neovim + clangd 使用神器
在这里插入图片描述

使用yocto 来做qemu 会很方便

curl https://pyenv.run | bash #配置pyenv 切换python 环境

sudo apt install libssl-dev liblzma-dev

这就是为啥不想用 yocto 的原因

在这里插入图片描述
在这里插入图片描述

风扇转不停

毁灭吧

还是buildroot 舒服 香 ,完事儿

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2257940.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【leetcode】替换后的最长重复字符、将字符串翻转到单调递增

1.替换后的最长重复字符 示例如下&#xff1a; 下面我们来分析一下一个例子&#xff0c;其中K 2 暴力枚举 这里的字符串s是仅由大写字母组成&#xff0c;首先我们尝试用暴力解法的思路来想一下这道题&#xff0c;通过从第一个字符开始进行枚举&#xff0c;如果出现了条件判断…

HarmonyOS 线性容器List 常用的几个方法

List底层通过单向链表实现&#xff0c;每个节点有一个指向后一个元素的引用。当需要查询元素时&#xff0c;必须从头遍历&#xff0c;插入、删除效率高&#xff0c;查询效率低。List允许元素为null。 List和LinkedList相比&#xff0c;LinkedList是双向链表&#xff0c;可以快速…

C# 网络编程--基础核心内容

在现今软件开发中&#xff0c;网络编程是非常重要的一部分&#xff0c;本文简要介绍下网络编程的概念和实践。 C#网络编程的主要内容包括以下几个方面‌&#xff1a; : 上图引用大佬的图&#xff0c;大家也关注一下&#xff0c;有技术有品质&#xff0c;有国有家&#xff0c;情…

基于Python实现web网页内容爬取

文章目录 1. 网页分析2. 获取网页信息2.1 使用默认的urllib.request库2.2 使用requests库1.3 urllib.request 和 requests库区别 2. 更改用户代理3. BeautifulSoup库筛选数据3.1 soup.find()和soup.find_all() 函数 4. 抓取分页链接参考资料 在日常学习和工作中&#xff0c;我们…

ASP .NET Core 中的环境变量

在本文中&#xff0c;我们将通过组织一场小型音乐会&#xff08;当然是在代码中&#xff09;来了解 ASP .NET Core 中的环境变量。让我们从创建项目开始&#xff1a; dotnet new web --name Concert 并更新Program.cs&#xff1a; // replace this: app.MapGet("/"…

一个简单带颜色的Map

越简单 越实用。越少设计&#xff0c;越易懂。 需求背景&#xff1a; 创建方法&#xff0c;声明一个hashset&#xff0c; 元素为 {“#DE3200”, “#FA8C00”, “#027B00”, “#27B600”, “#5EB600”} 。 对应的key为 key1 、key2、key3、key4、key5。 封装该方法&#xff0c…

操作系统:中断与处理器调度

目录 1、中断与中断系统 中断概念&#xff1a; 中断装置&#xff1a; 中断相关概念&#xff1a; 中断优先级别与中断屏蔽 2、处理机&#xff08;CPU&#xff09;调度 调度相关参数&#xff1a;P62 调度算法&#xff1a; 处理机调度时机 处理机调度过程 3、调度级别与多…

【推荐算法】单目标精排模型——FiBiNET

key word: 学术论文 Motivation&#xff1a; 传统的Embedding&MLP算法是通过内积和Hadamard product实现特征交互的&#xff0c;这篇文章的作者提出了采用SENET实现动态学习特征的重要性&#xff1b;作者认为简单的内积和Hadamard product无法有效对稀疏特征进行特征交互&a…

AndroidStudio配置aar包的依赖方式

创建本地仓库文件夹和aar文件夹 创建本地仓库文件夹LocalRepo&#xff0c;文件夹名称可以自定义。在LocalRepo文件夹下为每一个aar单独创建文件夹&#xff0c;如下所示。aar包就放在各自的文件夹下。请注意一个aar文件夹下只能放置一个aar。 配置build.gradle文件 在aar文件…

unity 让文字变形

效果&#xff1a; using TMPro; using UnityEngine; using NaughtyAttributes;[ExecuteInEditMode] public class TMTextPerpective : MonoBehaviour {[OnValueChanged("DoPerspective")][Range(-1f, 1f)]public float CenterBias 0f;[OnValueChanged("DoPers…

关于SpringBoot项目创建后构建总是失败的问题

第一个问题&#xff1a;IDEA创建项目总是失败 原因&#xff1a;创建项目的时候默认使用的是https://start.spring.io&#xff0c;这个是一个外国网站&#xff0c;众所周知的就是国内访问总是出现不稳定的现象&#xff0c;这就是导致项目创建失败的最终原因。 解决方法&#x…

个人IP建设:简易指南

许多个体创业者面临的一个关键挑战是如何为其企业创造稳定的需求。 作为个体创业者&#xff0c;您无法使用营销团队&#xff0c;因此许多人通过推荐和他们的网络来产生需求。因此&#xff0c;扩大您的网络是发展您的业务和产生持续需求的最佳策略。 这就是个人IP和品牌发挥作…

LLM对话过程的DDD

终于抽出时间调整了一下DDD的结构&#xff0c;感觉这套设计虽然有些不是很原教旨&#xff0c;但已经能很好的支持至少一年的业务迭代了。直接给结论&#xff0c;直接抄也不会有什么错。 整体方案脱胎自openai的assistant api Entity Thread&#xff0c;对话过程。由Message构…

IO进程 学习笔记

……接上文 fputs&#xff08;输入字符串&#xff09; int fputs(const char *s, FILE *stream);功能&#xff1a;向指定文件中输入一串字符参数&#xff1a;s:输入字符串的首地址stream&#xff1a;文件流指针返回值&#xff1a;成功返回输出字符个数失败返回EOF文件指针偏移函…

【Linux】系统安装内核后重启发现进不去系统

问题现象1 系统安装内核后重启发现进不去系统 问题排查步骤 进入pe模式或者livecd模式 使用mount挂载原系统/分区 chroot 刚挂载的/分区目录进入原系统 查询到发现内核存在安装失败 挂载/分区 在pe模式执行mount /分区 /mnt 使用 chroot 切换到你的环境&#xff1a; sudo …

重视猫艾滋:宠物健康的隐秘挑战

猫艾滋&#xff0c;全称为猫获得性免疫缺陷综合征&#xff08;Feline Acquired Immunodeficiency Syndrome&#xff09;&#xff0c;是由猫免疫缺陷病毒&#xff08;FIV&#xff09;感染引起的一种严重危害猫类健康的疾病。虽然其名称与人类艾滋病相似&#xff0c;但猫艾滋仅在…

python学习笔记—5—标识符和运算符

1. 标识符 &#xff08;1&#xff09;定义 用户在编程时所使用的一系列名字&#xff0c;用于给变量、类、方法等命名 &#xff08;2&#xff09;标识符命名规则 <1>内容限定 标识符的命名中只能由数字、英文、中文、下划线组成&#xff0c;其他都不被允许使用…

东方资产管理校招笔试测评题型题目深入解读

东方资管作为四大资产AMC公司之一&#xff0c;其薪资待遇还是不错的&#xff0c;现在为数不多还可以投递简历的金融央企。东方资产管理校招笔试一般在简历投递截止后的周末&#xff0c;总部和子公司、分公司需要分别做笔试。 东方资管笔试大概2h&#xff0c;线上双机位&#x…

Linux---对缓冲区的简单理解--第一个系统程序

前序&#xff1a; 首先先理解一下什么是回车与换行&#xff1b;回车和换行是两个概念&#xff0c;它们不是一个东西&#xff1b; 回车:光标回到开始&#xff1b;换行:换到下一行&#xff1b; 如下图&#xff1a; 行缓冲区 如何理解缓冲区问题&#xff1f; 可以认为&#xff0…

一文掌握 OpenGL 几何着色器的使用

学习本文需要具备 OpenGL ES 编程基础,如果看起来比较费劲,可以先看入门文章 OpenGL ES 3.0 从入门到精通系统性学习教程 。 什么是几何着色器 几何着色器(Geometry Shader) OpenGL 管线中的可选着色器阶段,位于顶点着色器(Vertex Shader) 和光栅化阶段 之间。 其核心…