ওপেনওয়েভ ফ্যাক্টরি প্রভিশনিং টুল

GitHub-এ উৎস দেখুন

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

কার্যপ্রণালীর তত্ত্ব

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

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

ইন-ডিভাইস কোড যা ইনজেকশন করা প্রভিশনিং ডেটা সনাক্ত করে এবং প্রক্রিয়া করে তা OpenWeave ডিভাইস লেয়ারে অন্তর্নির্মিত, এবং যেকোনো সমর্থিত প্ল্যাটফর্মে সক্ষম করা যেতে পারে। একবার সক্রিয় হয়ে গেলে, ডিভাইসের আরম্ভ করার প্রক্রিয়ার প্রথম দিকে, প্রতিবার ডিভাইস বুট করার সময় কোডটি স্বয়ংক্রিয়ভাবে চলে। কোডটি RAM এর একটি প্ল্যাটফর্ম-নির্দিষ্ট অঞ্চল স্ক্যান করে কাজ করে। মেমরির পরিমিত মাউন্ট সহ প্ল্যাটফর্মগুলিতে (উদাহরণস্বরূপ, <1M), স্ক্যানটি সমস্ত উপলব্ধ RAMকে অন্তর্ভুক্ত করে।

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

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

ফ্যাক্টরি প্রভিশনিং টুল টার্গেট ডিভাইসে ইন্টারফেস করার জন্য বাহ্যিক ডেভেলপমেন্ট টুলের একটি সেটের উপর নির্ভর করে। নিযুক্ত নির্দিষ্ট সরঞ্জামগুলি লক্ষ্য ডিভাইসের ধরণের উপর নির্ভর করে। দুটি ডিভাইস ইন্টারফেস বর্তমানে সমর্থিত:

  • একটি SEGGER J-Link ডিবাগ প্রোব একটি ডিভাইসের JTAG বা SWD পোর্টের সাথে সংযুক্ত
  • একটি USB সিরিয়াল পোর্ট একটি Espressif ESP32 এর সাথে সংযুক্ত

J-Link ইন্টারফেস SEGGER J-Link কমান্ডার টুল (JLinkExe) এর উপর নির্ভর করে, যা হোস্ট মেশিনে আলাদাভাবে ইনস্টল করা আবশ্যক।

ESP32 ইন্টারফেস Espressif esptool.py কমান্ডের উপর নির্ভর করে, যা Espressif-এর ESP-IDF SDK-এর অংশ হিসেবে দেওয়া হয়।

তথ্যের প্রকার যা বিধান করা যেতে পারে

OpenWeave Factory Provisioning Tool নিম্নলিখিত ধরনের তথ্য প্রদান করতে সক্ষম:

  • ডিভাইসের সিরিয়াল নম্বর
  • প্রস্তুতকারকের দ্বারা নির্ধারিত উইভ ডিভাইস আইডি
  • প্রস্তুতকারকের দ্বারা নির্ধারিত উইভ সার্টিফিকেট এবং ব্যক্তিগত কী
  • ওয়েভ পেয়ারিং কোড
  • পণ্য সংশোধন নম্বর
  • উৎপাদনের তারিখ

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

তথ্য সরবরাহের উত্স

নিম্নলিখিত উপায়ে ফ্যাক্টরি প্রভিশনিং টুলে ডিভাইস প্রভিশনিং তথ্য সরবরাহ করা যেতে পারে:

  • একটি কমান্ড লাইন আর্গুমেন্ট
  • একটি প্রভিশনিং CSV ফাইল ব্যবহার করা
  • নেস্ট প্রভিশনিং সার্ভার থেকে মান আনার মাধ্যমে

কমান্ড লাইন

সহজতম ফর্মে, ডিভাইস প্রভিশনিং তথ্য সরাসরি ওপেনওয়েভ ফ্যাক্টরি প্রভিশনিং টুলে কমান্ড লাইনে নির্দিষ্ট করা হয়। উদাহরণ স্বরূপ:

./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000001 \
    --pairing-code NESTUS --mfg-date 2019/04/01

বাইনারি ডেটা মান, যেমন উইভ সার্টিফিকেট এবং ব্যক্তিগত কী, বেস-64 স্ট্রিং হিসাবে বা কাঁচা (বাইনারী) আকারে পছন্দসই ডেটা ধারণকারী ফাইলগুলির নাম হিসাবে নির্দিষ্ট করা যেতে পারে।

উপলব্ধ কমান্ড লাইন আর্গুমেন্টের সম্পূর্ণ তালিকার জন্য নীচে দেখুন।

CSV ফাইলের ব্যবস্থা করা হচ্ছে

