Eclipse ব্যবহার করে কার্নেল ২.6 এর জন্য একটি "হ্যালো ওয়ার্ল্ড" ডিভাইস ড্রাইভার লিখছেন


9

লক্ষ্য

আমি উবুন্টুতে একটি সাধারণ ডিভাইস ড্রাইভার লেখার চেষ্টা করছি। আমি Eclipse (বা ড্রাইভার আইকন প্রোগ্রামিংয়ের জন্য উপযুক্ত একটি ভাল আইডিই) ব্যবহার করে এটি করতে চাই। কোডটি এখানে:

#include <linux/module.h>

static int __init hello_world( void )
{
  printk( "hello world!\n" );
  return 0;
}

static void __exit goodbye_world( void )
{
  printk( "goodbye world!\n" );
}

module_init( hello_world );
module_exit( goodbye_world );

আমার প্রচেষ্টা

কিছু গবেষণার পরে, আমি ড্রাইভার বিকাশের জন্য এক্লিপস সিটিডি ব্যবহার করার সিদ্ধান্ত নিয়েছি (যদিও আমি এখনও নিশ্চিত নই যে এটি মাল্টি-থ্রেডিং ডিবাগিং সরঞ্জামগুলি সমর্থন করে)। তাই আমি:

  1. VMWare ভার্চুয়াল মেশিনে উবুন্টু 11.04 ডেস্কটপ x86 ইনস্টল করা হয়েছে ,
  2. সিন্যাপটিক প্যাকেজ ম্যানেজার ব্যবহার করে ইনস্টল করা eclipse-cdtএবং লিনাক্স-শিরোলেখ -২.6.৩৮-৮ ,
  3. এটির উপরে একটি C Projectনামযুক্ত TestDriver1এবং অনুলিপি কোড তৈরি করেছে,
  4. makeনিম্নলিখিত কাস্টমাইজড বিল্ড কমান্ডে ডিফল্ট বিল্ড কমান্ডটি পরিবর্তন করা হয়েছে :

make -C /lib/modules/2.6.38-8-generic/build M=/home/isaac/workspace/TestDriver1

সমস্যাটি

আমি যখন গ্রহনটি ব্যবহার করে এই প্রকল্পটি নির্মাণের চেষ্টা করি তখন আমি একটি ত্রুটি পাই। বিল্ডের জন্য এখানে লগ আছে:

**** প্রকল্পের টেস্টড্রাইভার 1 এর জন্য কনফিগারেশন তৈরি করুন ডিবাগ ****

Make -C /lib/modules/2.6.38-8- generic/build M = / home / isaac / workpace / TestDriver1 all

তৈরি করুন: ডিরেক্টরি '/usr/src/linux-headers-2.6.38-8-generic প্রবেশ করানো হচ্ছে

তৈরি করুন: *** vmlinux', needed byসকলকে লক্ষ্য বানানোর কোনও নিয়ম নেই '। স্টপ।

তৈরি করুন: ডিরেক্টরি ছেড়ে চলেছেন '/usr/src/linux-headers-2.6.38-8- জেনারিক'

মজার বিষয় হচ্ছে, আমি যখন এই প্রকল্পটি তৈরির shellপরিবর্তে ব্যবহার করি তখন আমি কোনও ত্রুটি পাই না eclipse। ব্যবহার করতে shell, আমি শুধু একটি তৈরি Makefileধারণকারী obj-m += TestDriver1.oএবং উপরোক্ত ব্যবহার makeনির্মাণের কমান্ড।

সুতরাং, গ্রহনের সাথে অবশ্যই কিছু ভুল হতে হবে Makefile। হতে পারে এটি vmlinuxআর্কিটেকচার (?) বা বর্তমানের আর্কিটেকচারটি x86 এর মতো কোনও কিছুর সন্ধান করছে । এটি ভিএমওয়্যারের কারণে হতে পারে?

