AAOS-এ VirtIO সমর্থন করার জন্য প্রয়োজনীয় বেশিরভাগ পরিবর্তনগুলির মধ্যে HAL বাস্তবায়ন স্তরে এবং Android কমন কার্নেলের নীচের পরিবর্তনগুলি জড়িত৷ অ্যান্ড্রয়েড ফ্রেমওয়ার্ক AAOS গেস্ট ভিএম কার্নেলে VirtIO ড্রাইভার ব্যবহার করে একটি জেনেরিক হার্ডওয়্যার-অ্যাগনস্টিক HAL এর সাথে যোগাযোগ করে, যা VirtIO প্রোটোকল ব্যবহার করে হোস্ট সাইডে VirtIO ডিভাইসগুলির সাথে যোগাযোগ করে। হোস্ট সাইডে VirtIO ডিভাইসগুলি SoC-নির্দিষ্ট ডিভাইস ড্রাইভার ব্যবহার করে শারীরিক HW অ্যাক্সেস করতে পারে।
VirtIO ড্রাইভার এবং VirtIO ডিভাইসের মধ্যে যোগাযোগ virtqueue
মাধ্যমে হয়, যা স্ক্যাটার গ্যাদার লিস্টের DMA-এর মতো রিং বাফার। VM-এর মধ্যে VirtIO বার্তা আদান-প্রদানের জন্য MMIO বা PCI-এর মতো বেশ কিছু পরিবহন ব্যবহার করা যেতে পারে।
কিছু ক্ষেত্রে, আন্ত-ভিএম যোগাযোগের জন্য vsock
ব্যবহার করা হয়েছে। যানবাহন HAL, অডিও কন্ট্রোল, এবং ডাম্পস্টেট যোগাযোগগুলি একটি পিয়ার এজেন্টের সাথে একটি vsock
ইন্টারফেসের উপর একটি পৃথক VM-এ একটি সংযোগ ব্যবহার করে সমর্থিত। GRPC-vsock
এই অ-প্রমিত সাবসিস্টেমগুলি অ্যাক্সেস করতে ব্যবহৃত হয়। অ্যান্ড্রয়েড সোর্স ট্রিতে GRPC পরিবর্তন করা হয়েছে vsock
এর ঠিকানা বিন্যাসের সাথে vsock:CID:PORT_NUMBER
।

অডিও
ভার্চুয়ালাইজড AAOS-এ, Android গেস্ট VM অডিও অ্যাক্সেস করতে virtio-snd
ব্যবহার করতে পারে। virtio-snd
ভার্চুয়ালাইজড পিসিএম ডিভাইসগুলিকে Android VM-তে প্রদান করে যাতে অডিও HAL বাস্তবায়ন TinyALSA লাইব্রেরির সাথে ভার্চুয়ালাইজড সাউন্ড ডিভাইসগুলির সাথে যোগাযোগ করতে পারে।
ডিফল্ট অডিও HAL বাস্তবায়ন AOSP-এ /device/google/trout/hal/audio/6.0
এ অবস্থিত। OEMগুলি তাদের প্ল্যাটফর্মের জন্য ro.vendor.trout.audiohal.{in,out}_period_{ms,count}
সংশোধন করতে পারে৷ OEMগুলি /device/google/trout/aosp_trout_common.mk.
অডিও কন্ট্রোল HAL AAOS-এ অডিও ফোকাস পরিচালনা করে। উদাহরণস্বরূপ, যখন সিস্টেম জরুরী শব্দ বাজায়, তখন পটভূমিতে বাজানো মিউজিক নিঃশব্দ করার প্রয়োজন হতে পারে। অডিও কন্ট্রোল HAL এই পরিস্থিতিতে মিউট করার জন্য মিউজিক বাজানো অ্যাপগুলিকে বিজ্ঞপ্তি দেয়। ভার্চুয়ালাইজড সিস্টেমে, শব্দগুলি অন্যান্য VM থেকে আসতে পারে। রেফারেন্স বাস্তবায়নে, AAOS গেস্ট ভিএম-এ একটি অডিও কন্ট্রোল সার্ভার ডেমন চলছে, যা অন্যান্য ভিএম থেকে অডিও ফোকাস অনুরোধগুলি পেতে GRPC-vsock
ব্যবহার করে। হোস্ট VM device/google/trout/hal/audiocontrol/2.0/libandroid_audio_controller
ব্যবহার করে AAOS কে অডিও নিয়ন্ত্রণের অনুরোধ পাঠাতে পারে। libandroid_audio_controller
অডিও ফোকাস ধারণ করলে, ফোকাস প্রকাশ না হওয়া পর্যন্ত এটি AAOS-এ হার্টবিট পাঠাতে থাকে।

ব্লুটুথ
ব্লুটুথ বাস্তবায়ন নীচের চিত্রিত নকশার উপর ভিত্তি করে।

ব্লুটুথ হ্যান্ডস-ফ্রি প্রোফাইল
trout
ব্লুটুথ হ্যান্ডস-ফ্রি প্রোফাইল (HFP) সক্ষম করতে, অডিও নিয়ন্ত্রণ সমর্থন করার জন্য VirtIO সাউন্ড ডিভাইসের স্পেসিফিকেশন বাড়ানো হয়েছে। এই পদ্ধতি ব্যবহার করে, হোস্ট/হাইপারভাইজার সাইডে একটি VirtIO সাউন্ড ডিভাইস HFP সম্পর্কিত এই তিনটি অডিও নিয়ন্ত্রণ প্রদান করে:
-
hfp_enable
-
hfp_set_sampling_rate
-
hfp_volume
যখন AAOS একটি গেস্ট VM হিসাবে চলে, তখন AAOS এই অডিও নিয়ন্ত্রণগুলি সেট করতে TinyAlsa ব্যবহার করে৷ HFP ব্যবহারের ক্ষেত্রে সক্ষম করতে, হোস্ট/হাইপারভাইজার সেই অনুযায়ী বিক্রেতা-নির্দিষ্ট রাউটিং এবং ক্রমাঙ্কন সম্পাদন করে।
ব্লুটুথ বাস্তবায়ন নীচের নকশা চিত্রের উপর ভিত্তি করে।

ডাম্পস্টেট
ভার্চুয়ালাইজড AAOS-এর জন্য বাগ রিপোর্ট তৈরি করার সময়, হোস্ট VM তথ্য অন্তর্ভুক্ত করা মূল্যবান যাতে ডেভেলপারদের সিস্টেমের আরও ব্যাপক দৃষ্টিভঙ্গি থাকে। এটি সম্পন্ন করার জন্য, trout
রেফারেন্স বাস্তবায়ন IDumpstateDevice
HAL প্রয়োগ করে, যা GRPC-vsock
এর মাধ্যমে হোস্ট VM তথ্য সংগ্রহ করে। ডাম্পিং লগগুলি dumpstate_board.txt
এ থাকাকালীন `tar`-প্যাকেজ করা হোস্ট VM তথ্যের নাম দেওয়া হয় dumpstate_board.bin
।
এক্সিকিউট করার জন্য কমান্ড কনফিগার করতে:
- নীচের ফাইল থেকে একটি XML ফাইলে কনফিগারেশনের বিবরণ অনুলিপি করুন, উদাহরণস্বরূপ,
config.xml
।<dumpstateHalConfiguration version="1.0"> <services> <service name="coqos-virtio-blk" command="/bin/journalctl --no-pager -t coqos-virtio-blk"/> <service name="coqos-virtio-net" command="/bin/journalctl --no-pager -t coqos-virtio-net"/> <service name="coqos-virtio-video" command="/bin/journalctl --no-pager -t coqos-virtio-video"/> <service name="coqos-virtio-console" command="/bin/journalctl --no-pager -t coqos-virtio-console"/> <service name="coqos-virtio-rng" command="/bin/journalctl --no-pager -t coqos-virtio-rng"/> <service name="coqos-virtio-vsock" command="/bin/journalctl --no-pager -t coqos-virtio-vsock"/> <service name="coqos-virtio-gpu-virgl" command="/bin/journalctl --no-pager -t coqos-virtio-gpu-virgl"/> <service name="coqos-virtio-scmi" command="/bin/journalctl --no-pager -t coqos-virtio-scmi"/> <service name="coqos-virtio-input" command="/bin/journalctl --no-pager -t coqos-virtio-input"/> <service name="coqos-virtio-snd" command="/bin/journalctl --no-pager -t coqos-virtio-snd"/> <service name="dumpstate_grpc_server" command="/bin/journalctl --no-pager -t dumpstate_grpc_server"/> <service name="systemd" command="/bin/journalctl --no-pager -t systemd"/> <service name="systemctl" command="/bin/systemctl status"/> <service name="vehicle_hal_grpc_server" command="/bin/journalctl --no-pager -t vehicle_hal_grpc_server"/> </services> <systemLogs> <service name="dmesg" command="/bin/dmesg -kuPT"/> </systemLogs> </dumpstateHalConfiguration>
- চালু করার সময় ডাম্পস্টেট সার্ভারে নতুন XML ফাইলের পাথ পাস করুন। যেমন:
--config_file my_config.xml
এক্সটেন্ডেড ভিউ সিস্টেম (EVS)
এক্সটেন্ডেড ভিউ সিস্টেম (EVS) রিয়ার-ভিউ এবং সার্উন্ড-ভিউ ক্যামেরা দ্বারা ক্যাপচার করা ভিডিও প্রদর্শন করতে ব্যবহৃত হয়। ভার্চুয়ালাইজড AAOS-এ, EVS স্ট্যাক ভার্চুয়ালাইজড V4L2 স্ট্রিমিং ডিভাইস থেকে ভিডিও স্ট্রিম অ্যাক্সেস করতে পারে যা VirtIO-ভিডিও ড্রাইভার ব্যবহার করে।
গ্যারেজ মোড
আরও তথ্যের জন্য, গ্যারেজ মোড দেখুন।
গ্যারেজ মোডে প্রবেশ এবং প্রস্থান করা যানবাহন HAL দ্বারা প্রেরিত AP_POWER_STATE_REQ
বৈশিষ্ট্য দ্বারা ট্রিগার হয়৷ ভার্চুয়ালাইজেশন মোডে, গ্যারেজ মোড হোস্টের দিক থেকে ট্রিগার হয়। Android বন্ধ না হওয়া পর্যন্ত, Android VM-এর জন্য ভার্চুয়াল ডিভাইস প্রদান করতে হোস্ট VM চালু থাকা উচিত। হোস্ট VM-এর VHAL সার্ভার AAOS গেস্ট VM-এ শাটডাউন সংকেত পাঠায়। VHAL ক্লায়েন্ট সিগন্যাল পাওয়ার পর, AAOS VM গ্যারেজ মোডে প্রবেশ করে এবং হোস্ট VM সক্রিয় রাখতে হার্টবিট সিগন্যাল পাঠাতে শুরু করে।
গ্লোবাল নেভিগেশন স্যাটেলাইট সিস্টেম (GNSS)
trout
1.0-এ, virtio-console
উপর GNSS ভার্চুয়ালাইজেশনের জন্য সমর্থন যোগ করা হয়েছে। বাস্তবায়নটি হোস্ট থেকে অতিথির কাছে কাঁচা পরিমাপ এবং অবস্থান সংশোধনের বিনিময় সমর্থন করে।
ডেটা এক্সচেঞ্জ ফর্ম্যাট হল GnssLogger অ্যাপ দ্বারা ব্যবহৃত CSV। রেফারেন্স বাস্তবায়নে, কারণ নেটিভ GNSS ড্রাইভার উপলব্ধ নয়, মক ডেটা উপলব্ধ করা হয় তবে একটি নেটিভ ড্রাইভার কোনও গেস্ট-সাইড পরিবর্তন ছাড়াই প্রয়োগ করা যেতে পারে। trout
সোর্স কোডের অংশ হিসেবে একটি নমুনা মক হোস্ট এজেন্ট প্রদান করা হয়।
বর্তমান বাস্তবায়ন GNSS প্রারম্ভিকতা এবং সহায়ক GNSS (AGNSS) হোস্ট OS পরিবেশ দ্বারা পরিচালিত হবে বলে আশা করে।

