이 시스템 호출 및 kmalloc에 문제가 있습니다.Kmalloc가 올바르게 작동하지 않습니다.
글쎄, 기본적으로 나는 시스템 호출을 만들고 있는데,이 시스템 호출과 커널은 문제없이 컴파일된다. 그러나 시스템 호출을 호출하면 쉘이 많은 메시지를 표시하고 컴퓨터가 충돌합니다.
나는 내가 kmalloc이을 envolves kmalloc이 및 기타 코드를 제거 할 때 시스템 호출이 완벽하게 작동하기 때문에 문제는 kmalloc이으로 생각합니다.
예 : bloqueados = kmalloc (sizeof (struct bloqueio), GFP_ATOMIC);
덧붙여서 : 아마도 교착 상태가 발생했을 수도 있지만, 나는 정확하게 알지 못합니다.
감사합니다.
#include <linux/linkage.h>
#include <linux/io_block_unblock.h>
//#include <linux/printk.h>
#include <linux/kernel.h>
#include <linux/unistd.h>
#include <linux/stddef.h>
#include <linux/slab.h>
#include <linux/gfp.h>
#include <linux/unistd.h>
#include <linux/uaccess.h>
#include <linux/fs.h>
#include <linux/mount.h>
#include <linux/genhd.h>
#include <linux/device.h>
struct bloqueio *bloqueados;
EXPORT_SYMBOLL(bloqueados);
asmlinkage long sys_io_block(const char __user *particao, const char __user *arquivo){
int id_inode;
struct file *arq;
char *part;
struct bloqueio *tmp;
arq = filp_open(arquivo,O_CREAT, S_IRWXU);
printk(KERN_EMERG "\nstruct file criado para o arquivo %s",arquivo);
id_inode = arq->f_path.dentry->d_inode->i_ino;
printk(KERN_EMERG "\nO inode do arquivo %s e %d",arquivo, id_inode);
//part = arq->f_path.mnt->mnt_sb->s_bdev->bd_part->__dev.init_name;
//printk(KERN_EMERG "\nA particao a qual o arquivo se encontra e %s",part);
if(bloqueados == NULL){
bloqueados = kmalloc(sizeof(struct bloqueio),GFP_ATOMIC);//<--------------
if(!bloqueados){
printk(KERN_EMERG "\n Erro ao alocar memoria");
return 0;
}
bloqueados->inode = id_inode;
bloqueados->tipo = 0;
bloqueados->prox = NULL;
}
else
{
tmp = kmalloc(sizeof(struct bloqueio), GFP_ATOMIC);//<--------------------
if(!bloqueados){
printk(KERN_EMERG "\n Erro ao alocar memoria");
return 0;
}
tmp->inode = id_inode;
tmp->tipo = 0;
tmp->prox = bloqueados->prox;
bloqueados->prox = tmp;
}
return 1;
}
그냥 추가는,이 구조체 bloqueio입니다 :
이
는 코드입니다. 분명히extern int contem(const char *arquivo);
struct bloqueio{
int inode;
int tipo; // 0 -> arquivo 1 -> partição
struct bloqueio *prox;
};
extern struct bloqueio *bloqueados;
충돌이 발생할 때 나타나는 죄송 메시지를 붙여 넣습니다. – caf