zl程序教程

您现在的位置是:首页 >  大数据

当前栏目

chatgpt开发内核定时器模块的完整过程

chatGPT内核模块开发 过程 完整 定时器
2023-09-11 14:15:47 时间

描述任务需求后,几乎在同一时刻chatgpt给出响应,开始进入代码刷屏模式,coding过程中还不忘给代码添加注释。

 要求它顺便将Makefile文件写好提供给我,刷完代码后,进跟着开始刷Makefie文件:

 编译生成的代码时发现编译不过,原来是timer API从内核的某个版本开始变了,chatgpt默认生车给你的代码是用老API写的,而我的测试平台用的是linux5.4内核,API不匹配导致编译错误。于是我继续给它出难题,看chatgpt能否按照前面的思路为我纠正代码,于是我又问他:

他好象是想到了什么,首先是道歉,提供了不匹配的版本给我,然后马上输出纠正后的代码,仔细看,果然 init_timer函数调用改成了正确的timer_setup。

稍微改动一下(init_timer仍然在,注释掉即可,只改动一行,很不错了。),编译运行测试:

模块卸载也没有任何问题

下面看一下chatgput开发的定时器模块代码:

Makefile:

obj-m += mymodule.o

KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)

default:
	$(MAKE) -C $(KDIR) M=$(PWD) modules

clean:
	$(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 0
    init_timers(&timer);  // 初始化定时器
    timer.function = timer_handler;
    timer.expires = jiffies + msecs_to_jiffies(1000);
    add_timer(&timer);  // 添加定时器到内核
#else
    timer_setup(&timer, timer_handler, 0);
    timer.expires = jiffies + msecs_to_jiffies(1000);
    add_timer(&timer);
#endif
    while (!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的语料库该何等丰富。

感受:

姑且不论是否能够取代人类程序员(个人认为是有可能的),如果chatgpt面向程序员开放,无疑将会大大提高工作效率。

结束