গ্রাফিক্স
যখন AAOS অন্যান্য স্বয়ংচালিত অপারেটিং সিস্টেমের পাশাপাশি অতিথি VM হিসাবে চলছে, তখন Android-এর GPU বা ডিসপ্লে কন্ট্রোলারে সরাসরি অ্যাক্সেস নাও থাকতে পারে। এই ক্ষেত্রে, Mesa বা goldfish-opengl
এবং Android গেস্ট VM এবং virtio-gpu
ডিভাইসে একটি virtio-gpu
ড্রাইভার GPU অ্যাক্সেস করতে ব্যবহার করা যেতে পারে।
অ্যান্ড্রয়েড গেস্ট ভিএম-এ, মেসা বা goldfish-opengl
OpenGLES কমান্ডগুলিকে যথাক্রমে একটি গ্যালিয়াম স্ট্রীমে বা একটি স্বয়ংক্রিয়-উত্পন্ন GLES স্ট্রীমে এনকোড করে। virtio-gpu
কার্নেল ড্রাইভার পরিবহন হিসাবে ব্যবহৃত হয়। হোস্ট সাইডে, virglrenderer
(Mesa-এর জন্য) এবং vulkan-cereal
( goldfish-opengl
এর জন্য) বিদ্যমান GPU ড্রাইভারের উপরে ডিকোড করা কমান্ড স্ট্রিম রিপ্লে করে। AAOS রেফারেন্স প্ল্যাটফর্ম trout
শুধুমাত্র ভলকান সমর্থন সহ OpenGL ES সমর্থন করে, ভবিষ্যতে প্রকাশে প্রত্যাশিত।

সেন্সর
যখন AAOS অন্যান্য স্বয়ংচালিত অপারেটিং সিস্টেমের পাশাপাশি অতিথি VM হিসাবে চলছে, তখন Android এর সেন্সরগুলিতে সরাসরি অ্যাক্সেস নাও থাকতে পারে। এই ক্ষেত্রে, Android গেস্ট VM-এ Virtio-SCMI ড্রাইভার এবং Host VM-এ VirtIO-SCMI ডিভাইস সেন্সর অ্যাক্সেস করতে ব্যবহার করা হয়। AAOS ভার্চুয়ালাইজেশন রেফারেন্স প্ল্যাটফর্ম একটি জেনেরিক এবং HW-অ্যাগনস্টিক সেন্সর HAL প্রদান করে যা সেন্সরগুলি অ্যাক্সেস করার জন্য ARM-ভিত্তিক SoC-এর জন্য ব্যবহার করা যেতে পারে।
সেন্সর HAL Linux কার্নেল IIO সাবসিস্টেমে IIO SCMI ড্রাইভারের সাথে যোগাযোগ করে, যেটি সেন্সর আবিষ্কার ও কনফিগার করতে, সেন্সর ডেটা পড়তে এবং সেন্সর মান পরিবর্তন সম্পর্কে অবহিত হতে ARM সিস্টেম কন্ট্রোল অ্যান্ড ম্যানেজমেন্ট ইন্টারফেস (SCMI) স্পেসিফিকেশন দ্বারা প্রদত্ত SCMI সেন্সর ম্যানেজমেন্ট প্রোটোকল ব্যবহার করে।
IIO SCMI ড্রাইভার VirtIO SCMI ড্রাইভার ব্যবহার করে, যা virtio-scmi
স্পেসিফিকেশনে উল্লেখিত VirtIO ট্রান্সপোর্ট প্রোটোকল ব্যবহার করে হোস্ট VM-এ VirtIO SCMI ডিভাইসের সাথে SCMI বার্তা বিনিময় করতে। VirtIO SCMI ডিভাইসের SoC-নির্দিষ্ট সেন্সর ড্রাইভারের মাধ্যমে সেন্সরগুলিতে সরাসরি অ্যাক্সেস রয়েছে।

সেন্সর HAL অবস্থান
সেন্সর HAL এর রেফারেন্স বাস্তবায়ন, যা VirtIO SCMI ব্যবহার করে, device/google/trout/hal/sensors
এ অবস্থিত।
সেন্সর HAL কনফিগারেশন
সেন্সর HAL-কে Android গাড়ির সেন্সর সমন্বয় ব্যবস্থা মেনে চলতে হোস্ট VM থেকে প্রাপ্ত সেন্সর ডেটা পরিবর্তন করতে হতে পারে। সেন্সর কনফিগারেশনের স্কিমা device/google/trout/hal/sensors/2.0/config/sensor_hal_configuration.xsd
এ পাওয়া যাবে।
OEMs sensor_hal_configuration.xml
এ সেন্সর কনফিগারেশন, যেমন ওরিয়েন্টেশন এবং অবস্থান প্রদান করতে পারে এবং ফাইলটিকে /odm/etc/sensors/
অথবা /vendor/etc/sensors/
এ কপি করতে পারে। একটি নমুনা সেন্সর কনফিগারেশন নীচে প্রদান করা হয়েছে:
<sensorHalConfiguration version="1.0" xmlns:xi="http://www.w3.org/2001/XInclude"> <modules> <module halName="android.hardware.sensors@2.0-Google-IIO-Subhal" halVersion="2.0"> <sensors> <sensor name="scmi.iio.accel" type="1"> <configuration> <!-- Attribute rotate denotes if HAL needs to modify the sensor data to comply with // the Android car sensor coordinate system --> <orientation rotate="true"> <!-- Attribute map denotes the indexes of data in sensor data received --> <!-- Attribute negate denotes if data needs to be negated --> <x map="0" negate="false"/> <y map="1" negate="true"/> <z map="2" negate="true"/> </orientation> <location> <!-- Attribute x, y, z denotes location of the sensor placement --> <x>10</x> <y>15</y> <z>20</z> </location> </configuration> </sensor> </sensors> </module> </modules> </sensorHalConfiguration>
যানবাহন HAL
যানবাহন HAL বাস্তবায়ন দুটি উপাদান নিয়ে গঠিত:
- ক্লায়েন্ট ভার্চুয়ালাইজড AAOS-এ Android দ্বারা ব্যবহৃত API প্রদান করে
- সার্ভার। হার্ডওয়্যারের সাথে সরাসরি যোগাযোগ করে, যেমন যানবাহন বাস (বা একটি এমুলেটর)।
ভার্চুয়ালাইজেশনে, VHAL সার্ভার হোস্ট VM-এ চলে। VHAL ক্লায়েন্ট এবং সার্ভার GRPC-vsock
এর মাধ্যমে যোগাযোগ করে (আরো তথ্যের জন্য, device/google/trout/hal/vehicle/2.0/proto/VehicleServer.proto
দেখুন)। OEMs যোগাযোগ APIs ওভাররাইড করে GRPC ছাড়া অন্য একটি ভিন্ন পরিবহন প্রোটোকল ব্যবহার করতে পারে। উদাহরণের জন্য, device/google/trout/hal/vehicle/2.0/GrpcVehicle{Client,Server}.cpp
দেখুন।
অন্যান্য সাবসিস্টেম
VirtIO ইতিমধ্যেই ব্লক স্টোরেজ, নেটওয়ার্ক, কনসোল, ইনপুট, সকেট এবং এনট্রপির মতো উপাদানগুলির জন্য একটি সু-সংজ্ঞায়িত ইন্টারফেস প্রদান করে। এই সাব-সিস্টেমের জন্য, AAOS ড্রাইভারকে যেমন-ই ব্যবহার করে, যেমন virtio-blk
, virtio-input
, virtio-console
, এবং virtio-net
।
ভার্চুয়ালাইজড AAOS রেফারেন্স প্ল্যাটফর্মে, Wi-Fi একটি VirtWifi
ওয়্যারলেস নেটওয়ার্ক সক্ষম করতে mac80211_hwsim
এর সাথে সমর্থিত, যা তারপরে হোস্ট VM-এ নেটওয়ার্ক ট্রাফিক পাঠাতে virtio-net
টানেল ব্যবহার করে, যার প্রকৃত Wi-Fi নেটওয়ার্কে সরাসরি অ্যাক্সেস রয়েছে।
AAOS-এ VirtIO সমর্থন করার জন্য প্রয়োজনীয় বেশিরভাগ পরিবর্তনগুলির মধ্যে HAL বাস্তবায়ন স্তরে এবং Android কমন কার্নেলের নীচের পরিবর্তনগুলি জড়িত৷ অ্যান্ড্রয়েড ফ্রেমওয়ার্ক AAOS গেস্ট ভিএম কার্নেলে VirtIO ড্রাইভার ব্যবহার করে একটি জেনেরিক হার্ডওয়্যার-অ্যাগনস্টিক HAL এর সাথে যোগাযোগ করে, যা VirtIO প্রোটোকল ব্যবহার করে হোস্ট সাইডে VirtIO ডিভাইসগুলির সাথে যোগাযোগ করে। হোস্ট সাইডে VirtIO ডিভাইসগুলি SoC-নির্দিষ্ট ডিভাইস ড্রাইভার ব্যবহার করে শারীরিক HW অ্যাক্সেস করতে পারে।
VirtIO ড্রাইভার এবং VirtIO ডিভাইসের মধ্যে যোগাযোগ virtqueue
মাধ্যমে হয়, যা স্ক্যাটার গ্যাদার লিস্টের DMA-এর মতো রিং বাফার। VM-এর মধ্যে VirtIO বার্তা আদান-প্রদানের জন্য MMIO বা PCI-এর মতো বেশ কিছু পরিবহন ব্যবহার করা যেতে পারে।
কিছু ক্ষেত্রে, আন্ত-ভিএম যোগাযোগের জন্য vsock
ব্যবহার করা হয়েছে। যানবাহন HAL, অডিও কন্ট্রোল, এবং ডাম্পস্টেট যোগাযোগগুলি একটি পিয়ার এজেন্টের সাথে একটি vsock
ইন্টারফেসের উপর একটি পৃথক VM-এ একটি সংযোগ ব্যবহার করে সমর্থিত। GRPC-vsock
এই অ-প্রমিত সাবসিস্টেমগুলি অ্যাক্সেস করতে ব্যবহৃত হয়। অ্যান্ড্রয়েড সোর্স ট্রিতে GRPC পরিবর্তন করা হয়েছে vsock
এর ঠিকানা বিন্যাসের সাথে vsock:CID:PORT_NUMBER
।

