描述任务需求后,几乎在同一时刻chatgpt给出响应,开始进入代码刷屏模式,coding过程中还不忘给代码添加注释。
要求它顺便将Makefile文件写好提供给我,刷完代码后,进跟着开始刷Makefie文件:
编译生成的代码时发现编译不过,原来是timer API从内核的某个版本开始变了,chatgpt默认生车给你的代码是用老API写的,而我的测试平台用的是linux5.4内核,API不匹配导致编译错误。于是我继续给它出难题,看chatgpt能否按照前面的思路为我纠正代码,于是我又问他:
他好象是想到了什么,首先是道歉,提供了不匹配的版本给我,然后马上输出纠正后的代码,仔细看,果然 init_timer函数调用改成了正确的timer_setup。
稍微改动一下(init_timer仍然在,注释掉即可,只改动一行,很不错了。),编译运行测试:
模块卸载也没有任何问题
下面看一下chatgput开发的定时器模块代码:
Makefile:
obj-m += mymodule.oKDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)default:$(MAKE) -C $(KDIR) M=$(PWD) modulesclean:$(MAKE) -C $(KDIR) M=$(PWD) clean
mymodule.c
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/kthread.h>
#include <linux/delay.h>MODULE_LICENSE("GPL");// 定义线程和定时器相关变量
static struct task_struct *thread;
static struct timer_list timer;// 定义定时器处理函数
static void timer_handler(struct timer_list *timer)
{printk(KERN_INFO "helloworld\n");mod_timer(timer, jiffies + msecs_to_jiffies(1000)); // 重新启动定时器
}// 定义内核线程函数
static int thread_func(void *data)
{
#if 0init_timers(&timer); // 初始化定时器timer.function = timer_handler;timer.expires = jiffies + msecs_to_jiffies(1000);add_timer(&timer); // 添加定时器到内核
#elsetimer_setup(&timer, timer_handler, 0);timer.expires = jiffies + msecs_to_jiffies(1000);add_timer(&timer);
#endifwhile (!kthread_should_stop()) {schedule(); // 等待下一次定时器事件}del_timer(&timer); // 删除定时器return 0;
}static int __init mymodule_init(void)
{printk(KERN_INFO "module loaded\n");thread = kthread_run(thread_func, NULL, "mythread"); // 创建内核线程并启动return 0;
}static void __exit mymodule_exit(void)
{printk(KERN_INFO "module unloaded\n");kthread_stop(thread); // 停止内核线程
}module_init(mymodule_init);
module_exit(mymodule_exit);
带着寻根究底的态度,后面又多问了一句关于timer_setup何时进入内核mainline,几秒中后,chatgpt给除了它的答案:
其他OS测试
关于RT-THREAD的用法,面对一个小众的国产OS,照样没有难倒chatgpt,给除了正确答案。可以大致猜测训练CHATGPT的语料库该何等丰富。
CHAT GPT后的大模型训练架构
感受:
姑且不论是否能够取代人类程序员(个人认为是有可能的),如果chatgpt面向程序员开放,无疑将会大大提高工作效率。