আমি যেমন বুঝতে পেরেছি, eclipseস্বয়ংক্রিয়ভাবে মেকফিলগুলি তৈরি করে এবং ম্যানুয়ালি এটিকে সংশোধন করা ভবিষ্যতে ত্রুটির কারণ হতে পারে বা পরিচালনা পরিচালনা করতে makefileঅসুবিধা হয়।

সুতরাং, আমি কীভাবে এই প্রকল্পটি গ্রহনে সংকলন করতে পারি?

উত্তর:


5

আমি আপনার সাথে প্রায় একই অবস্থানে আছি অনুসরণ করছেন এই istructions আমি ভবন কার্নেল নিজেই, এবং একটি একক মডিউলটির সাফল্য ছিল।

Eclipse কে পুরো কার্নেল নয়, একটি নির্দিষ্ট ড্রাইভার সংকলন করতে প্রধান নিবন্ধে তিনটি ধাপ (40 ~ 42) যুক্ত করেছি।

  1. Eclipse Plus সিডিটি ডাউনলোড এবং ইনস্টল করুন।
  2. সংজ্ঞায়িত করতে CONFIG_*এবং উত্পন্ন করতে আপনার কার্নেলটি কনফিগার করুন এবং তৈরি করুন autoconf.h। এটি Eclipse ডাউনলোড ও ইনস্টল করার আগে বা পরে করা যেতে পারে।
  3. আপনার সঠিক কার্নেল উত্স রয়েছে তা নিশ্চিত করুন (যেমন আপনি নিশ্চিত হন যে আপনি ডান গিট শাখায় আছেন)। আপনি যদি পরে অন্য কোনও শাখা পরীক্ষা করে দেখেন তবে এটি ঠিক আছে তবে আপনাকে উত্সটি পুনরায় সূচিকাগুলি করতে হবে এবং এতে প্রায় 20 মিনিট সময় লাগে।
  4. গ্রহন শুরু করুন।
  5. File-> New-> ক্লিক করুনC Project
  6. যেমন একটি প্রকল্পের নাম পূরণ করুন my_kernel
  7. ডিফল্ট অবস্থান ব্যবহার করুন বাক্সটি আনচেক করুন এবং আপনার কার্নেলের রুট ডিরেক্টরিটি লোকেশন বাক্সে টাইপ করুন।
  8. প্রকল্পের ধরণ: ফলকটিতে মেকফিল প্রকল্পটি ক্লিক করুন এবং খালি প্রকল্প নির্বাচন করুন
  9. ডানদিকে, নির্বাচন করুন Linux GCC
  10. ক্লিক করুন Advanced settings... এবং একটি সম্পত্তি ডায়ালগ পপ আপ হবে।
  11. বামদিকে রিসোর্স নির্বাচন করুন এবং তারপরে টেক্সট ফাইল এনকোডিং বিভাগে, অন্যান্য এবং ISO-8859-1বাক্সে নির্বাচন করুন, তারপরে প্রয়োগ ক্লিক করুন
  12. C/C++ Generalবাম দিকে নির্বাচন খুলুন ।
  13. ক্লিক করুন Preprocessor Include Paths
  14. GNU Cভাষা তালিকায় নির্বাচন করুন
  15. CDT User Setting Entriesসেটিং এন্ট্রি তালিকায় নির্বাচন করুন
  16. উপর ক্লিক করুন Add.... উপরের বাম ড্রপডাউন থেকে প্রিপ্রসেসর ম্যাক্রোস ফাইল চয়ন করুন, উপরের ডান ড্রপডাউন থেকে প্রকল্পের পথ এবং include/generated/autoconf.hফাইল পাঠ্য বাক্সে প্রবেশ করুন । (দ্রষ্টব্য: পুরোনো কার্নেলের [? প্রাক 2.6.36] টি, অবস্থান autoconf.hহয় include/linux/autoconf.h)
  17. এছাড়াও আপনি ব্যবহার করছেন এমন কোনও ম্যাক্রো ফাইল যুক্ত করুন।
  18. সূচক ক্লিক করুন
  19. প্রকল্প নির্দিষ্ট সেটেলিং বাক্স সক্ষম করুনটিকে চেকমার্ক করুন।
  20. আনডেক সূচক উত্স ফাইলগুলি বিল্ডটিতে অন্তর্ভুক্ত নেই
  21. ফাইলগুলি সূচি আপ-ফ্রন্ট বাক্সে সাফ করুন।
  22. বাম দিকের পাথ এবং চিহ্নগুলিতে ক্লিক করুন।
  23. অন্তর্ভুক্ত ট্যাবটি নির্বাচন করুন এবং তারপরে নির্বাচন করুন GNU C
  24. ক্লিক করুন Add...
  25. ক্লিক করুন Workspace... তারপরে আপনার কার্নেলের অন্তর্ভুক্ত ডিরেক্টরিটি নির্বাচন করুন
  26. অন্য অ্যাড, ওয়ার্কস্পেস এবং অ্যাড করুন arch/architecture/include, যেমন,arch/powerpc/include
  27. # Symbolsট্যাবে ক্লিক করুন
  28. ক্লিক করুন Add...
  29. নামটি সেট করুন __KERNEL__
  30. মানটি সেট করুন 1এবং ঠিক আছে ক্লিক করুন
  31. উত্স অবস্থান ট্যাব ক্লিক করুন
  32. আপনার প্রকল্পের জন্য টুইস্টি ক্লিক করুন।
  33. ফিল্টার আইটেমটি নির্বাচন করুন এবং ফিল্টার সম্পাদনা ক্লিক করুন ...
  34. একাধিক যোগ করুন ক্লিক করুন ... এবং তারপরে আপনার কার্নেল উত্সের সমস্ত খিলান / * ডিরেক্টরি ব্যবহার করুন যা ব্যবহার করা হবে না (যেমন আপনি যে আর্কিটেকচারের জন্য ব্যবহার করছেন না এমন সমস্তগুলি)
  35. সেই কথোপকথনটি খারিজ করতে আবার ঠিক আছে এবং ঠিক আছে ক্লিক করুন।
  36. বৈশিষ্ট্য সংলাপে ঠিক আছে ক্লিক করুন।
  37. সি প্রকল্প সংলাপে সমাপ্তি ক্লিক করুন।
  38. প্রকল্পে ডান ক্লিক করুন এবং সূচি নির্বাচন করুন এবং পুনর্নির্মাণ নির্বাচন করুন
  39. এটি সম্পূর্ণ হতে প্রায় 20 মিনিট সময় নেয়।
  40. আপনার প্রকল্পের সেটিংটি খুলুন, এ যান C/C++ build -> Behaviour (tab)
  41. Build (Incremental buil)চেকবক্সটি চেক করুন এবং পাঠ্যবক্সে আপনার মডিউল পথ যুক্ত করুন (আমার ক্ষেত্রে M=drivers/servo/dynamixel)।
  42. যখন তুমি মডিউল প্রস্তুত এবং আপনি কার্নেল কম্পাইল 41 পুনরাবৃত্তি এবং প্রতিস্থাপন করতে চান M=..সঙ্গে all

