Usbhid.ko লোড করার চেষ্টা করার সময় "মডিউল_লআউটআউটের জন্য কোনও প্রতীক সংস্করণ নয়"


27

আমি এর জন্য আমার নিজস্ব মডিউলটি তৈরির চেষ্টা করছি usbhid.ko, তবে আমি সংকলনের পরে, আমি মডিউলটি লোড করতে পারি না। dmesgবলে no symbol version for module_layout। আমি ভাবছি সমস্যা কি? আমি ইতিমধ্যে উবুন্টু দ্বারা সরবরাহিত কার্নেল উত্সটি ব্যবহার করেছি এবং আমি এটিও নিশ্চিত করেছি যে কার্নেল সংস্করণটি একই।

উত্তর:


22

বিশেষত সমস্যাটি হ'ল আপনি যখন নিজের মডিউলটি তৈরি করেছিলেন তখন কার্নেল উত্স ট্রিটি সম্ভবত মডিউল.সাইভার্স ফাইলটি অনুপস্থিত ছিল। আপনি যখন আপনার মডিউলটি তৈরি করেন তখন কেবিল্ড সিস্টেমটি আপনাকে সত্যই সতর্ক করে দেয়। যদি মডিউল.সাইভারগুলি অনুপস্থিত থাকে তবে আপনি দেখতে পাবেন:

সতর্কতা: সিম্বল সংস্করণ ডাম্প /usr/src/linux-2.6.34-12/Modules.symvers অনুপস্থিত; মডিউলগুলির কোনও নির্ভরতা এবং রূপান্তর থাকবে না।

যদি আপনার কার্নেল CONFIG_MODVERSIONSসক্ষম করে থাকে, তবে আপনার ড্রাইভার তৈরির মোডপোস্ট পর্যায়ে এটি স্ক্রিপ্টগুলি / মোড / মোডপোস্ট -m বিকল্পের সাথে চালিত হবে । আপনি যদি সাহসী হন এবং স্ক্রিপ্টগুলি / মোড / মোডপোস্ট.সি. উত্সটি একবার দেখুন, আপনি দেখতে পাবেন যে -m বিকল্পটি ভিএমলিনাক্স থেকে _module_layout_ প্রতীক যোগ করে, তবে আপনার কার্নেল থেকে যদি মডিউল.সেমবার্স না থাকে, আপনি এই প্রতীকটির জন্য সিআরসি মান পাবেন না এবং আপনি এই ত্রুটি বার্তাটি শেষ করবেন।

সুতরাং এটি প্রায় দুটি উপায় আছে।

1) মডিউল.সাইমবারস তৈরি করতে আপনার চলমান কার্নেলের একটি সম্পূর্ণ বিল্ড চালান, তারপরে আপনার মডিউলটি পুনর্নির্মাণ করুন। [Http://www.mjmwired.net/kernel/Documentation/kbuild/modules.txt][1]

51  === 2. How to Build External Modules
52  
53  To build external modules, you must have a prebuilt kernel available
54  that contains the configuration and header files used in the build.
55  Also, the kernel must have been built with modules enabled. If you are
56  using a distribution kernel, there will be a package for the kernel you
57  are running provided by your distribution.
58  
59  An alternative is to use the "make" target "modules_prepare." This will
60  make sure the kernel contains the information required. The target
61  exists solely as a simple way to prepare a kernel source tree for
62  building external modules.
63  
64  NOTE: "modules_prepare" will not build Module.symvers even if
65  CONFIG_MODVERSIONS is set; therefore, a full kernel build needs to be
66  executed to make module versioning work.

2) অন্য বিকল্পটি হ'ল বোকা মোডপ্রোবকে কেবল সেই সমস্ত ক্রেপ উপেক্ষা করার জন্য এবং কেবল আপনার মডিউলটি যেভাবেই লোড করতে হবে:

modprobe -f <module>

আমি বিকল্প 2 এর পক্ষের ঝোঁক :)


1
"বোকা মোডপ্রোবকে বলুন যে কেবল সেই সমস্ত বকাবকি উপেক্ষা করুন এবং যাইহোক আপনার মডিউলটি লোড করুন" মন্তব্যটির জন্য +1।
হায়রি উউর কোলটুক

আমি 2 চেষ্টা করে দেখেছি যে বুট করার সময় মডিউলটি স্বয়ংক্রিয়ভাবে লোড করবে না। বুট করার সময় কি কোনও উপায় আছে?
জাস্টিন ঝাং

17

আপনার কার্নেলের সাথে সম্পর্কিত উভয় linux-headersএবং linux-sourceপ্যাকেজ ইনস্টল করুন। কার্নেলের জন্য উদাহরণস্বরূপ 3.2.0-27-generic-pae:

  1. linux-headers-3.2.0-27-generic-pae এবং
  2. linux-source-3.2.0-27-generic-pae

