0
我一直想寫樹莓的內核新的系統調用(稱爲sys_defclose),但在編寫我得到這個錯誤:編寫一個新的系統調用
arch/arm/kernel/built-in.o: In function `__sys_trace_return':
:(.text+0xd50): undefined reference to `sys_defclose'
我已經修改了以下文件:
-include/LINUX/syscalls.h:這裏我把我的系統調用的原型
-arch/ARM /包括/ ASM/unistd.h中:這裏我把系統調用表的新原料:
#define __NR_sys_defclose (__NR_SYSCALL_BASE+380)
-arch /臂/內核/ calls.S:其中i把:
CALL(sys_defclose)
-i放在拱形/臂/內核sys_defclose的源極和我已經修改與在同一目錄中生成文件新行
obj-y +=sys_defclose.o
內核版本是3.6的raspberrypi。 有人可以解釋我如何解決這個錯誤? 感謝 這是我的系統調用的實現
static struct task_struct* get_task_by_pid(pid_t pid)
{
return pid_task(find_pid_ns(pid, task_active_pid_ns(current)), PIDTYPE_PID);
}
static void close_files(struct files_struct * files)
{
int i, j;
struct fdtable *fdt;
j = 0;
rcu_read_lock();
fdt = files_fdtable(files);
rcu_read_unlock();
for (;;) {
unsigned long set;
i = j * BITS_PER_LONG;
if (i >= fdt->max_fds)
break;
set = fdt->open_fds[j++];
while (set) {
if (set & 1) {
struct file * file = xchg(&fdt->fd[i], NULL);
if (file) {
filp_close(file, files);
cond_resched();
}
}
i++;
set >>= 1;
}
}
}
asmlinkage long sys_defclose(pid_t pid)
{
struct task_struct *result = NULL;
rcu_read_lock();
result = get_task_by_pid(pid);
rcu_read_unlock();
close_files(result->files);
}
我只是試圖用SYSCALL_DEFINE但問題還在這裏,也許是系統調用的來源是不正確的文件夾? – seba0691
對於內核,系統調用的定義沒有區別。請提供你的系統調用的定義。 –
我編輯了系統調用的問題 – seba0691