1

আপনি যদি সূর্যগ্রহণ সহ ড্রাইভার বিকাশ করতে চান তবে আপনাকে অন্যভাবে এটি করতে হবে।

আপনাকে অটোমেক, অটোজেন, পিকেজি-কনফিগারেশন ইত্যাদির উপর নজর রাখতে হবে, একটি অটোটুল প্রকল্প তৈরি করতে হবে এবং এটিকে গ্রহনে আমদানি করতে হবে। এক্সিলিপ-সিডিটি এর প্রস্তাব দেওয়া উচিত অন্যথায় আপনি 'অটোটুলস-প্লাগইন' ইনস্টল করতে মিস করেছেন (সঠিক নাম সম্পর্কে অনিশ্চিত, স্মৃতি থেকে এটি লেখার জন্য)।

দুর্ভাগ্যজনকভাবে বা কৃতজ্ঞতা স্বরূপ যে গ্রহন-সিডিটি একটি শালীন মেকফিল পরিচালনা করতে পারে, সি জাভা নয়, কেবল এই ধারণাটি ত্যাগ করুন।


ধন্যবাদ। আমি autotoolsশীঘ্রই প্লাগইন চেক করব । ড্রাইভার প্রোগ্রামিংয়ের জন্য আপনি কি আরও ভাল আইডিই জানেন? আপনি কি মনে করেন যে আমি (একটি অলস ভিএস ব্যবহারকারী যার লিনাক্সের অভিজ্ঞতা নেই) পরিচালনা করতে পারি makefile? makefileবড় প্রকল্পগুলিতে কি সত্যই পরিচালনা করা যায়?
ইসহাক

