未来是 AI 的时代,博主最近写代码都喜欢用 AI 写个草稿,修修改改就能用,大幅提高了工作效率。举个例子:
指令:写一个使用 kfifo 的内核模块
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/kfifo.h>
#include <linux/slab.h>
#define FIFO_SIZE 1024
static DEFINE_KFIFO(my_fifo, char, FIFO_SIZE);
static int __init kfifo_example_init(void)
{
int ret;
char data[] = "Hello, kfifo!";
char buf[FIFO_SIZE];
// 初始化 kfifo
ret = kfifo_in(&my_fifo, data, sizeof(data));
if (ret != sizeof(data)) {
printk(KERN_ERR "Failed to initialize kfifo\n");
return -ENOSPC;
}
// 从 kfifo 中读取数据
ret = kfifo_out(&my_fifo, buf, sizeof(data));
if (ret != sizeof(data)) {
printk(KERN_ERR "Failed to read from kfifo\n");
return -EFAULT;
}
buf[sizeof(data)] = '\0'; // 添加字符串结束符
printk(KERN_INFO "Read from kfifo: %s\n", buf);
return 0;
}
static void __exit kfifo_example_exit(void)
{
kfifo_free(&my_fifo); // 释放 kfifo 的空间
printk(KERN_INFO "kfifo example module unloaded\n");
}
module_init(kfifo_example_init);
module_exit(kfifo_example_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("A simple kernel module demonstrating the use of kfifo");
指令:使用内核 list 写一个内核模块
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/list.h>
#include <linux/slab.h>
struct student {
int id;
char name[20];
struct list_head list;
};
static LIST_HEAD(student_list);
static int __init list_example_init(void)
{
struct student *s1, *s2, *s;
// 为两个学生分配内存
s1 = kmalloc(sizeof(struct student), GFP_KERNEL);
s2 = kmalloc(sizeof(struct student), GFP_KERNEL);
if (!s1 || !s2) {
printk(KERN_ERR "Memory allocation failed\n");
return -ENOMEM;
}
s1->id = 1;
strncpy(s1->name, "Alice", sizeof(s1->name));
INIT_LIST_HEAD(&s1->list);
s2->id = 2;
strncpy(s2->name, "Bob", sizeof(s2->name));
INIT_LIST_HEAD(&s2->list);
// 将学生添加到链表中
list_add_tail(&s1->list, &student_list);
list_add_tail(&s2->list, &student_list);
// 遍历链表并打印学生信息
printk(KERN_INFO "Student list:\n");
list_for_each_entry(s, &student_list, list) {
printk(KERN_INFO "ID: %d, Name: %s\n", s->id, s->name);
}
return 0;
}
static void __exit list_example_exit(void)
{
struct student *s, *tmp;
// 释放链表中学生的内存
list_for_each_entry_safe(s, tmp, &student_list, list) {
list_del(&s->list);
kfree(s);
}
printk(KERN_INFO "List example module unloaded\n");
}
module_init(list_example_init);
module_exit(list_example_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("A simple kernel module demonstrating the use of linked list in the kernel");
Makefile
# Makefile 4.0
obj-m := xxxx.o
CURRENT_PATH := $(shell pwd)
LINUX_KERNEL := $(shell uname -r)
LINUX_KERNEL_PATH := /usr/src/linux-headers-$(LINUX_KERNEL)
all:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
clean:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean
chatGPT 输出的 demo code,直接编译就能用:
如果大家想体验,这里有一个 AI 导航,收集了很多网站:
https://wz.aidaohang.com.cn/
其中,chatGPT 官网目前是免费使用 3.5 版本:
https://openai.com/chatgpt
国内的大模型,推荐文心一言、通义千问、讯飞星火,基本都能用,不过在输出长篇内容时可能会断掉。
至于 chatGPT4.0,官网是 20 美金一个月,比较贵,如果不是刚需没必要。其他 4.0 渠道还有很多,这里就不推荐了,没渠道的可以后台加博主微信。
博主也用 AI 画了几幅图片,大家可以看一下,本篇文章封面就是 AI 画的,用的是 MJ 绘画:
文生视频的 Sora 模型目前普通用户无法使用,但我们能看到 AI 能做的事情越来越多,大家还是要意识到 AI 对工作和日常生活产生的影响,我们要把 AI 用起来,避免自己落后于时代。
博主日常工作中也会接触到一些 shell 脚本、python 脚本、汇编语言,当看不懂的时候,直接贴给 chatGPT,他给出的解释一般都很合理,这种特殊性的东西百度是搜不到的,但是 chatGPT 可以给出很好的解释,甚至对代码逐行解释,真的很方便很好用。
因为 chatGPT 对 python 非常精通,而 .py 文件可以打包成 .exe 可执行文件,所以我的同事喜欢用 AI 写工具,如下是 AI 用 5s 写出来的简易文本阅读器:
甚至可以把 AI 训练帮助自己解 bug,使用逻辑是:先告诉 AI 一些关键 log 分别代表什么意思,然后把一大段 log 输入给 AI,AI 会解析这些 log,并判断这些 log 与正常相比是否缺失了一些东西,或者 log 出现的前后顺序是否异常,然后给出判断。这样即便无法直接分析出 root cause,也可以协助你进行初步分析,节约时间。
更多的 AI 玩法,靠大家去发现。
本文分享自 嵌入式Linux系统开发 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!