- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想对内核进行 2 次系统调用(getlot 和 setlot)。他们必须在内核中的 struct proc 中读取和设置一些值。问题是什么?缺少什么?
在/usr/include/minix/callnr.h中我增加了NCALLS并添加了2个define
#define NCALLS 80 /* number of system calls allowed */
#define SETLOT 78
#define GETLOT 79
在 usr/src/mm/main.c 中
PUBLIC void do_setlot()
{
message msg;
msg = mm_in;
_taskcall(SYSTASK, SYS_SETLOT), &msg);
}
PUBLIC void do_getlot()
{
message msg;
msg = mm_in;
_taskcall(SYSTASK, SYS_GETLOT, &msg);
}
在/usr/src/mm/proto.h 我添加了两个原型(prototype)
_PROTOTYPE( void do_setlot, (void));
_PROTOTYPE( void do_getlot, (void));
在/usr/src/mm/table.c中我在_PROTOTYPE的末尾添加了(int (*call_vec[NCALLS]), (void))
do_setlot,
do_getlot,
在/usr/src/fs/table.c中我在_PROTOTYPE的末尾添加了(int (*call_vec[]), (void) )
no_sys,
no_sys,
在/usr/include/minix/com.h 我创建了 2 个 SYS_xxx 定义
# define SYS_SETLOT 22
# define SYS_GETLOT 23
在/usr/src/kernel/system.c中我写了
FORWARD _PROTOTYPE( int do_procsetlot, (message *m_ptr) );
FORWARD _PROTOTYPE( int do_procgetlot, (message *m_ptr) );
然后在PUBLIC void sys_task()中加入SYS_xxx切换
case SYS_SETLOT: r = do_procsetlot(&m); break;
case SYS_GETLOT: r = do_procgetlot(&m); break;
在底部我写了 2 个定义
PRIVATE int do_procsetlot(m_ptr)
register message *m_ptr;
{
pid_t prid;
int i;
int tickets;
prid = m_ptr->m1_i1;
tickets = m_ptr->m1_i2;
if(tickets > LOT_MAX)
return EINVAL;
if(tickets < LOT_MIN)
return EINVAL;
for(i = 0 ; i <NR_PROCS; i++)
{
if(proc[i].p_pid == prid)
{
proc[i].tickets_number = tickets;
return 0;
}
{
return EINVAL;
}
PRIVATE int do_procgetlot(m_ptr)
register message *m_ptr;
{
int i;
pid_t prid;
prid = m_ptr->m1_i1;
for(i = 0 ; i< NR_PROCS; i++)
{
if(proc[i].p_pid == prid)
return proc[i].tickets_number;
}
return EINVAL;
}
最后在 make hdboot 之后我得到了错误:
exec cc -c -I/usr/include main.c
exec cc -c -I/usr/include proc.c
exec cc -c -I/usr/include system.c
"system.c", line 1260: static not expected
make in /usr/src/kernel: Exit code 1
1260行是
PRIVATE int do_procgetlot(m_ptr)
最佳答案
我知道这条消息已经有好几年了,但是...
do_procsetlot
底部有一个语法错误:
{
return EINVAL;
}
...应该是:
}
return EINVAL;
}
我希望你在 2014 年的某个时候自己想通了!
顺便说一句,Minix 2 编译器完全支持 ANSI C,因此您不需要所有的 K&Risms。
关于c - MINIX 2 - 内核系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26941283/
最近我对 Minix 操作系统感到好奇。 http://www.minix3.org/ 我对其稳健性和可靠性功能的描述非常感兴趣,但我注意到该平台可用的软件包明显缺乏。 这里有人为 Minix 开发软
知道两者都是微内核,b/w Mach(Hurd 所基于的)和 Minix 有什么区别。有任何架构差异吗?稍微了解一下“什么是 L4”会很有帮助。我找不到任何涉及此内容的文件。 最佳答案 GNU Mac
目前正在研究Minix,正在做一个基于线程的系统,不知道如何编译自己的程序。 例如: Mthreads.c #include #include #include void hola(int y)
我正在尝试更改 minix 中的键盘驱动程序,我的想法是将键盘中使用的所有字符存储在一个文件中。我声明一个全局 FILE * fp 并将这段代码插入到/usr/src/drivers/tty/keyb
因此,我需要使用 MINIX 内核调用 sys_vircopy 将填充的数组(int)从我正在编写的系统调用复制回调用进程. 当前的设置如下,在调用过程中(省略了不重要的部分): int *resul
我需要在 Minix 中为家庭作业创建一个系统调用。我已经完成了大部分设置,但由于某种原因,系统调用实际调用的函数没有被正确找到。 (请原谅任何糟糕的措辞选择,我不确定解释这一点的最佳词语)。 我在/
我打算对 Minix 内核进行修改。但在我开始之前,我想编译它,以便我知道任何进一步的编译问题都是由我所做的事情引起的。 我已获得 Minix 3 source code from github ,它
我正在尝试在 Minix 上创建一个字符设备驱动程序。我希望它能够接受read()和 write()调用。我的理解是我需要使用 sys_safecopyfrom()对于运行 read() 的函数功能和
#include #include int mq_close(int queue) { message m; m.m3_i1= queue; return (_syscal
请引用下面的代码片段,我将引用其中的行号: https://gist.github.com/wilbertcr/474c6a13e377dc8ce51a 正如您在第 172-200 行所看到的,我创建
我需要创建一个用户程序,该程序能够在系统调用的帮助下查看有多少进程正在运行。我发现 getsysinfo() 函数可以给我结果,但当我尝试编译代码时出现错误。 我使用了以下代码: struct kin
我需要打印一条消息,通知用户进程已从内核调用 sys_fork 中派生出来。我在 sys_fork() 函数中添加了命令 printf("process forked\n"); 但什么也没发生。这是正
我正在尝试在 Minix 3.3 中创建一个新的系统调用。起初我只想创建简单的 printmsg() 调用,它会在屏幕上显示“Hello World”。 我在互联网上查看了各种教程,但仍然找不到解决方
我正在用 C 编写一些递归列出给定目录中所有文件的软件,现在我需要解决内部碎片。 我花了很长时间研究这个,发现 ext2 上的内部碎片只发生在最后一个 block 中。我知道理论上从 inode 编号
我想对内核进行 2 次系统调用(getlot 和 setlot)。他们必须在内核中的 struct proc 中读取和设置一些值。问题是什么?缺少什么? 在/usr/include/minix/cal
我最近购买了这本书以更好地了解操作系统的工作原理。我在第二章,我被困在这个问题上,我的操作系统无法使用我添加的代码启动。下面的代码在 pic_proc 函数开始时添加到 proc.c 以尝试修改调度程
在MINIX 3.2.1中,我想创建一个新的系统调用,它将提供一个文件名作为参数,并打印特定文件的 inode 号。 我已经创建并修改了执行此操作所需的所有文件。 因此,为了按文件名检索文件的 ino
在处理类(class)项目时,我收到未知类型名称“EXTERN”错误。我正在创建系统调用(稍后将通过库调用访问)。由于某种原因,当我尝试在 usr/src/releasetools 中运行“make
我有一个神秘的问题!在 main.c 中我有以下内容: #include "jogo.h" int main(){ int i; sef_startup(); vg_init(
我一直在尝试在 minix 中实现一个搜索功能,它将在当前或子目录中查找文件并打印路径。到目前为止,我的代码编译成功,但由于某种原因只返回几个奇怪的 ASCII 字符,知道我做错了什么吗? #incl
我是一名优秀的程序员,十分优秀!