المشكلة مع chardev.ج سبيل المثال من نواة لينكس وحدة المبرمجين دليل

StackOverflow https://stackoverflow.com/questions/1648519

سؤال

جمعت وركض على chardev.ج على سبيل المثال من على lkmpg و عند الكتابة إلى الجهاز حصل خطأ غير متوقع:

anon@anon:~/lkmpg$ sudo echo "hi" > /dev/chardev
bash: /dev/chardev: Permission denied

وحدة وظيفة الكتابة تبدو مثل هذا:

/*  
 * Called when a process writes to dev file: echo "hi" > /dev/chardev 
 */
static ssize_t
device_write(struct file *filp, const char *buff, size_t len, loff_t * off)
{
    printk(KERN_ALERT "Sorry, this operation isn't supported.\n");
    return -EINVAL;
}

أنا لا تحصل على الخطأ المتوقع من عملية غير صالحة الخطأ المطبوعة إلى /var/log/messages.

أستطيع أن أقرأ من الجهاز مع أي مشكلة, تلقي النتائج المتوقعة:

anon@anon:~/lkmpg$ cat /dev/chardev 
I already told you 6 times Hello world!

الجهاز /dev/chardev يتم إنشاؤه يدويا باستخدام:

sudo mknod /dev/chardev c 252 0

ما هي الصفقة ؟

- تحرير -

على ما يبدو عندما mknod إنشاء الجهاز ينتهي مع الأذونات التالية:

crw-r--r-- 1 root root 252, 0 2009-10-30 09:27 /dev/chardev. 

بمجرد أن فعلت sudo chmod a+w /dev/chardev السائق يعمل كما هو متوقع.

بيد أن الناس قالوا أنه ليس من الصحيح أن تفعل هذا.

ما هو مسار العمل الصحيح و لماذا ؟

هل كانت مفيدة؟

المحلول

حقا حقا حقا مستقيم إلى الأمام ، مثال بسيط لكيفية تنفيذ حرف السائقين يمكن العثور عليها في drivers/watchdog/softdog.c

يمكنك مقارنة التعليمات البرمجية الخاصة بك إلى هذا المثال الذي يوضح لك كيفية القيام بما يلي:

  • قراءة من الجهاز
  • الكتابة على الجهاز
  • هذا ioctl عبر واجهة الجهاز

في حين سوفتدوج هو أداة مفيدة جدا ، بقدر ما هو البرنامج التعليمي من أي شيء آخر.آلان كوكس رمى به معا ، لذلك مثال جيد على أكثر السليم التنفيذ.

إذا كان يمكنك الرد على كل مصدر إلى الوحدة النمطية الخاص بك ونحن يمكن أن تساعدك على معرفة السبب وظيفة الخاص بك لا يتم دخلت كما هو متوقع.

تحديث:

فمن تماما مقبولة تسمح تحت مميزة للمستخدمين لكتابة حرف الأجهزة!أكرر هو مقبول تماما للسماح تحت مميزة للمستخدمين لكتابة حرف الأجهزة!إذا كان هذا ليس هو الحال ، أشياء مثل الصمامات, المودم, الأدوات USB, CD روم وغيرها من الأمور يتطلب وصول الجذر إلى استخدام.

ما يمكنك القيام به هو الاستفادة من المجموعة عضوية.I. e., على أوبونتو ، يسمح للمستخدمين لاستخدام الصمامات (نظام الملفات المستخدم في الفضاء) يجب أن تنتمي إلى "فتيل" المجموعة التي يسمح بالوصول المحبب الذي يمكن وما لا يمكن استخدام هذه الميزة.وبالمثل ، في بعض النظم ، QRNG (الكم مولد رقم عشوائي) هو في الاستخدام ..و هو (هل تفكر في ذلك) حرف الجهاز.أريد أن تسمح PHP للوصول إلى هذا الجهاز , لذا:

  • إنشاء مجموعة QRNG
  • تأكد PHP يعمل على المستخدم (غير مجهول نظام المستخدمين)
  • إضافة المستخدمين امتلاك التطبيقات التي تحتاج إلى الوصول إلى جهاز QRNG المجموعة

آمل أن يزيل عنه :)

نصائح أخرى

أعتقد المشكلة الفعلية هي الأوامر التي صدرت إلى كتابة غير صحيحة.محاولة

#sudo sh -c "echo "hi" > /dev/chardev"

إذا كنت ترغب في تشغيل عدة أوامر مع سودو ثم يجب عليك استخدام الأوامر كما هو مبين أعلاه.مع هذا, أنت لا تحتاج إلى القيام chmod و تغيير أذونات كذلك.ويساعد هذا الأمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top