অডিও
ভার্চুয়ালাইজড AAOS-এ, Android গেস্ট VM অডিও অ্যাক্সেস করতে virtio-snd
ব্যবহার করতে পারে। virtio-snd
ভার্চুয়ালাইজড পিসিএম ডিভাইসগুলিকে Android VM-তে প্রদান করে যাতে অডিও HAL বাস্তবায়ন TinyALSA লাইব্রেরির সাথে ভার্চুয়ালাইজড সাউন্ড ডিভাইসগুলির সাথে যোগাযোগ করতে পারে।
ডিফল্ট অডিও HAL বাস্তবায়ন AOSP-এ /device/google/trout/hal/audio/6.0
এ অবস্থিত। OEMগুলি তাদের প্ল্যাটফর্মের জন্য ro.vendor.trout.audiohal.{in,out}_period_{ms,count}
সংশোধন করতে পারে৷ OEMগুলি /device/google/trout/aosp_trout_common.mk.
অডিও কন্ট্রোল HAL AAOS-এ অডিও ফোকাস পরিচালনা করে। উদাহরণস্বরূপ, যখন সিস্টেম জরুরী শব্দ বাজায়, তখন পটভূমিতে বাজানো মিউজিক নিঃশব্দ করার প্রয়োজন হতে পারে। অডিও কন্ট্রোল HAL এই পরিস্থিতিতে মিউট করার জন্য মিউজিক বাজানো অ্যাপগুলিকে বিজ্ঞপ্তি দেয়। ভার্চুয়ালাইজড সিস্টেমে, শব্দগুলি অন্যান্য VM থেকে আসতে পারে। রেফারেন্স বাস্তবায়নে, AAOS গেস্ট ভিএম-এ একটি অডিও কন্ট্রোল সার্ভার ডেমন চলছে, যা অন্যান্য ভিএম থেকে অডিও ফোকাস অনুরোধগুলি পেতে GRPC-vsock
ব্যবহার করে। হোস্ট VM device/google/trout/hal/audiocontrol/2.0/libandroid_audio_controller
ব্যবহার করে AAOS কে অডিও নিয়ন্ত্রণের অনুরোধ পাঠাতে পারে। libandroid_audio_controller
অডিও ফোকাস ধারণ করলে, ফোকাস প্রকাশ না হওয়া পর্যন্ত এটি AAOS-এ হার্টবিট পাঠাতে থাকে।

ব্লুটুথ
ব্লুটুথ বাস্তবায়ন নীচের চিত্রিত নকশার উপর ভিত্তি করে।

ব্লুটুথ হ্যান্ডস-ফ্রি প্রোফাইল
trout
ব্লুটুথ হ্যান্ডস-ফ্রি প্রোফাইল (HFP) সক্ষম করতে, অডিও নিয়ন্ত্রণ সমর্থন করার জন্য VirtIO সাউন্ড ডিভাইসের স্পেসিফিকেশন বাড়ানো হয়েছে। এই পদ্ধতি ব্যবহার করে, হোস্ট/হাইপারভাইজার সাইডে একটি VirtIO সাউন্ড ডিভাইস HFP সম্পর্কিত এই তিনটি অডিও নিয়ন্ত্রণ প্রদান করে:
-
hfp_enable
-
hfp_set_sampling_rate
-
hfp_volume
যখন AAOS একটি গেস্ট VM হিসাবে চলে, তখন AAOS এই অডিও নিয়ন্ত্রণগুলি সেট করতে TinyAlsa ব্যবহার করে৷ HFP ব্যবহারের ক্ষেত্রে সক্ষম করতে, হোস্ট/হাইপারভাইজার সেই অনুযায়ী বিক্রেতা-নির্দিষ্ট রাউটিং এবং ক্রমাঙ্কন সম্পাদন করে।
ব্লুটুথ বাস্তবায়ন নীচের নকশা চিত্রের উপর ভিত্তি করে।

ডাম্পস্টেট
ভার্চুয়ালাইজড AAOS-এর জন্য বাগ রিপোর্ট তৈরি করার সময়, হোস্ট VM তথ্য অন্তর্ভুক্ত করা মূল্যবান যাতে ডেভেলপারদের সিস্টেমের আরও ব্যাপক দৃষ্টিভঙ্গি থাকে। এটি সম্পন্ন করার জন্য, trout
রেফারেন্স বাস্তবায়ন IDumpstateDevice
HAL প্রয়োগ করে, যা GRPC-vsock
এর মাধ্যমে হোস্ট VM তথ্য সংগ্রহ করে। ডাম্পিং লগগুলি dumpstate_board.txt
এ থাকাকালীন `tar`-প্যাকেজ করা হোস্ট VM তথ্যের নাম দেওয়া হয় dumpstate_board.bin
।
এক্সিকিউট করার জন্য কমান্ড কনফিগার করতে:
- নীচের ফাইল থেকে একটি XML ফাইলে কনফিগারেশনের বিবরণ অনুলিপি করুন, উদাহরণস্বরূপ,
config.xml
।<dumpstateHalConfiguration version="1.0"> <services> <service name="coqos-virtio-blk" command="/bin/journalctl --no-pager -t coqos-virtio-blk"/> <service name="coqos-virtio-net" command="/bin/journalctl --no-pager -t coqos-virtio-net"/> <service name="coqos-virtio-video" command="/bin/journalctl --no-pager -t coqos-virtio-video"/> <service name="coqos-virtio-console" command="/bin/journalctl --no-pager -t coqos-virtio-console"/> <service name="coqos-virtio-rng" command="/bin/journalctl --no-pager -t coqos-virtio-rng"/> <service name="coqos-virtio-vsock" command="/bin/journalctl --no-pager -t coqos-virtio-vsock"/> <service name="coqos-virtio-gpu-virgl" command="/bin/journalctl --no-pager -t coqos-virtio-gpu-virgl"/> <service name="coqos-virtio-scmi" command="/bin/journalctl --no-pager -t coqos-virtio-scmi"/> <service name="coqos-virtio-input" command="/bin/journalctl --no-pager -t coqos-virtio-input"/> <service name="coqos-virtio-snd" command="/bin/journalctl --no-pager -t coqos-virtio-snd"/> <service name="dumpstate_grpc_server" command="/bin/journalctl --no-pager -t dumpstate_grpc_server"/> <service name="systemd" command="/bin/journalctl --no-pager -t systemd"/> <service name="systemctl" command="/bin/systemctl status"/> <service name="vehicle_hal_grpc_server" command="/bin/journalctl --no-pager -t vehicle_hal_grpc_server"/> </services> <systemLogs> <service name="dmesg" command="/bin/dmesg -kuPT"/> </systemLogs> </dumpstateHalConfiguration>
- চালু করার সময় ডাম্পস্টেট সার্ভারে নতুন XML ফাইলের পাথ পাস করুন। যেমন:
--config_file my_config.xml
এক্সটেন্ডেড ভিউ সিস্টেম (EVS)
এক্সটেন্ডেড ভিউ সিস্টেম (EVS) রিয়ার-ভিউ এবং সার্উন্ড-ভিউ ক্যামেরা দ্বারা ক্যাপচার করা ভিডিও প্রদর্শন করতে ব্যবহৃত হয়। ভার্চুয়ালাইজড AAOS-এ, EVS স্ট্যাক ভার্চুয়ালাইজড V4L2 স্ট্রিমিং ডিভাইস থেকে ভিডিও স্ট্রিম অ্যাক্সেস করতে পারে যা VirtIO-ভিডিও ড্রাইভার ব্যবহার করে।
গ্যারেজ মোড
আরও তথ্যের জন্য, গ্যারেজ মোড দেখুন।
গ্যারেজ মোডে প্রবেশ এবং প্রস্থান করা যানবাহন HAL দ্বারা প্রেরিত AP_POWER_STATE_REQ
বৈশিষ্ট্য দ্বারা ট্রিগার হয়৷ ভার্চুয়ালাইজেশন মোডে, গ্যারেজ মোড হোস্টের দিক থেকে ট্রিগার হয়। Android বন্ধ না হওয়া পর্যন্ত, Android VM-এর জন্য ভার্চুয়াল ডিভাইস প্রদান করতে হোস্ট VM চালু থাকা উচিত। হোস্ট VM-এর VHAL সার্ভার AAOS গেস্ট VM-এ শাটডাউন সংকেত পাঠায়। VHAL ক্লায়েন্ট সিগন্যাল পাওয়ার পর, AAOS VM গ্যারেজ মোডে প্রবেশ করে এবং হোস্ট VM সক্রিয় রাখতে হার্টবিট সিগন্যাল পাঠাতে শুরু করে।
গ্লোবাল নেভিগেশন স্যাটেলাইট সিস্টেম (GNSS)
trout
1.0-এ, virtio-console
উপর GNSS ভার্চুয়ালাইজেশনের জন্য সমর্থন যোগ করা হয়েছে। বাস্তবায়নটি হোস্ট থেকে অতিথির কাছে কাঁচা পরিমাপ এবং অবস্থান সংশোধনের বিনিময় সমর্থন করে।
ডেটা এক্সচেঞ্জ ফর্ম্যাট হল GnssLogger অ্যাপ দ্বারা ব্যবহৃত CSV। রেফারেন্স বাস্তবায়নে, কারণ নেটিভ GNSS ড্রাইভার উপলব্ধ নয়, মক ডেটা উপলব্ধ করা হয় তবে একটি নেটিভ ড্রাইভার কোনও গেস্ট-সাইড পরিবর্তন ছাড়াই প্রয়োগ করা যেতে পারে। trout
সোর্স কোডের অংশ হিসেবে একটি নমুনা মক হোস্ট এজেন্ট প্রদান করা হয়।
বর্তমান বাস্তবায়ন GNSS প্রারম্ভিকতা এবং সহায়ক GNSS (AGNSS) হোস্ট OS পরিবেশ দ্বারা পরিচালিত হবে বলে আশা করে।

