私はLinuxに慣れていて、ユーザーがデバイスファイルに読み書きできるモジュールを作っていました。書き込み機能ではありません。私のコードでデバイスファイルの読み書きに何が間違っていますか?
MODULE_LICENSE("DUAL BSD/GPL");
char message[80];
char *msg_ptr;
int dev_major = 0;
int dev_minor = 0;
struct cdev *cdev;
ssize_t dev_read(struct file *filp,char __user *buf,size_t count,loff_t *offset)
{
int i;
i=copy_to_user(buf,msg_ptr,count);
printk(KERN_ALERT"buff:%s",buf);
return 0;
}
ssize_t dev_write(struct file *filp,const char __user *buf,size_t count,loff_t *offset)
{
int j;
msg_ptr = kmalloc(sizeof(*buf),GFP_KERNEL);
copy_from_user(msg_ptr,buf,sizeof(*buf));
//printk(KERN_ALERT"msg_ptr:%s",msg_ptr);
return 0;
}
私はchar型のノードを作成して、エコーハイ>は/ dev/my_devを使用する場合、それはハイ出力しますが、/ var/log/messagesに見られるようにinfintely書き込みます。
ポインターではなく指し示すオブジェクトのサイズです。だから最悪の場合: 'sizeof(* buf)'は1です。 – ouah
copy_from_user(msg_ptr、buf、count);私はそれを使用しましたが、問題はまだそこにあります..........これ以上の提案。 – karan421