filippebrito
(usa Ubuntu)
Enviado em 18/07/2015 - 14:41h
Boa tarde,
Compilando a system call que desenvolvi, apareceu os seguintes erros:
"Dependencia Circular", a qual apareceu que ela foi ingorada prosseguindo com a compilação... Pesquisando na internet, não consegui chegar uma conclusão de onde realmente está o erro, usei um laço de contagem no código, suspeito que possa ser isso.
Outra questão que travou a compilação foi outro Erro 1
(ld: não foi possível encontrar minhasys: Formato de arquivo não reconhecido
make: ** [vmlinux] Erro 1)
, printei a tela para visualizar melhor, também não sei do que se trata, suspeito que possa ser algo relacionado com Makefile.
Alguem sabe onde pode ser a origem desses erros?
Segue o código da system call (pode ser que o erro esteja nela)
Elá precisa receber o PID do processo como parametro e retornar o número de arquivos abertos por esse processo.
#include <linux/init.h>
#include <linux/module.h>
#include<linux/sched.h>
#include <linux/rcupdate.h>
#include <linux/fdtable.h>
#include <linux/fs.h>
#include <linux/fs_struct.h>
#include <linux/dcache.h>
#include <linux/slab.h>
#include <linux/kernel.h>
#include <linux/linkage.h>
#include <linux/unistd.h>
#include <linux/moduleparam.h>
#include <linux/pid.h>
/* Return number of files open per process */
extern struct task_struct *find_process_by_pid(pid_t pid);
asmlinkage long sys_minhasys(int pid)
{
pid_t pidt = pid; //valor inteiro do pid
struct task_struct *task;
struct pid *pid_struct;
struct files_struct *p;
struct fdtable *files_table;
struct path files_path;
int i=0;
char *cwd;
char *buf = (char *)kmalloc(GFP_KERNEL,100*sizeof(char));
pid_struct = find_get_pid(pidt); /*funciona para encontrar o pid_struct */
task = pid_task(pid_struct,PIDTYPE_PID); /*find the task_struct */
if (task == NULL)
{
printk (KERN_INFO "Processo com o pid %d is não existe \n",pid);
return -1;
}
else{
p = find_process_by_pid((pid_t) pid) -> files;
files_table = files_fdtable(p);
while(files_table->fd[i] != NULL)
{
files_path = files_table->fd[i]->f_path;
cwd = d_path(&files_path,buf,100*sizeof(char));
i++;
}
return i;
}
}