gpt4 book ai didi

c - 如何在内核区声明所有内核代码使用的全局变量?

转载 作者:太空宇宙 更新时间:2023-11-04 02:53:37 24 4
gpt4 key购买 nike

我正在学习如何创建自定义系统调用,并打算实现将 ptr 字符指针作为参数的代码 (save.c),然后将 ptr 指向的字符串复制到 sys_mybuf。实现以ptr 字符指针为参数的代码(load.c),然后将sys_mybuf 中的字符串复制到ptr 指向的缓冲区中。所以,我期待以下代码。但它似乎不起作用。我希望所有内核系统调用代码都使用 char 数组。我该怎么办?

保存.c

  1 #include <linux/kernel.h>
2 #define STRING__SIZE 501
3 char sys_mybuf[STRING__SIZE]; // a string of at most size 500.
4 asmlinkage int sys_save(char* ptr)
5 {
6 int index = 0;

17
18 ptr[index] = '\0';
19 return index; // the number of bytes actually read.
20 }

加载.c

  1 #include <linux/kernel.h>
2 // extern
3 asmlinkage int sys_load(char* ptr)

17 ptr[index] = '\0';
18 return index;
19 }

~

最佳答案

正如我在评论中猜测的那样。问题很简单,您没有声明文件 load.c 中的变量。

要获得快速解决方案,请将以下几行添加到 load.c:

#define STRING__SIZE 501
extern char sys_mybuf[STRING__SIZE];

这告诉编译器 sys_mybuf 是在另一个翻译单元(例如源文件)中声明的全局变量。

真正应该做的是,将其放入头文件中,并将该头文件包含在需要访问全局数据的所有文件中。

关于c - 如何在内核区声明所有内核代码使用的全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19658079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com