গ্রাফিক্স
যখন AAOS অন্যান্য স্বয়ংচালিত অপারেটিং সিস্টেমের পাশাপাশি অতিথি VM হিসাবে চলছে, তখন Android-এর GPU বা ডিসপ্লে কন্ট্রোলারে সরাসরি অ্যাক্সেস নাও থাকতে পারে। এই ক্ষেত্রে, Mesa বা goldfish-opengl
এবং Android গেস্ট VM এবং virtio-gpu
ডিভাইসে একটি virtio-gpu
ড্রাইভার GPU অ্যাক্সেস করতে ব্যবহার করা যেতে পারে।
অ্যান্ড্রয়েড গেস্ট ভিএম-এ, মেসা বা goldfish-opengl
OpenGLES কমান্ডগুলিকে যথাক্রমে একটি গ্যালিয়াম স্ট্রীমে বা একটি স্বয়ংক্রিয়-উত্পন্ন GLES স্ট্রীমে এনকোড করে। virtio-gpu
কার্নেল ড্রাইভার পরিবহন হিসাবে ব্যবহৃত হয়। হোস্ট সাইডে, virglrenderer
(Mesa-এর জন্য) এবং vulkan-cereal
( goldfish-opengl
এর জন্য) বিদ্যমান GPU ড্রাইভারের উপরে ডিকোড করা কমান্ড স্ট্রিম রিপ্লে করে। AAOS রেফারেন্স প্ল্যাটফর্ম trout
শুধুমাত্র ভলকান সমর্থন সহ OpenGL ES সমর্থন করে, ভবিষ্যতে প্রকাশে প্রত্যাশিত।

সেন্সর
যখন AAOS অন্যান্য স্বয়ংচালিত অপারেটিং সিস্টেমের পাশাপাশি অতিথি VM হিসাবে চলছে, তখন Android এর সেন্সরগুলিতে সরাসরি অ্যাক্সেস নাও থাকতে পারে। এই ক্ষেত্রে, Android গেস্ট VM-এ Virtio-SCMI ড্রাইভার এবং Host VM-এ VirtIO-SCMI ডিভাইস সেন্সর অ্যাক্সেস করতে ব্যবহার করা হয়। AAOS ভার্চুয়ালাইজেশন রেফারেন্স প্ল্যাটফর্ম একটি জেনেরিক এবং HW-অ্যাগনস্টিক সেন্সর HAL প্রদান করে যা সেন্সরগুলি অ্যাক্সেস করার জন্য ARM-ভিত্তিক SoC-এর জন্য ব্যবহার করা যেতে পারে।
সেন্সর HAL Linux কার্নেল IIO সাবসিস্টেমে IIO SCMI ড্রাইভারের সাথে যোগাযোগ করে, যেটি সেন্সর আবিষ্কার ও কনফিগার করতে, সেন্সর ডেটা পড়তে এবং সেন্সর মান পরিবর্তন সম্পর্কে অবহিত হতে ARM সিস্টেম কন্ট্রোল অ্যান্ড ম্যানেজমেন্ট ইন্টারফেস (SCMI) স্পেসিফিকেশন দ্বারা প্রদত্ত SCMI সেন্সর ম্যানেজমেন্ট প্রোটোকল ব্যবহার করে।
IIO SCMI ড্রাইভার VirtIO SCMI ড্রাইভার ব্যবহার করে, যা virtio-scmi
স্পেসিফিকেশনে উল্লেখিত VirtIO ট্রান্সপোর্ট প্রোটোকল ব্যবহার করে হোস্ট VM-এ VirtIO SCMI ডিভাইসের সাথে SCMI বার্তা বিনিময় করতে। VirtIO SCMI ডিভাইসের SoC-নির্দিষ্ট সেন্সর ড্রাইভারের মাধ্যমে সেন্সরগুলিতে সরাসরি অ্যাক্সেস রয়েছে।

সেন্সর HAL অবস্থান
সেন্সর HAL এর রেফারেন্স বাস্তবায়ন, যা VirtIO SCMI ব্যবহার করে, device/google/trout/hal/sensors
এ অবস্থিত।
সেন্সর HAL কনফিগারেশন
সেন্সর HAL-কে Android গাড়ির সেন্সর সমন্বয় ব্যবস্থা মেনে চলতে হোস্ট VM থেকে প্রাপ্ত সেন্সর ডেটা পরিবর্তন করতে হতে পারে। সেন্সর কনফিগারেশনের স্কিমা device/google/trout/hal/sensors/2.0/config/sensor_hal_configuration.xsd
এ পাওয়া যাবে।
OEMs sensor_hal_configuration.xml
এ সেন্সর কনফিগারেশন, যেমন ওরিয়েন্টেশন এবং অবস্থান প্রদান করতে পারে এবং ফাইলটিকে /odm/etc/sensors/
অথবা /vendor/etc/sensors/
এ কপি করতে পারে। একটি নমুনা সেন্সর কনফিগারেশন নীচে প্রদান করা হয়েছে:
<sensorHalConfiguration version="1.0" xmlns:xi="http://www.w3.org/2001/XInclude"> <modules> <module halName="android.hardware.sensors@2.0-Google-IIO-Subhal" halVersion="2.0"> <sensors> <sensor name="scmi.iio.accel" type="1"> <configuration> <!-- Attribute rotate denotes if HAL needs to modify the sensor data to comply with // the Android car sensor coordinate system --> <orientation rotate="true"> <!-- Attribute map denotes the indexes of data in sensor data received --> <!-- Attribute negate denotes if data needs to be negated --> <x map="0" negate="false"/> <y map="1" negate="true"/> <z map="2" negate="true"/> </orientation> <location> <!-- Attribute x, y, z denotes location of the sensor placement --> <x>10</x> <y>15</y> <z>20</z> </location> </configuration> </sensor> </sensors> </module> </modules> </sensorHalConfiguration>
যানবাহন HAL
যানবাহন HAL বাস্তবায়ন দুটি উপাদান নিয়ে গঠিত:
- ক্লায়েন্ট ভার্চুয়ালাইজড AAOS-এ Android দ্বারা ব্যবহৃত API প্রদান করে
- সার্ভার। হার্ডওয়্যারের সাথে সরাসরি যোগাযোগ করে, যেমন যানবাহন বাস (বা একটি এমুলেটর)।
ভার্চুয়ালাইজেশনে, VHAL সার্ভার হোস্ট VM-এ চলে। VHAL ক্লায়েন্ট এবং সার্ভার GRPC-vsock
এর মাধ্যমে যোগাযোগ করে (আরো তথ্যের জন্য, device/google/trout/hal/vehicle/2.0/proto/VehicleServer.proto
দেখুন)। OEMs যোগাযোগ APIs ওভাররাইড করে GRPC ছাড়া অন্য একটি ভিন্ন পরিবহন প্রোটোকল ব্যবহার করতে পারে। উদাহরণের জন্য, device/google/trout/hal/vehicle/2.0/GrpcVehicle{Client,Server}.cpp
দেখুন।
অন্যান্য সাবসিস্টেম
VirtIO ইতিমধ্যেই ব্লক স্টোরেজ, নেটওয়ার্ক, কনসোল, ইনপুট, সকেট এবং এনট্রপির মতো উপাদানগুলির জন্য একটি সু-সংজ্ঞায়িত ইন্টারফেস প্রদান করে। এই সাব-সিস্টেমের জন্য, AAOS ড্রাইভারকে যেমন-ই ব্যবহার করে, যেমন virtio-blk
, virtio-input
, virtio-console
, এবং virtio-net
।
ভার্চুয়ালাইজড AAOS রেফারেন্স প্ল্যাটফর্মে, Wi-Fi একটি VirtWifi
ওয়্যারলেস নেটওয়ার্ক সক্ষম করতে mac80211_hwsim
এর সাথে সমর্থিত, যা তারপরে হোস্ট VM-এ নেটওয়ার্ক ট্রাফিক পাঠাতে virtio-net
টানেল ব্যবহার করে, যার প্রকৃত Wi-Fi নেটওয়ার্কে সরাসরি অ্যাক্সেস রয়েছে।
AAOS-এ VirtIO সমর্থন করার জন্য প্রয়োজনীয় বেশিরভাগ পরিবর্তনগুলির মধ্যে HAL বাস্তবায়ন স্তরে এবং Android কমন কার্নেলের নীচের পরিবর্তনগুলি জড়িত৷ অ্যান্ড্রয়েড ফ্রেমওয়ার্ক AAOS গেস্ট ভিএম কার্নেলে VirtIO ড্রাইভার ব্যবহার করে একটি জেনেরিক হার্ডওয়্যার-অ্যাগনস্টিক HAL এর সাথে যোগাযোগ করে, যা VirtIO প্রোটোকল ব্যবহার করে হোস্ট সাইডে VirtIO ডিভাইসগুলির সাথে যোগাযোগ করে। হোস্ট সাইডে VirtIO ডিভাইসগুলি SoC-নির্দিষ্ট ডিভাইস ড্রাইভার ব্যবহার করে শারীরিক HW অ্যাক্সেস করতে পারে।
VirtIO ড্রাইভার এবং VirtIO ডিভাইসের মধ্যে যোগাযোগ virtqueue
মাধ্যমে হয়, যা স্ক্যাটার গ্যাদার লিস্টের DMA-এর মতো রিং বাফার। VM-এর মধ্যে VirtIO বার্তা আদান-প্রদান করতে MMIO বা PCI-এর মতো বেশ কিছু পরিবহন ব্যবহার করা যেতে পারে।
কিছু ক্ষেত্রে, আন্ত-ভিএম যোগাযোগের জন্য vsock
ব্যবহার করা হয়েছে। যানবাহন HAL, অডিও কন্ট্রোল, এবং ডাম্পস্টেট যোগাযোগগুলি একটি পিয়ার এজেন্টের সাথে একটি vsock
ইন্টারফেসের উপর একটি পৃথক VM-এ একটি সংযোগ ব্যবহার করে সমর্থিত। GRPC-vsock
এই অ-প্রমিত সাবসিস্টেমগুলি অ্যাক্সেস করতে ব্যবহৃত হয়। অ্যান্ড্রয়েড সোর্স ট্রিতে GRPC পরিবর্তন করা হয়েছে vsock
এর ঠিকানা বিন্যাসের সাথে vsock:CID:PORT_NUMBER
।