উপরের প্যাকেজগুলির সংস্করণটি আপনার চলমান কার্নেল সংস্করণের সাথে মেলে না তবে আপনার উপর $(uname -r)থেকে আপনার ইনস্টল করা কার্নেল প্যাকেজটির সংস্করণ স্ট্রিংটি প্রতিস্থাপন করতে হবে ।
উপরের উদাহরণের জন্য প্যাকেজ সংস্করণটি 3.2.0-27-generic-pae। আপনি যখন রান করেন uname -rএবং এর আউটপুট কিছু আলাদা হয় তারপরে ইনস্টল করা প্যাকেজগুলির সংস্করণ স্ট্রিংয়ের সাথে মিল রাখতে আপনাকে নীচের 3.2.0-27-generic-paeপ্রতিটি প্রতিস্থাপন করতে হবে $(uname -r)

  1. cd /usr/src/linux-source-$Version এবং জায়গায় .tar.bz2 সংরক্ষণাগারটি আনপ্যাক করুন এবং নিষ্কাশিত ডিরেক্টরিতে সিডি করুন - আমার ধারণা আপনি ইতিমধ্যে এটি করেছেন
  2. cp /boot/config-$(uname -r) .config কার্নেল উত্স ডিরেক্টরিতে
  3. cp /usr/src/linux-headers-$(uname -r)/Module.symvers . কার্নেল উত্স ডিরেক্টরিতে

কার্নেল উত্স ডিরেক্টরিতে এটি করার পরে, এটি করুন:

  1. make prepare
  2. make scripts
  3. make M=drivers/usb/serial- M=আপনার প্রয়োজন অনুসারে পথ পরিবর্তন করুন

দুর্ভাগ্যক্রমে, আমি কীভাবে Module.symversছোঁয়াচে রেখে একটি নির্দিষ্ট মডিউল তৈরি করতে জানি না। এরকম make drivers/usb/serial/option.ko, উদাহরণস্বরূপ, নিহত Module.symversফাইল, এবং আপনি আপনার মূল সমস্যা দিয়ে শেষ। M=প্যারামিটারটি ব্যবহার করে এটি মারা যায় না, তবে আপনাকে নির্দিষ্ট পথে সমস্ত মডিউল তৈরি করতে হবে - এবং আমি এখনও এর আশেপাশে কোনও উপায় পাইনি।


জিনিসগুলি করার সর্বোত্তম উপায় বলে মনে হচ্ছে আপনি যদি একই গাছের সংস্করণে মডিউলটি সংকলন করেন ...
ট্র্যাভিও

2

দৌড়ানোর আগে আপনার অবশ্যই অবিকল অনুরূপ কার্নেল কনফিগারেশন ব্যবহার করতে হবে make prepare। এছাড়াও, আপনি যদি এটি গাছের বাইরে তৈরি করে থাকেন তবে আপনার বর্তমানে চলমান কার্নেলের সাথে মিলে যাওয়া নির্দিষ্ট অভিন্ন কার্নেল শিরোনামের সাথে এটি তৈরি করা প্রয়োজন (অথবা আপনি যদি সংকলনের সময় এটি চালাচ্ছেন না তবে লক্ষ্যটি এক)।


"mrproper তৈরি করুন", "সিপি / বুট / কনফিগারেশন - $ (uname -r) .config", "ওল্ডকনফিগ তৈরি করুন", "প্রস্তুত করুন", "স্ক্রিপ্ট তৈরি করুন" সংকলন প্রস্তুত করার জন্য আমি এই নির্দেশাবলী ব্যবহার করেছি। আমি জানতে চাই যে আমি সঠিক কনফিগারেশন ফাইলটি অনুলিপি করেছি কিনা? দেখে মনে হচ্ছে কেবল একটি কনফিগার আছে যা / বুট / এ আমার কার্নেল সংস্করণটির সাথে মেলে। মন্তব্য বাক্সটির কোনও বিন্যাস নেই বলে বিন্যাসের জন্য দুঃখিত ....
স্পেসসি

হ্যাঁ, এটি সঠিক বলে মনে হচ্ছে। আপনি কোথায় বিল্ডটি চালাচ্ছেন, এবং যদি শীর্ষ স্তরের ডিরেক্টরি থেকে নেই, তবে আপনি কোন সাবডিরস মানটি দিয়ে যাচ্ছেন?
ড্যানিয়েল টি চেন

জবাবের জন্য ধন্যবাদ. যখন আমি ইউএসবিড.কম তৈরির চেষ্টা করেছি। আমি এই কমান্ডটি "মডিউলগুলি SUBDIRS = ড্রাইভার / hid / usbhid তৈরি করুন" ব্যবহার করেছি
স্পেসসি

আমি যখন "মডিউলগুলি SUBDIRS = ড্রাইভারগুলি / hid / usbhid" তৈরি করবো তখন আমি নিম্নলিখিত সতর্কতাটি পেয়েছি "সতর্কতা: প্রতীক সংস্করণ ডাম্প /usr/src/linux-source-2.6.31/Module.symvers অনুপস্থিত; মডিউলগুলি থাকবে কোনও নির্ভরতা এবং রূপান্তর নেই ""
স্পেসসি

@ এসপিসিসি আপনার সমস্যাটি তদন্ত করার সাথে সাথে আপনি গ্রহণ করছেন এমন পদক্ষেপগুলি সহ আপনার মূল প্রশ্নটি আপডেট করুন। তারপরে ড্যান তার উত্তরটি আপডেট করবে এবং আপনি যতক্ষণ না সমাহিত হয়ে যাওয়া মন্তব্যগুলির একটি স্ট্রিংয়ের পরিবর্তে এটি সন্ধান না করা অবধি আপডেট করতে থাকবেন, আরও টিপসের জন্য গাইডটি
জর্জি কাস্ত্রো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.