আমি খুব অলস ভিএস ব্যবহারকারীও ছিলাম এবং অটোটুলগুলিতে মাস্টারিংয়ের একটি খাড়া শেখার বক্ররেখা থাকতে হবে তবে এটি খুব সার্থক, কেবল লিনাক্সের জন্য নয় while Eclipse চারপাশের সেরা আইডিইগুলির মধ্যে একটি, তবে অটোটুল প্রকল্পগুলি এতই বৈচিত্র্যযুক্ত যে কোনও আইডিই সমস্ত সম্ভাবনাগুলি পার্স করতে পারে না। জিনির চেষ্টা করুন যদি আপনি এটি সঠিকভাবে করতে চান তবে অঞ্জুটা এবং কোডেলাইট চেষ্টা করুন যদি আপনি ভিএস 6 পছন্দ করেন তবে সর্বদা কমান্ড লাইন সংকলনে দক্ষ হন।
aquaherd

1

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

http://linux.dell.com/dkms/

আপডেট ...

ডি কেএমএস http://en.commune.dell.com/techcenter/os-applications/w/wiki/2463.linux-projects.aspx এ সরানো হয়েছে

এই টিউটোরিয়ালস / ডিকেএমএসের তাত্ক্ষণিক পরিচয় (ডেল প্রকল্প পৃষ্ঠার লিঙ্কগুলি): লিনাক্স জার্নাল নিবন্ধ , পাওয়ার সলিউশন পেপার , অটোয়া লিনাক্স সিম্পোজিয়াম পেপার

দ্রুত ড্রাইভার মোতায়েনের জন্য ব্যবহৃত ডিকেএমএস। উদাহরণস্বরূপ আমার উবুন্টু মেশিনে DKMS ব্যবহার করে কার্নেল মডিউলগুলি:

dkms status

bcmwl, 6.20.155.1+bdcom, 3.5.0-41-generic, x86_64: installed
bcmwl, 6.20.155.1+bdcom, 3.5.0-42-generic, x86_64: installed
bcmwl, 6.20.155.1+bdcom, 3.5.0-43-generic, x86_64: installed
nvidia, 313.26, 3.5.0-42-generic, x86_64: installed
nvidia, 313.26, 3.5.0-43-generic, x86_64: installed
vboxhost, 4.3.0, 3.5.0-42-generic, x86_64: installed
vboxhost, 4.3.0, 3.5.0-43-generic, x86_64: installed

এই কোডটি আমি আগে লিখেছি, এটি DKMS হ্যালো ওয়ার্ল্ড হিসাবে সহায়ক হতে পারে। https://github.com/sneetsher/RTD-DM5408-Driver-Port-for-Linux


1

1> আপনি এই আদেশটি দিয়ে চেষ্টা করতে পারেন

"মেক" -> "/ ইউএসআর / বিন / মেক"

/usr/bin/make -C /lib/modules/2.6.38-8-generic/build M=/home/isaac/workspace/TestDriver1

2> ডিরেক্টরিতে আপনার হ্যালো শব্দের কোড, ক্রিয়েট ফাইলের নাম "মেকফিল" সংরক্ষণ করুন

obj-m := NameofyourHelloWold.o 

KDIR  := /lib/modules/2.6.38-8-generic/build

PWD   := $(shell pwd)

default:
    $(MAKE) -C $(KDIR) M=$(PWD) modules
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.