我目前正在学校上课。
现在,我一直在尝试添加一些新的系统调用,在内核空间中建立一个队列。
我正在尝试做三件事:
1)建立队列(通过动态分配或只是声明一个数组)
2)入队
3)出队
问题在于1)。
以下是系统调用源文件的示例代码:
asmlinkage long sys_allocqueue(unsigned int size){
int *queue = kmalloc(sizeof(int) * size, GFP_KERNEL);
return 0;
}
这只是声明数组:
asmlinkage long sys_allocqueue(unsigned int size){
int queue[size];
return 0;
}
无论哪种方式,我得到-1的返回值,这对于测试应用程序中的系统调用是错误的。
我不知道为什么这不起作用。
P.S。
我也发现了使用kfifo.h来创建队列,但这也没有用。
答案 0 :(得分:0)
这是内核编译问题
编译后,重新启动时,我的Ubuntu停止了,所以我强制退出所有内容并将其重新打开。
问题随后开始。
我重新编译它并重新启动它不是通过sudo reboot,而是通过关闭它并重新打开它。
现在又恢复了工作。