অডিও
ভার্চুয়ালাইজড AAOS-এ, Android গেস্ট VM অডিও অ্যাক্সেস করতে virtio-snd
ব্যবহার করতে পারে। virtio-snd
ভার্চুয়ালাইজড পিসিএম ডিভাইসগুলিকে Android VM-তে প্রদান করে যাতে অডিও HAL বাস্তবায়ন TinyALSA লাইব্রেরির সাথে ভার্চুয়ালাইজড সাউন্ড ডিভাইসগুলির সাথে যোগাযোগ করতে পারে।
ডিফল্ট অডিও HAL বাস্তবায়ন AOSP-এ /device/google/trout/hal/audio/6.0
এ অবস্থিত। OEMগুলি তাদের প্ল্যাটফর্মের জন্য ro.vendor.trout.audiohal.{in,out}_period_{ms,count}
সংশোধন করতে পারে৷ OEMগুলি /device/google/trout/aosp_trout_common.mk.
অডিও কন্ট্রোল HAL AAOS-এ অডিও ফোকাস পরিচালনা করে। উদাহরণস্বরূপ, যখন সিস্টেম জরুরী শব্দ বাজায়, তখন পটভূমিতে বাজানো মিউজিক নিঃশব্দ করার প্রয়োজন হতে পারে। অডিও কন্ট্রোল HAL এই পরিস্থিতিতে মিউট করার জন্য মিউজিক বাজানো অ্যাপগুলিকে বিজ্ঞপ্তি দেয়। ভার্চুয়ালাইজড সিস্টেমে, শব্দগুলি অন্যান্য VM থেকে আসতে পারে। রেফারেন্স বাস্তবায়নে, AAOS গেস্ট ভিএম-এ একটি অডিও কন্ট্রোল সার্ভার ডেমন চলছে, যা অন্যান্য ভিএম থেকে অডিও ফোকাস অনুরোধগুলি পেতে GRPC-vsock
ব্যবহার করে। হোস্ট VM device/google/trout/hal/audiocontrol/2.0/libandroid_audio_controller
ব্যবহার করে AAOS কে অডিও নিয়ন্ত্রণের অনুরোধ পাঠাতে পারে। libandroid_audio_controller
অডিও ফোকাস ধারণ করলে, ফোকাস প্রকাশ না হওয়া পর্যন্ত এটি AAOS-এ হার্টবিট পাঠাতে থাকে।

ব্লুটুথ
ব্লুটুথ বাস্তবায়ন নীচের চিত্রিত নকশার উপর ভিত্তি করে।

ব্লুটুথ হ্যান্ডস-ফ্রি প্রোফাইল
trout
ব্লুটুথ হ্যান্ডস-ফ্রি প্রোফাইল (HFP) সক্ষম করতে, অডিও নিয়ন্ত্রণ সমর্থন করার জন্য VirtIO সাউন্ড ডিভাইসের স্পেসিফিকেশন বাড়ানো হয়েছে। এই পদ্ধতি ব্যবহার করে, হোস্ট/হাইপারভাইজার সাইডে একটি VirtIO সাউন্ড ডিভাইস HFP সম্পর্কিত এই তিনটি অডিও নিয়ন্ত্রণ প্রদান করে:
-
hfp_enable
-
hfp_set_sampling_rate
-
hfp_volume
যখন AAOS একটি গেস্ট VM হিসাবে চলে, তখন AAOS এই অডিও নিয়ন্ত্রণগুলি সেট করতে TinyAlsa ব্যবহার করে৷ HFP ব্যবহারের ক্ষেত্রে সক্ষম করতে, হোস্ট/হাইপারভাইজার সেই অনুযায়ী বিক্রেতা-নির্দিষ্ট রাউটিং এবং ক্রমাঙ্কন সম্পাদন করে।
ব্লুটুথ বাস্তবায়ন নীচের নকশা চিত্রের উপর ভিত্তি করে।

ডাম্পস্টেট
ভার্চুয়ালাইজড AAOS-এর জন্য বাগ রিপোর্ট তৈরি করার সময়, হোস্ট VM তথ্য অন্তর্ভুক্ত করা মূল্যবান যাতে ডেভেলপারদের সিস্টেমের আরও ব্যাপক দৃষ্টিভঙ্গি থাকে। এটি সম্পন্ন করার জন্য, trout
রেফারেন্স বাস্তবায়ন IDumpstateDevice
HAL প্রয়োগ করে, যা GRPC-vsock
এর মাধ্যমে হোস্ট VM তথ্য সংগ্রহ করে। ডাম্পিং লগগুলি dumpstate_board.txt
এ থাকাকালীন `tar`-প্যাকেজ করা হোস্ট VM তথ্যের নাম দেওয়া হয় dumpstate_board.bin
।
এক্সিকিউট করার জন্য কমান্ড কনফিগার করতে:
- নীচের ফাইল থেকে একটি XML ফাইলে কনফিগারেশনের বিবরণ অনুলিপি করুন, উদাহরণস্বরূপ,
config.xml
।<dumpstateHalConfiguration version="1.0"> <services> <service name="coqos-virtio-blk" command="/bin/journalctl --no-pager -t coqos-virtio-blk"/> <service name="coqos-virtio-net" command="/bin/journalctl --no-pager -t coqos-virtio-net"/> <service name="coqos-virtio-video" command="/bin/journalctl --no-pager -t coqos-virtio-video"/> <service name="coqos-virtio-console" command="/bin/journalctl --no-pager -t coqos-virtio-console"/> <service name="coqos-virtio-rng" command="/bin/journalctl --no-pager -t coqos-virtio-rng"/> <service name="coqos-virtio-vsock" command="/bin/journalctl --no-pager -t coqos-virtio-vsock"/> <service name="coqos-virtio-gpu-virgl" command="/bin/journalctl --no-pager -t coqos-virtio-gpu-virgl"/> <service name="coqos-virtio-scmi" command="/bin/journalctl --no-pager -t coqos-virtio-scmi"/> <service name="coqos-virtio-input" command="/bin/journalctl --no-pager -t coqos-virtio-input"/> <service name="coqos-virtio-snd" command="/bin/journalctl --no-pager -t coqos-virtio-snd"/> <service name="dumpstate_grpc_server" command="/bin/journalctl --no-pager -t dumpstate_grpc_server"/> <service name="systemd" command="/bin/journalctl --no-pager -t systemd"/> <service name="systemctl" command="/bin/systemctl status"/> <service name="vehicle_hal_grpc_server" command="/bin/journalctl --no-pager -t vehicle_hal_grpc_server"/> </services> <systemLogs> <service name="dmesg" command="/bin/dmesg -kuPT"/> </systemLogs> </dumpstateHalConfiguration>
- চালু করার সময় ডাম্পস্টেট সার্ভারে নতুন XML ফাইলের পাথ পাস করুন। যেমন:
--config_file my_config.xml
এক্সটেন্ডেড ভিউ সিস্টেম (EVS)
এক্সটেন্ডেড ভিউ সিস্টেম (EVS) রিয়ার-ভিউ এবং সার্উন্ড-ভিউ ক্যামেরা দ্বারা ক্যাপচার করা ভিডিও প্রদর্শন করতে ব্যবহৃত হয়। ভার্চুয়ালাইজড AAOS-এ, EVS স্ট্যাক ভার্চুয়ালাইজড V4L2 স্ট্রিমিং ডিভাইস থেকে ভিডিও স্ট্রিম অ্যাক্সেস করতে পারে যা VirtIO-ভিডিও ড্রাইভার ব্যবহার করে।
গ্যারেজ মোড
আরও তথ্যের জন্য, গ্যারেজ মোড দেখুন।
গ্যারেজ মোডে প্রবেশ এবং প্রস্থান করা যানবাহন HAL দ্বারা প্রেরিত AP_POWER_STATE_REQ
বৈশিষ্ট্য দ্বারা ট্রিগার হয়৷ ভার্চুয়ালাইজেশন মোডে, গ্যারেজ মোড হোস্টের দিক থেকে ট্রিগার হয়। Android বন্ধ না হওয়া পর্যন্ত, Android VM-এর জন্য ভার্চুয়াল ডিভাইস প্রদান করতে হোস্ট VM চালু থাকা উচিত। হোস্ট VM-এর VHAL সার্ভার AAOS গেস্ট VM-এ শাটডাউন সংকেত পাঠায়। VHAL ক্লায়েন্ট সিগন্যাল পাওয়ার পর, AAOS VM গ্যারেজ মোডে প্রবেশ করে এবং হোস্ট VM সক্রিয় রাখতে হার্টবিট সিগন্যাল পাঠাতে শুরু করে।
গ্লোবাল নেভিগেশন স্যাটেলাইট সিস্টেম (GNSS)
trout
1.0-এ, virtio-console
উপর GNSS ভার্চুয়ালাইজেশনের জন্য সমর্থন যোগ করা হয়েছে। বাস্তবায়নটি হোস্ট থেকে অতিথির কাছে কাঁচা পরিমাপ এবং অবস্থান সংশোধনের বিনিময় সমর্থন করে।
ডেটা এক্সচেঞ্জ ফর্ম্যাট হল GnssLogger অ্যাপ দ্বারা ব্যবহৃত CSV। রেফারেন্স বাস্তবায়নে, কারণ নেটিভ GNSS ড্রাইভার উপলব্ধ নয়, মক ডেটা উপলব্ধ করা হয় তবে একটি নেটিভ ড্রাইভার কোনও গেস্ট-সাইড পরিবর্তন ছাড়াই প্রয়োগ করা যেতে পারে। trout
সোর্স কোডের অংশ হিসেবে একটি নমুনা মক হোস্ট এজেন্ট প্রদান করা হয়।
বর্তমান বাস্তবায়ন GNSS প্রারম্ভিকতা এবং সহায়ক GNSS (AGNSS) হোস্ট OS পরিবেশ দ্বারা পরিচালিত হবে বলে আশা করে।

