【问题标题】:trying to add FIFO queue system call尝试添加 FIFO 队列系统调用
【发布时间】:2016-03-27 14:10:47
【问题描述】:

我目前正在学校学习操作系统课程。

现在,我一直在尝试添加一些新的系统调用,以便在内核空间中建立一个队列。

我在这里尝试做三件事:

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,这是测试应用程序中系统调用的错误。

我不知道为什么这不起作用。

附言

我还发现了关于使用 kfifo.h 创建队列的方法,但效果也不好。

【问题讨论】:

  • 定义asmlinkage long sys_*不会自动将系统调用添加到内核中,您需要在特定于arch的代码中修改entry.S文件以使内核知道新的系统调用入口。只是谷歌“添加系统调用到 linux 内核”。

标签: linux linux-kernel system-calls


【解决方案1】:

这是内核编译问题

编译后,在重启时,我的 Ubuntu 停止了,所以我强制退出一切并重新打开。

问题是后来开始的。

我重新编译并重新启动它不是通过 sudo reboot 而是通过关闭它然后重新打开它。

现在它又开始工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 2017-09-14
    • 2011-02-23
    • 1970-01-01
    • 2017-04-12
    • 2019-04-11
    • 1970-01-01
    相关资源
    最近更新 更多