gpt4 book ai didi

c - Kmalloc 无法正常工作

转载 作者:行者123 更新时间:2023-11-30 18:03:30 24 4
gpt4 key购买 nike

我在这个系统调用方面遇到了一些问题,可能在 kmalloc 方面也遇到了一些问题。

嗯,基本上我正在构建一个系统调用,并且这个系统调用和内核编译没有问题。但是当我调用系统调用时,shell 显示了很多消息,然后计算机崩溃了。

我认为问题出在 kmalloc 上,因为当我删除 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;

最佳答案

显然我还不能发表评论,所以我会问几个问题作为答案......

我看到“EXPORT_SYMBOLL(bloqueados);” ...这是您的复制/粘贴中的错误还是实际代码中的错误?这可能是一个问题...

您使用 GFP_ATOMIC 与 GFP_KERNEL 的原因是什么?

这可能会有所帮助,

http://www.linuxjournal.com/article/6930

如果您不是绝对需要它,建议不要使用 GFP_ATOMIC...因为它可能会失败。我可能遗漏了一些东西,但我不明白你为什么需要它......你似乎没有使用任何锁。

关于c - Kmalloc 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8379060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com