গ্রাফিক্স
যখন AAOS অন্যান্য স্বয়ংচালিত অপারেটিং সিস্টেমের পাশাপাশি অতিথি VM হিসাবে চলছে, তখন Android-এর GPU বা ডিসপ্লে কন্ট্রোলারে সরাসরি অ্যাক্সেস নাও থাকতে পারে। এই ক্ষেত্রে, Mesa বা goldfish-opengl
এবং Android গেস্ট VM এবং virtio-gpu
ডিভাইসে একটি virtio-gpu
ড্রাইভার GPU অ্যাক্সেস করতে ব্যবহার করা যেতে পারে।
অ্যান্ড্রয়েড গেস্ট ভিএম-এ, মেসা বা goldfish-opengl
OpenGLES কমান্ডগুলিকে যথাক্রমে একটি গ্যালিয়াম স্ট্রীমে বা একটি স্বয়ংক্রিয়-উত্পন্ন GLES স্ট্রীমে এনকোড করে। virtio-gpu
কার্নেল ড্রাইভার পরিবহন হিসাবে ব্যবহৃত হয়। হোস্ট সাইডে, virglrenderer
(Mesa-এর জন্য) এবং vulkan-cereal
( goldfish-opengl
এর জন্য) বিদ্যমান GPU ড্রাইভারের উপরে ডিকোড করা কমান্ড স্ট্রিম রিপ্লে করে। AAOS রেফারেন্স প্ল্যাটফর্ম trout
শুধুমাত্র ভলকান সমর্থন সহ OpenGL ES সমর্থন করে, ভবিষ্যতে প্রকাশে প্রত্যাশিত।

সেন্সর
যখন AAOS অন্যান্য স্বয়ংচালিত অপারেটিং সিস্টেমের পাশাপাশি অতিথি VM হিসাবে চলছে, তখন Android এর সেন্সরগুলিতে সরাসরি অ্যাক্সেস নাও থাকতে পারে। এই ক্ষেত্রে, Android গেস্ট VM-এ Virtio-SCMI ড্রাইভার এবং Host VM-এ VirtIO-SCMI ডিভাইস সেন্সর অ্যাক্সেস করতে ব্যবহার করা হয়। AAOS ভার্চুয়ালাইজেশন রেফারেন্স প্ল্যাটফর্ম একটি জেনেরিক এবং HW-অ্যাগনস্টিক সেন্সর HAL প্রদান করে যা সেন্সরগুলি অ্যাক্সেস করার জন্য ARM-ভিত্তিক SoC-এর জন্য ব্যবহার করা যেতে পারে।
সেন্সর HAL Linux কার্নেল IIO সাবসিস্টেমে IIO SCMI ড্রাইভারের সাথে যোগাযোগ করে, যেটি সেন্সর আবিষ্কার ও কনফিগার করতে, সেন্সর ডেটা পড়তে এবং সেন্সর মান পরিবর্তন সম্পর্কে অবহিত হতে ARM সিস্টেম কন্ট্রোল অ্যান্ড ম্যানেজমেন্ট ইন্টারফেস (SCMI) স্পেসিফিকেশন দ্বারা প্রদত্ত SCMI সেন্সর ম্যানেজমেন্ট প্রোটোকল ব্যবহার করে।
IIO SCMI ড্রাইভার VirtIO SCMI ড্রাইভার ব্যবহার করে, যা virtio-scmi
স্পেসিফিকেশনে উল্লেখিত VirtIO ট্রান্সপোর্ট প্রোটোকল ব্যবহার করে হোস্ট VM-এ VirtIO SCMI ডিভাইসের সাথে SCMI বার্তা বিনিময় করতে। VirtIO SCMI ডিভাইসের SoC-নির্দিষ্ট সেন্সর ড্রাইভারের মাধ্যমে সেন্সরগুলিতে সরাসরি অ্যাক্সেস রয়েছে।

