আমি কি নিজের প্রোগ্রাম থেকে হার্ডওয়ার ঘড়ির কুকুরের জন্য হার্ট বিট পাঠাতে পারি?


14

স্টিভ রবিলার্ড এখানে প্রদত্ত প্রশ্ন এবং চমৎকার উত্তর অনুসরণ করে:

আমি কীভাবে একটি রাস্পবেরি পাই শক্তভাবে পুনরায় সেট করব?

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

ধন্যবাদ।


উত্তর:


7

আপনি এবং এটি বেশ সহজ। আরপিআইতে একটি লিনাক্স মডিউল রয়েছে যা মানক লিনাক্স ওয়াচডগ এপিআই প্রয়োগ করে। আপনি এখানে এর নথিপত্র পেতে পারেন ।

এখন আপনি যদি এটি পড়ে থাকেন তবে আপনি জানতে পারবেন যে একটি বিশেষ ডিভাইস ফাইল রয়েছে /dev/watchdogএবং এটি ব্যবহার করার জন্য watchdogআপনাকে এই ফাইলটি খুলতে হবে এবং কিছু ডেটা লিখতে হবে (এক বাইট, 'ভি' বাদে অন্য কিছু লিখতে ভাল যা আমি ' আমি পরে ব্যাখ্যা করছি) সময়ে সময়ে। আপনি যদি এই ফাইলটিতে বেশি দিন কিছু না লিখেন তবে watchdogএকটি রিবুট ট্রিগার করবে। আপনি এখানে একটি উদাহরণ প্রোগ্রাম (খুব সহজ) খুঁজে পেতে পারেন ।

লক্ষ্য করুন একটি স্বাভাবিক অবস্থায়, যদি আপনি বন্ধ /dev/watchdog, watchdogপ্রতিবন্ধী হতে পারে। 'ম্যাজিক ক্লোজ ফিচার' নামে একটি বিশেষ মোড রয়েছে যা এটি আরপিআই ড্রাইভার দ্বারা প্রয়োগ করা হয়েছে বলে মনে হয় তবে এএফআইএকি এটি ডিফল্ট কার্নেল কনফিগারেশনটিতে সক্ষম নয় (CONFIG_WATCHDOG_NOWAYOUT বিকল্প)। এই ক্ষেত্রে, /dev/watchdogঅ্যাপ্লিকেশনটি বন্ধ করার ঠিক আগে আপনি এটিতে 'ভি' না লিখলে বন্ধ করে দিলেও রিবুট ট্রিগার করা হবে।

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

এছাড়াও আইওএসটিএল এপিআই রয়েছে যা আপনাকে আরও কিছু করার অনুমতি দেয় watchdog। উদাহরণস্বরূপ, আপনি একটি পৃথক সময়সীমা নির্ধারণ করতে পারেন - ডাব্লুআইডিওসিওএসইটিটিমিওট (আইপিআই ড্রাইভার দ্বারা সমর্থিত বলে মনে হচ্ছে) বা টাইমআউট - ডাব্লুআইডিওসি_জেটটিমিওউটের সাথে আইওসিটিএল (যা সমর্থিত বলে মনে হয়) can আপনি এটি ডিফল্ট সময়সীমা (10 সেকেন্ড) সংশোধন করতে ব্যবহার করতে চাইতে পারেন। তবে 16 সেকেন্ডের হার্ড সীমা রয়েছে। এখানে একটি উদাহরণ:

int timeout = 15;
int fd = open("/dev/watchdog", O_WRONLY);
ioctl(fd, WDIOC_SETTIMEOUT, &timeout);

আপনি চাইলে কোনও অক্ষর লেখার পরিবর্তে WDIOC_KEEPALIVE সহ আইওসিটিএলও ব্যবহার করতে পারেন। উভয় পদ্ধতিই বৈধ।


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

ধন্যবাদ। আমি এটা কাজ পেয়েছিলাম! BCD2708_wdog / etc / মডিউলগুলিতে যুক্ত করার পরে আমি আমার বোধগম্যতা যাচাই করার জন্য একটি সাধারণ ভিবি.এনইটি পরীক্ষার অ্যাপ্লিকেশন তৈরি করেছি: টাইমার চলমান এবং fs.WriteByte শুরু করতে নতুন সিস্টেম.আইও.ফায়ালস্ট্রিম (fn, IO.FileMode.Open) হিসাবে Dim fs। এইচ) এরপরে fs.Flush () এটিকে হৃদস্পন্দন প্রেরণ করুন। দুর্দান্ত কাজ!
গাই

WDIOC_KEEPALIVE এর সাংখ্যিক উপস্থাপনা কী? এটি কোথাও খুঁজে পাচ্ছি না।
ফ্ল্যাশ থান্ডার

@ ফ্ল্যাশথান্ডার: এটি এখানে সংজ্ঞায়িত হয়েছে: lxr.free-electrons.com/source/incolve/uapi/linux/watchdog.h#L29 তবে সঠিক মান খুঁজে পেতে আপনাকে কয়েক স্তরের ম্যাক্রো সমাধান করতে হবে। আরও ভাল উপায় হ'ল মূল্য মুদ্রণের জন্য সহজ সি প্রোগ্রাম লিখতে। কেবলমাত্র <লিনাক্স / ওয়াচডোগ। ড। অন্তর্ভুক্ত করুন। আমার সিস্টেমে এটি0x80045705
ক্রিজিসটফ অ্যাডামস্কি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.