আমি কীভাবে জানতে পারি যে কোনও সিরিয়াল বন্দরটি আসলে ডিভাইসটি না খোলে ডেটা প্রেরণ করছে?


10

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

সিরিয়াল লাইনটি হার্টবিট দ্বারা খোলা হওয়ায় আমি কেবল সিরিয়াল ডিভাইসটি খুলতে এবং ডেটা নিজেই পড়তে পারি না।

তাই আমি কিছু অপ্রত্যক্ষ চিহ্নের সন্ধান করতে শুরু করি। আমি এখন পর্যন্ত কেবলমাত্র পার্থক্য খুঁজে পেয়েছি বিষয়বস্তু মধ্যে /proc/tty/driver/serial। এটি সংযুক্ত থাকাকালীন দেখতে এটির মতো দেখাচ্ছে:

# cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:2722759 rx:2718165 brk:1 RTS|CTS|DTR|DSR|CD

এবং সংযোগ বিচ্ছিন্ন হওয়ার পরে:

# cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:2725233 rx:2720703 brk:1 RTS|DTR

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

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

সুতরাং প্রশ্নটি হল: আমার পদ্ধতিটি কি "সঠিক", না আমার কি আরও ভাল বিকল্প রয়েছে যা আমি অবগত নই?

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


একটি যুক্তিসঙ্গত সূচনা এবং সহজেই পরীক্ষা করা হয়েছে বলে মনে হচ্ছে। আপনার সিস্টেমে '/ sys / ডিভাইস / প্ল্যাটফর্ম / সিরিয়াল 8250 / tty / ttyS0 /' এর অধীনে বা আপনার অনুরূপ কিছু থাকতে পারে।
rickhg12hs

উত্তর:


5

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

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

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

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


"ডিমন" জিনিসটি একটি চতুর ধারণা। যাইহোক, আমি এটিকে বাস্তবায়ন করতে যাচ্ছি না কারণ আমি আশঙ্কা করছি যে এটি স্থায়িত্ব বাগের উত্স হয়ে উঠবে। আমি / proc থেকে সংকেতগুলি পড়তে এবং কেবল আগত / আগত সিঙ্গেলের উপস্থিতি বা অনুপস্থিতি নির্দেশ করে থাকব। এটা আমার জন্য যথেষ্ট.
পিটার কোভাক

এটি শ্রোডঞ্জারের বিড়ালের মতো। en.wikipedia.org/wiki/Schr%C3%B6dinger%27s_cat
Ufoguy

0

আপনাকে অন্য প্রান্তের সাথে সংযুক্ত একটি ডিভাইস রয়েছে তা জানাতে একটি উপস্থিতি নির্দেশক রয়েছে তবে এটি optionচ্ছিক, সংক্রমণ উপস্থিতি সংকেত সহ বা তার বাইরে কাজ করে।

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