সেন্সর HAL অবস্থান
সেন্সর HAL এর রেফারেন্স বাস্তবায়ন, যা VirtIO SCMI ব্যবহার করে, device/google/trout/hal/sensors
এ অবস্থিত।
সেন্সর HAL কনফিগারেশন
সেন্সর HAL-কে Android গাড়ির সেন্সর সমন্বয় ব্যবস্থা মেনে চলতে হোস্ট VM থেকে প্রাপ্ত সেন্সর ডেটা পরিবর্তন করতে হতে পারে। সেন্সর কনফিগারেশনের স্কিমা device/google/trout/hal/sensors/2.0/config/sensor_hal_configuration.xsd
এ পাওয়া যাবে।
OEMs sensor_hal_configuration.xml
এ সেন্সর কনফিগারেশন, যেমন ওরিয়েন্টেশন এবং অবস্থান প্রদান করতে পারে এবং ফাইলটিকে /odm/etc/sensors/
অথবা /vendor/etc/sensors/
এ কপি করতে পারে। একটি নমুনা সেন্সর কনফিগারেশন নীচে প্রদান করা হয়েছে:
<sensorHalConfiguration version="1.0" xmlns:xi="http://www.w3.org/2001/XInclude"> <modules> <module halName="android.hardware.sensors@2.0-Google-IIO-Subhal" halVersion="2.0"> <sensors> <sensor name="scmi.iio.accel" type="1"> <configuration> <!-- Attribute rotate denotes if HAL needs to modify the sensor data to comply with // the Android car sensor coordinate system --> <orientation rotate="true"> <!-- Attribute map denotes the indexes of data in sensor data received --> <!-- Attribute negate denotes if data needs to be negated --> <x map="0" negate="false"/> <y map="1" negate="true"/> <z map="2" negate="true"/> </orientation> <location> <!-- Attribute x, y, z denotes location of the sensor placement --> <x>10</x> <y>15</y> <z>20</z> </location> </configuration> </sensor> </sensors> </module> </modules> </sensorHalConfiguration>
যানবাহন HAL
যানবাহন HAL বাস্তবায়ন দুটি উপাদান নিয়ে গঠিত:
- ক্লায়েন্ট ভার্চুয়ালাইজড AAOS-এ Android দ্বারা ব্যবহৃত API প্রদান করে
- সার্ভার। হার্ডওয়্যারের সাথে সরাসরি যোগাযোগ করে, যেমন যানবাহন বাস (বা একটি এমুলেটর)।
ভার্চুয়ালাইজেশনে, VHAL সার্ভার হোস্ট VM-এ চলে। VHAL ক্লায়েন্ট এবং সার্ভার GRPC-vsock
এর মাধ্যমে যোগাযোগ করে (আরো তথ্যের জন্য, device/google/trout/hal/vehicle/2.0/proto/VehicleServer.proto
দেখুন)। OEMs যোগাযোগ APIs ওভাররাইড করে GRPC ছাড়া অন্য একটি ভিন্ন পরিবহন প্রোটোকল ব্যবহার করতে পারে। উদাহরণের জন্য, device/google/trout/hal/vehicle/2.0/GrpcVehicle{Client,Server}.cpp
দেখুন।
অন্যান্য সাবসিস্টেম
VirtIO ইতিমধ্যেই ব্লক স্টোরেজ, নেটওয়ার্ক, কনসোল, ইনপুট, সকেট এবং এনট্রপির মতো উপাদানগুলির জন্য একটি সু-সংজ্ঞায়িত ইন্টারফেস প্রদান করে। এই সাব-সিস্টেমের জন্য, AAOS ড্রাইভারকে যেমন-ই ব্যবহার করে, যেমন virtio-blk
, virtio-input
, virtio-console
, এবং virtio-net
।
ভার্চুয়ালাইজড AAOS রেফারেন্স প্ল্যাটফর্মে, Wi-Fi একটি VirtWifi
ওয়্যারলেস নেটওয়ার্ক সক্ষম করতে mac80211_hwsim
এর সাথে সমর্থিত, যা তারপরে হোস্ট VM-এ নেটওয়ার্ক ট্রাফিক পাঠাতে virtio-net
টানেল ব্যবহার করে, যার প্রকৃত Wi-Fi নেটওয়ার্কে সরাসরি অ্যাক্সেস রয়েছে।
AAOS-এ VirtIO সমর্থন করার জন্য প্রয়োজনীয় বেশিরভাগ পরিবর্তনগুলির মধ্যে HAL বাস্তবায়ন স্তরে এবং Android কমন কার্নেলের নীচের পরিবর্তনগুলি জড়িত৷ অ্যান্ড্রয়েড ফ্রেমওয়ার্ক AAOS গেস্ট ভিএম কার্নেলে VirtIO ড্রাইভার ব্যবহার করে একটি জেনেরিক হার্ডওয়্যার-অ্যাগনস্টিক HAL এর সাথে যোগাযোগ করে, যা VirtIO প্রোটোকল ব্যবহার করে হোস্ট সাইডে VirtIO ডিভাইসগুলির সাথে যোগাযোগ করে। হোস্ট সাইডে VirtIO ডিভাইসগুলি SoC-নির্দিষ্ট ডিভাইস ড্রাইভার ব্যবহার করে শারীরিক HW অ্যাক্সেস করতে পারে।
VirtIO ড্রাইভার এবং VirtIO ডিভাইসের মধ্যে যোগাযোগ virtqueue
মাধ্যমে হয়, যা স্ক্যাটার গ্যাদার লিস্টের DMA-এর মতো রিং বাফার। VM-এর মধ্যে VirtIO বার্তা আদান-প্রদান করতে MMIO বা PCI-এর মতো বেশ কিছু পরিবহন ব্যবহার করা যেতে পারে।
কিছু ক্ষেত্রে, আন্ত-ভিএম যোগাযোগের জন্য vsock
ব্যবহার করা হয়েছে। যানবাহন HAL, অডিও কন্ট্রোল, এবং ডাম্পস্টেট যোগাযোগগুলি একটি পিয়ার এজেন্টের সাথে একটি vsock
ইন্টারফেসের উপর একটি পৃথক VM-এ একটি সংযোগ ব্যবহার করে সমর্থিত। GRPC-vsock
এই অ-প্রমিত সাবসিস্টেমগুলি অ্যাক্সেস করতে ব্যবহৃত হয়। অ্যান্ড্রয়েড সোর্স ট্রিতে GRPC পরিবর্তন করা হয়েছে vsock
এর ঠিকানা বিন্যাসের সাথে vsock:CID:PORT_NUMBER
।

অডিও
ভার্চুয়ালাইজড AAOS-এ, Android গেস্ট VM অডিও অ্যাক্সেস করতে virtio-snd
ব্যবহার করতে পারে। virtio-snd
ভার্চুয়ালাইজড পিসিএম ডিভাইসগুলিকে Android VM-তে প্রদান করে যাতে অডিও HAL বাস্তবায়ন TinyALSA লাইব্রেরির সাথে ভার্চুয়ালাইজড সাউন্ড ডিভাইসগুলির সাথে যোগাযোগ করতে পারে।
ডিফল্ট অডিও HAL বাস্তবায়ন AOSP-এ /device/google/trout/hal/audio/6.0
এ অবস্থিত। OEMগুলি তাদের প্ল্যাটফর্মের জন্য ro.vendor.trout.audiohal.{in,out}_period_{ms,count}
সংশোধন করতে পারে৷ OEMগুলি /device/google/trout/aosp_trout_common.mk.
অডিও কন্ট্রোল HAL AAOS-এ অডিও ফোকাস পরিচালনা করে। উদাহরণস্বরূপ, যখন সিস্টেম জরুরী শব্দ বাজায়, তখন পটভূমিতে বাজানো মিউজিক নিঃশব্দ করার প্রয়োজন হতে পারে। অডিও কন্ট্রোল HAL এই পরিস্থিতিতে মিউট করার জন্য মিউজিক বাজানো অ্যাপগুলিকে বিজ্ঞপ্তি দেয়। ভার্চুয়ালাইজড সিস্টেমে, শব্দগুলি অন্যান্য VM থেকে আসতে পারে। রেফারেন্স বাস্তবায়নে, AAOS গেস্ট ভিএম-এ একটি অডিও কন্ট্রোল সার্ভার ডেমন চলছে, যা অন্যান্য ভিএম থেকে অডিও ফোকাস অনুরোধগুলি পেতে GRPC-vsock
ব্যবহার করে। হোস্ট VM device/google/trout/hal/audiocontrol/2.0/libandroid_audio_controller
ব্যবহার করে AAOS কে অডিও নিয়ন্ত্রণের অনুরোধ পাঠাতে পারে। libandroid_audio_controller
অডিও ফোকাস ধারণ করলে, ফোকাস প্রকাশ না হওয়া পর্যন্ত এটি AAOS-এ হার্টবিট পাঠাতে থাকে।

ব্লুটুথ
ব্লুটুথ বাস্তবায়ন নীচের চিত্রিত নকশার উপর ভিত্তি করে।

ব্লুটুথ হ্যান্ডস-ফ্রি প্রোফাইল
trout
ব্লুটুথ হ্যান্ডস-ফ্রি প্রোফাইল (HFP) সক্ষম করতে, অডিও নিয়ন্ত্রণ সমর্থন করার জন্য VirtIO সাউন্ড ডিভাইসের স্পেসিফিকেশন বাড়ানো হয়েছে। এই পদ্ধতি ব্যবহার করে, হোস্ট/হাইপারভাইজার সাইডে একটি VirtIO সাউন্ড ডিভাইস HFP সম্পর্কিত এই তিনটি অডিও নিয়ন্ত্রণ প্রদান করে:
-
hfp_enable
-
hfp_set_sampling_rate
-
hfp_volume
যখন AAOS একটি গেস্ট VM হিসাবে চলে, তখন AAOS এই অডিও নিয়ন্ত্রণগুলি সেট করতে TinyAlsa ব্যবহার করে৷ HFP ব্যবহারের ক্ষেত্রে সক্ষম করতে, হোস্ট/হাইপারভাইজার সেই অনুযায়ী বিক্রেতা-নির্দিষ্ট রাউটিং এবং ক্রমাঙ্কন সম্পাদন করে।
ব্লুটুথ বাস্তবায়ন নীচের নকশা চিত্রের উপর ভিত্তি করে।