ডিভাইসের বাল্ক প্রভিশনিং মিটমাট করার জন্য, ফ্যাক্টরি প্রভিশনিং টুল একটি CSV-ফরম্যাটেড প্রভিশনিং ডেটা ফাইল থেকে প্রভিশনিং ডেটাও পড়তে পারে। এই ফাইলের কলামগুলি নির্দিষ্ট প্রভিশনিং ডেটা প্রকারের সাথে সঙ্গতিপূর্ণ প্রত্যাশিত - অর্থাৎ, Serial_Num , Certificate , Private_Key , ইত্যাদি৷ ফাইলের সারিগুলি নির্দিষ্ট ডিভাইসগুলির জন্য পৃথক মান দেয়, Weave ডিভাইস আইডি ( Device_Id ) দ্বারা সূচীকৃত৷ প্রভিশনিং করার জন্য নির্দিষ্ট ডিভাইসের আইডি অবশ্যই কমান্ড লাইনে উল্লেখ করতে হবে। উদাহরণ স্বরূপ:

./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000001 \
    --prov-csv-file ./dev-provisioning-data.csv

নিম্নলিখিত CSV কলাম সমর্থিত:

নাম বিন্যাস বর্ণনা
Device_Id 16 হেক্স ডিজিট ওয়েভ ডিভাইস আইডি। উপস্থিত থাকতে হবে।
Serial_Num স্ট্রিং ডিভাইসের সিরিয়াল নম্বর।
Certificate বেস-64 স্ট্রিং প্রস্তুতকারকের দ্বারা নির্ধারিত উইভ ডিভাইস শংসাপত্র।
Private_Key বেস-64 স্ট্রিং প্রস্তুতকারকের দ্বারা নির্ধারিত উইভ প্রাইভেট কী।
Pairing_Code স্ট্রিং ওয়েভ পেয়ারিং কোড।
Product_Rev পূর্ণসংখ্যা পণ্য সংশোধন নম্বর।
Mfg_Date YYYY/MM/DD ডিভাইস উত্পাদন তারিখ.

CSV ফাইলে কলাম যেকোন ক্রমে প্রদর্শিত হতে পারে। Device_Id ব্যতীত সমস্ত কলাম ঐচ্ছিক। CSV ফাইলে উপস্থিত নয় এমন কোনো মান ডিভাইসে সহজভাবে প্রবিধান করা হয় না।

ব্যবহারকারী CSV ফাইল ছাড়াও কমান্ড লাইনে পৃথক প্রভিশনিং মান নির্দিষ্ট করতে পারে, এই ক্ষেত্রে কমান্ড লাইনের মান ফাইলের তুলনায় অগ্রাধিকার পাবে।

ফ্যাক্টরি প্রভিশনিং টুল দ্বারা CSV ফাইল ফরম্যাট সমর্থন weave টুলের gen-provisioning-data কমান্ডের আউটপুটের সাথে সামঞ্জস্যপূর্ণ।

নেস্ট প্রভিশনিং সার্ভার

ফ্যাক্টরি প্রভিশনিং টুল একটি HTTPS ভিত্তিক প্রোটোকল ব্যবহার করে নেস্ট প্রভিশনিং সার্ভার থেকে নির্বাচিত প্রভিশনিং তথ্য আনয়ন সমর্থন করে। প্রভিশনিং সার্ভার প্রোটোকলটি ম্যানুফ্যাকচারার-অ্যাসাইন করা উইভ ডিভাইস সার্টিফিকেট, সংশ্লিষ্ট প্রাইভেট কী এবং প্রভিশনিং সার্ভার থেকে ওয়েভ পেয়ারিং কোড আনতে ব্যবহার করা যেতে পারে।

প্রভিশনিং সার্ভারের নেটওয়ার্ক অবস্থান প্রভিশনিং টুল কমান্ড লাইনে একটি বেস URL সরবরাহ করে নির্দিষ্ট করা হয়। কমান্ড লাইনে ওয়েভ ডিভাইস আইডি নির্দিষ্ট করে কাঙ্ক্ষিত প্রভিশনিং তথ্য নির্বাচন করা হয়। উদাহরণ স্বরূপ:

./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000001 \
    --prov-server https://192.168.172.2:8000/

ব্যবহারকারী প্রভিশনিং সার্ভার URL ছাড়াও কমান্ড লাইনে পৃথক প্রভিশনিং মান নির্দিষ্ট করতে পারে। এই ক্ষেত্রে, কমান্ড লাইনে প্রদত্ত মানগুলি সার্ভার দ্বারা প্রত্যাবর্তিত মানগুলির উপর অগ্রাধিকার দেয়৷

ফ্যাক্টরি প্রভিশনিং সমর্থন সক্রিয়/অক্ষম করা

