মডিউল লোড করতে অক্ষম: প্রতীক মডিউল_লআউট এর সংস্করণ সম্পর্কে অসমত


12

আমার প্রথম ড্রাইভার লিখতে এই টিউটোরিয়ালটি অনুসরণ করে Following

মেকফাইলটি হ'ল:

# Makefile – makefile of our first driver

# if KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq (${KERNELRELEASE},)
    obj-m := ofd.o
# Otherwise we were called directly from the command line.
# Invoke the kernel build system.
else
    KERNEL_SOURCE := /usr/src/linux 3.8
    PWD := $(shell pwd)
default:
    ${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} modules

clean:
    ${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} clean
endif

এবং ড্রাইভার কোডটি হ'ল:

* ofd.c – Our First Driver code */
#include <linux/module.h>
#include <linux/version.h>
#include <linux/kernel.h>

static int __init ofd_init(void) /* Constructor */
{
    printk(KERN_INFO "Namaskar: ofd registered");
    return 0;
}

static void __exit ofd_exit(void) /* Destructor */
{
    printk(KERN_INFO "Alvida: ofd unregistered");
}

module_init(ofd_init);
module_exit(ofd_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Anil Kumar Pugalia <email_at_sarika-pugs_dot_com>");
MODULE_DESCRIPTION("Our First Driver");

মেক করার সময় কোনও ত্রুটি নেই। তবে আমি যখন ব্যবহার insmod ofd.koকরি তখন আমি এটি লোড করতে অক্ষম। এতে dmesgবলা হয়েছে:

প্রতীক মডিউল_লআউট এর সংস্করণ সম্পর্কে একমত নয়

  • uname -r '3.8.0-38-জেনেরিক' এবং কার্নেল উত্সটিও 3.8 প্রদান করে।
  • modprobe -f ofd.ko ব্যর্থ হয়

এছাড়াও:

#56~precise1-Ubuntu SMP Thu Mar 13 16:23:47 UTC 2014
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 12.04.4 LTS
Release:    12.04
Codename:   precise

কি হচ্ছে?


কিছু সুস্পষ্ট মন্তব্য। প্রথম কার্নেল উৎস ঠিক উবুন্টু কার্নেল হিসাবে একই? আপনার উবুন্টু কার্নেল উত্সটি আপনার কার্নেলের সাথে সঠিকভাবে ব্যবহার করা উচিত । আপস্ট্রিম সম্ভবত কাজ করবে না, যেহেতু বিতরণগুলি তাদের কার্নেলগুলি প্যাচ করে। দ্বিতীয়ত, আফাইক আপনি কার্নেল শিরোনামগুলির সাথে সংকলন করতে পারেন, আপনার কার্নেল উত্সের প্রয়োজন নেই। শিরোনামগুলি বাইনারি প্যাকেজ হিসাবেও পাওয়া উচিত। আপনি দেবিয়ান কার্নেল হ্যান্ডবুকটিও দেখতে পারেন , যেখানে দেবানিয়ায় কার্নেল ইত্যাদি সম্পর্কে শিক্ষামূলক জিনিস রয়েছে যা উবুন্টুতেও প্রযোজ্য।
ফাহিম মিঠা

উত্তর:


13

লিনাক্স কার্নেলে এমন ডেটা স্ট্রাকচার রয়েছে যার লেআউটটি শুধুমাত্র সংস্করণ থেকে অন্য সংস্করণে পরিবর্তিত হয় না তবে সংকলনের বিকল্পগুলির উপর নির্ভর করে। ফলস্বরূপ, আপনি যখন কার্নেল মডিউলটি সংকলন করেন, তখন কার্নেল সংকলনের সময় আপনার কেবল কার্নেল উত্স থেকে কেবল শিরোনাম ফাইলই থাকা উচিত নয়, তবে কিছু শিরোনাম ফাইলও উপস্থিত থাকতে হবে। কেবল কার্নেল উত্সটি আনপ্যাক করা যথেষ্ট নয়।

এর সাথে নির্মিত কার্নেলগুলির সাথে CONFIG_MODVERSIONS, সংস্করণ নম্বরটি পৃথক হতে পারে, তবে ডেটা স্ট্রাকচারের বিন্যাস একই হতে হবে। এই বিকল্পটি উবুন্টু কার্নেলগুলিতে সক্রিয় করা আছে। এই বিকল্পের সাহায্যে শিরোলেখগুলি ছাড়াও মডিউলগুলি যথাযথ Module.symversফাইলের বিপরীতে সংকলন করা দরকার । উবুন্টু, বেশিরভাগ বিতরণের মতো, এই ফাইলটি একই প্যাকেজে অন্তর্ভুক্ত কর্নেল শিরোনামগুলির সংকলনের ফলে। উবুন্টু কার্নেল শিরোনাম প্যাকেজ বলা হয় , যেমন ।linux-headers-VERSION-VARIANTlinux-headers-3.8.0-38-generic

ছাড়াই নির্মিত কার্নেলগুলির সাথে CONFIG_MODVERSIONS(যদি আপনি নিজের কার্নেলটি সংকলন করেন তবে এটি হতে পারে) মডিউল লোড করার সময় চেকটি একটি সাধারণ সংস্করণ চেক। আপনি আনপ্যাক করা কার্নেল উত্সটি নিতে পারেন .config, আপনার চলমান কার্নেলটি সংকলনের সময় ব্যবহৃত কপিটি অনুলিপি করতে পারেন , এবং রান করুন make modules_prepare। কার্নেলের সাথে আপনার তৈরি করা কোনও প্যাচ বাইনারি সামঞ্জস্যকে প্রভাবিত করে না তা যাচাই করার জন্য আপনার উপর নজর রয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.