ডাম্পস্টেট
ভার্চুয়ালাইজড AAOS-এর জন্য বাগ রিপোর্ট তৈরি করার সময়, হোস্ট VM তথ্য অন্তর্ভুক্ত করা মূল্যবান যাতে ডেভেলপারদের সিস্টেমের আরও ব্যাপক দৃষ্টিভঙ্গি থাকে। এটি সম্পন্ন করার জন্য, trout
রেফারেন্স বাস্তবায়ন IDumpstateDevice
HAL প্রয়োগ করে, যা GRPC-vsock
এর মাধ্যমে হোস্ট VM তথ্য সংগ্রহ করে। ডাম্পিং লগগুলি dumpstate_board.txt
এ থাকাকালীন `tar`-প্যাকেজ করা হোস্ট VM তথ্যের নাম দেওয়া হয় dumpstate_board.bin
।
এক্সিকিউট করার জন্য কমান্ড কনফিগার করতে:
- নীচের ফাইল থেকে একটি XML ফাইলে কনফিগারেশনের বিবরণ অনুলিপি করুন, উদাহরণস্বরূপ,
config.xml
।<dumpstateHalConfiguration version="1.0"> <services> <service name="coqos-virtio-blk" command="/bin/journalctl --no-pager -t coqos-virtio-blk"/> <service name="coqos-virtio-net" command="/bin/journalctl --no-pager -t coqos-virtio-net"/> <service name="coqos-virtio-video" command="/bin/journalctl --no-pager -t coqos-virtio-video"/> <service name="coqos-virtio-console" command="/bin/journalctl --no-pager -t coqos-virtio-console"/> <service name="coqos-virtio-rng" command="/bin/journalctl --no-pager -t coqos-virtio-rng"/> <service name="coqos-virtio-vsock" command="/bin/journalctl --no-pager -t coqos-virtio-vsock"/> <service name="coqos-virtio-gpu-virgl" command="/bin/journalctl --no-pager -t coqos-virtio-gpu-virgl"/> <service name="coqos-virtio-scmi" command="/bin/journalctl --no-pager -t coqos-virtio-scmi"/> <service name="coqos-virtio-input" command="/bin/journalctl --no-pager -t coqos-virtio-input"/> <service name="coqos-virtio-snd" command="/bin/journalctl --no-pager -t coqos-virtio-snd"/> <service name="dumpstate_grpc_server" command="/bin/journalctl --no-pager -t dumpstate_grpc_server"/> <service name="systemd" command="/bin/journalctl --no-pager -t systemd"/> <service name="systemctl" command="/bin/systemctl status"/> <service name="vehicle_hal_grpc_server" command="/bin/journalctl --no-pager -t vehicle_hal_grpc_server"/> </services> <systemLogs> <service name="dmesg" command="/bin/dmesg -kuPT"/> </systemLogs> </dumpstateHalConfiguration>
- চালু করার সময় ডাম্পস্টেট সার্ভারে নতুন এক্সএমএল ফাইলের পথটি পাস করুন। যেমন:
--config_file my_config.xml
বর্ধিত ভিউ সিস্টেম (ইভিএস)
এক্সটেন্ডেড ভিউ সিস্টেম (ইভিএস) রিয়ার-ভিউ এবং আশেপাশের ভিউ ক্যামেরা দ্বারা ক্যাপচার করা ভিডিও প্রদর্শন করতে ব্যবহৃত হয়। ভার্চুয়ালাইজড এএওএস-এ, ইভিএস স্ট্যাকটি ভার্চুয়ালাইজড ভি 4 এল 2 স্ট্রিমিং ডিভাইস থেকে ভিডিও স্ট্রিমটি অ্যাক্সেস করতে পারে যা ভার্চিয়ো-ভিডিও ড্রাইভার ব্যবহার করে।
গ্যারেজ মোড
আরও তথ্যের জন্য, গ্যারেজ মোড দেখুন।
গ্যারেজ মোডে প্রবেশ এবং প্রস্থান করা AP_POWER_STATE_REQ
সম্পত্তি দ্বারা যানবাহন এইচএএল দ্বারা প্রেরিত দ্বারা ট্রিগার করা হয়। ভার্চুয়ালাইজেশন মোডে, গ্যারেজ মোড হোস্ট দিক থেকে ট্রিগার করা হয়। অ্যান্ড্রয়েড ভিএম এর জন্য ভার্চুয়াল ডিভাইস সরবরাহ করতে হোস্ট ভিএম চালিত থাকা উচিত, যতক্ষণ না অ্যান্ড্রয়েড চালিত না হয়। হোস্ট ভিএম -এর ভিএইচএল সার্ভারটি এএওএস অতিথি ভিএমকে শাটডাউন সিগন্যাল প্রেরণ করে। সিগন্যাল ভিএইচএল ক্লায়েন্ট পাওয়ার পরে, এএওএস ভিএম গ্যারেজ মোডে প্রবেশ করে এবং হোস্ট ভিএমকে সক্রিয় রাখতে হার্টবিট সংকেত প্রেরণ শুরু করে।
গ্লোবাল নেভিগেশন স্যাটেলাইট সিস্টেম (জিএনএসএস)
trout
১.০-তে, virtio-console
উপর জিএনএসএস ভার্চুয়ালাইজেশনের জন্য সমর্থন যুক্ত করা হয়েছে। বাস্তবায়নটি হোস্ট থেকে অতিথির কাছে কাঁচা পরিমাপ এবং লোকেশন ফিক্সগুলির বিনিময়কে সমর্থন করে।
ডেটা এক্সচেঞ্জ ফর্ম্যাটটি হ'ল জিএনএসএসএলগার অ্যাপ্লিকেশন দ্বারা ব্যবহৃত সিএসভি। রেফারেন্স বাস্তবায়নে, যেহেতু নেটিভ জিএনএসএস ড্রাইভার উপলভ্য নয়, মক ডেটা উপলব্ধ করা হয় তবে কোনও দেশীয় ড্রাইভার কোনও অতিথি-পক্ষের পরিবর্তন ছাড়াই প্রয়োগ করা যেতে পারে। trout
উত্স কোডের অংশ হিসাবে একটি নমুনা মক হোস্ট এজেন্ট সরবরাহ করা হয়।
বর্তমান বাস্তবায়ন আশা করে যে জিএনএসএস সূচনা এবং সহায়তা জিএনএসএস (এজিএনএসএস) হোস্ট ওএস পরিবেশ দ্বারা পরিচালিত হবে।

গ্রাফিক্স
যখন এএওএস অন্যান্য স্বয়ংচালিত অপারেটিং সিস্টেমের পাশাপাশি অতিথি ভিএম হিসাবে চলছে, অ্যান্ড্রয়েডের জিপিইউ বা ডিসপ্লে কন্ট্রোলারে সরাসরি অ্যাক্সেস নাও থাকতে পারে। এই ক্ষেত্রে, মেসা বা goldfish-opengl
এবং অ্যান্ড্রয়েড অতিথি ভিএম এবং virtio-gpu
ডিভাইসে একটি virtio-gpu
ড্রাইভার জিপিইউ অ্যাক্সেস করতে ব্যবহার করা যেতে পারে।
অ্যান্ড্রয়েড অতিথি ভিএম-তে, মেসা বা goldfish-opengl
ওপেনগলস কমান্ডগুলি যথাক্রমে গ্যালিয়াম স্ট্রিম বা একটি অটো-উত্পাদিত গ্লেস স্ট্রিমের মধ্যে এনকোড করে। virtio-gpu
কার্নেল ড্রাইভারটি পরিবহন হিসাবে ব্যবহৃত হয়। হোস্ট সাইডে, virglrenderer
(মেসার জন্য) এবং vulkan-cereal
( goldfish-opengl
জন্য) বিদ্যমান জিপিইউ ড্রাইভারের শীর্ষে ডিকোডেড কমান্ড স্ট্রিমটি পুনরায় খেলুন। এএওএস রেফারেন্স প্ল্যাটফর্ম trout
কেবলমাত্র ভলকান সমর্থন সহ ওপেনগেল এসকে সমর্থন করে, ভবিষ্যতের প্রকাশে প্রত্যাশিত।

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

সেন্সর হাল অবস্থান
সেন্সর এইচএল এর রেফারেন্স বাস্তবায়ন, যা ভার্চিয়ো এসসিএমআই ব্যবহার করে, device/google/trout/hal/sensors
অবস্থিত।
সেন্সর হাল কনফিগারেশন
অ্যান্ড্রয়েড গাড়ি সেন্সর স্থানাঙ্ক সিস্টেমটি মেনে চলার জন্য সেন্সর এইচএআর হোস্ট ভিএম থেকে প্রাপ্ত সেন্সর ডেটা সংশোধন করতে পারে। সেন্সর কনফিগারেশনের জন্য স্কিমা device/google/trout/hal/sensors/2.0/config/sensor_hal_configuration.xsd
পাওয়া যাবে।
OEMS sensor_hal_configuration.xml
-এ ওরিয়েন্টেশন এবং অবস্থান হিসাবে সেন্সর কনফিগারেশন সরবরাহ করতে পারে এবং ফাইলটি /odm/etc/sensors/
বা /vendor/etc/sensors/
অনুলিপি করতে পারে। একটি নমুনা সেন্সর কনফিগারেশন নীচে সরবরাহ করা হয়েছে:
<sensorHalConfiguration version="1.0" xmlns:xi="http://www.w3.org/2001/XInclude"> <modules> <module halName="android.hardware.sensors@2.0-Google-IIO-Subhal" halVersion="2.0"> <sensors> <sensor name="scmi.iio.accel" type="1"> <configuration> <!-- Attribute rotate denotes if HAL needs to modify the sensor data to comply with // the Android car sensor coordinate system --> <orientation rotate="true"> <!-- Attribute map denotes the indexes of data in sensor data received --> <!-- Attribute negate denotes if data needs to be negated --> <x map="0" negate="false"/> <y map="1" negate="true"/> <z map="2" negate="true"/> </orientation> <location> <!-- Attribute x, y, z denotes location of the sensor placement --> <x>10</x> <y>15</y> <z>20</z> </location> </configuration> </sensor> </sensors> </module> </modules> </sensorHalConfiguration>
যানবাহন হাল
যানবাহন এইচএল বাস্তবায়নে দুটি উপাদান রয়েছে:
- ক্লায়েন্ট ভার্চুয়ালাইজড এএওএস -এ অ্যান্ড্রয়েড দ্বারা ব্যবহৃত এপিআই সরবরাহ করে
- সার্ভার। হার্ডওয়্যার যেমন যানবাহন বাস (বা একটি এমুলেটর) এর সাথে সরাসরি যোগাযোগ করে।
ভার্চুয়ালাইজেশনে, ভিএইচএল সার্ভার হোস্ট ভিএম -তে চলে। ভিএইচএল ক্লায়েন্ট এবং সার্ভার GRPC-vsock
মাধ্যমে যোগাযোগ করে (আরও তথ্যের জন্য, device/google/trout/hal/vehicle/2.0/proto/VehicleServer.proto
দেখুন)। OEMS যোগাযোগ এপিআইগুলিকে ওভাররাইড করে জিআরপিসি ব্যতীত অন্য কোনও পরিবহন প্রোটোকল ব্যবহার করতে পারে। উদাহরণগুলির জন্য, device/google/trout/hal/vehicle/2.0/GrpcVehicle{Client,Server}.cpp
দেখুন।
অন্যান্য সাবসিস্টেম
ভার্চিয়ো ইতিমধ্যে ব্লক স্টোরেজ, নেটওয়ার্ক, কনসোল, ইনপুট, সকেট এবং এনট্রপি হিসাবে উপাদানগুলির জন্য একটি সু-সংজ্ঞায়িত ইন্টারফেস সরবরাহ করে। এই সাবসিস্টেমগুলির জন্য, এএওএস ড্রাইভারকে যেমন-আইএস ব্যবহার করে যেমন virtio-blk
, virtio-input
, virtio-console
এবং virtio-net
করে।
ভার্চুয়ালাইজড এএওএস রেফারেন্স প্ল্যাটফর্মে, Wi-Fi mac80211_hwsim
এর সাথে একটি VirtWifi
ওয়্যারলেস নেটওয়ার্ক সক্ষম করতে সমর্থিত, যা হোস্ট ভিএম-তে নেটওয়ার্ক ট্র্যাফিক প্রেরণের জন্য virtio-net
টানেল ব্যবহার করে, যেখানে প্রকৃত ওয়াই-ফাই নেটওয়ার্কে সরাসরি অ্যাক্সেস রয়েছে।