ডিভাইস ফার্মওয়্যারে OpenWeave ফ্যাক্টরি বিধানের জন্য সমর্থন WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING কম্পাইল-টাইম কনফিগারেশন বিকল্প দ্বারা নিয়ন্ত্রিত হয়। এই বিকল্পটি ডিফল্টরূপে সক্রিয় করা হয়। অ্যাপ্লিকেশনটির WeaveProjectConfig.h ফাইলের বিকল্পটিকে ওভাররাইড করে বৈশিষ্ট্যটি নিষ্ক্রিয় করা যেতে পারে৷ উদাহরণ স্বরূপ:

#define WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 0

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

ফ্যাক্টরি প্রভিশনিং টুল চালানো

OpenWeave Factory Provisioning Tool নিম্নলিখিত কমান্ড লাইন বিকল্পগুলিকে সমর্থন করে:

বিকল্প বর্ণনা
--target <string> টার্গেট ডিভাইসের ধরন। পছন্দগুলি হল: nrf52840 , esp32
--load-addr <hex-digits> ডিভাইস মেমরিতে ঠিকানা যেখানে প্রভিশনিং ডেটা লেখা হবে।
--ভার্বোস, -ভি আউটপুট ভার্বোসিটি স্তর সামঞ্জস্য করুন। বার্বোসিটি বাড়ানোর জন্য একাধিক আর্গুমেন্ট ব্যবহার করুন।
--সিরিয়াল-সংখ্যা <স্ট্রিং> ডিভাইসের সিরিয়াল নম্বর সেট করুন।
--ডিভাইস-আইডি <হেক্স-ডিজিট> প্রস্তুতকারকের দ্বারা নির্ধারিত ডিভাইস আইডি সেট করুন।
--device-cert <base-64> | <ফাইল-নাম> প্রস্তুতকারকের দ্বারা নির্ধারিত উইভ ডিভাইস শংসাপত্র সেট করুন।
--device-key <base-64> | <ফাইল-নাম> প্রস্তুতকারকের দ্বারা নির্ধারিত উইভ ডিভাইস ব্যক্তিগত কী সেট করুন।
--পেয়ারিং-কোড <string> ডিভাইস পেয়ারিং কোড সেট করুন।
--product-rev <পূর্ণসংখ্যা> ডিভাইসের জন্য পণ্য সংশোধন সেট করুন.
--mfg-তারিখ <YYYY/MM/DD> | আজ | এখন ডিভাইসের উত্পাদন তারিখ সেট করুন।
--jlink-cmd <path-name> JLink কমান্ডের পথ। 'JLinkExe'-তে ডিফল্ট।
--jlink-যদি SWD | JTAG জে-লিংক ইন্টারফেসের ধরন। SWD-এ ডিফল্ট।
--jlink-গতি <পূর্ণসংখ্যা> | অভিযোজিত | স্বয়ংক্রিয় জে-লিংক ইন্টারফেসের গতি।
--jlink-sn <string> জে-লিংক প্রোব সিরিয়াল নম্বর।
--esptool-cmd <path-name> esptool কমান্ডের পথ। 'esptool.py'-এ ডিফল্ট।
--পোর্ট <পথ-নাম> ESP32 এর জন্য COM পোর্ট ডিভাইসের নাম। ডিফল্ট /tty/USB0।
--গতি <পূর্ণসংখ্যা> COM পোর্টের জন্য বড রেট। ডিফল্ট 115200।
--prov-csv-file <file-name> একটি প্রভিশনিং CSV ফাইল থেকে ডিভাইস প্রভিশনিং ডেটা পড়ুন।
--প্রোভ-সার্ভার <url> একটি প্রভিশনিং সার্ভার থেকে ডিভাইস প্রভিশনিং ডেটা পড়ুন।
--অক্ষম-সার্ভার-বৈধকরণ HTTPS ব্যবহার করার সময়, প্রভিশনিং সার্ভার দ্বারা উপস্থাপিত শংসাপত্রের বৈধতা অক্ষম করুন।

উদাহরণ

নিম্নলিখিত কমান্ডটি ডিভাইস আইডি, সিরিয়াল নম্বর, পণ্য সংশোধন এবং পেয়ারিং কোড নির্দিষ্ট মানগুলিতে সেট করে। উত্পাদন তারিখ বর্তমান তারিখে সেট করা হয়েছে। এবং ডিভাইস শংসাপত্র এবং ব্যক্তিগত কী openweave-core সোর্স রিপোজিটরির সাথে সরবরাহ করা একটি CSV ফাইলে প্রদত্ত মান পরীক্ষা করার জন্য সেট করা হয়েছে।

./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000042 \
    --serial-num JAYS_DEVICE_42 --product-rev 1 --pairing-code NESTUS --mfg-date today \
    --prov-csv-file ~/projects/openweave-core/certs/development/device/test-dev-provisioning-data.csv