كيفية إعداد البلوتوث على Linux بطريقة معقدة


في إطار التحضير لمنتدى تكنولوجيا المعلومات السنوي ، ظهرت الفكرة لإنشاء معالج بسيط يتم التحكم فيه بواسطة لوحة ألعاب لاسلكية لإثبات قدرات وحدات التحكم الدقيقة وأجهزة الكمبيوتر ذات اللوحة الواحدة. في متناول اليد كان هناك وحدة تحكم TRIC ، والعديد من المحركات المؤازرة ، ومنشئ حديد ، وقبل شهر من بدء المنتدى.


"كل شيء يسير حسب الخطة" ، ولكن ليس في هذه الحالة.


المرحلة الأولى


كان TRIC على متن لينكس بمثابة تمثال نصفي لمثل هذا التلاعب ، ولكن "الشيء هو سهولة الاستخدام المعتاد والصيانة" (اقتباس ClusterM حول Linux في اتصال داخلي ذكي ).


بعد قراءة المواصفات تم اكتشاف أنه يحتوي على بلوتوث. إذا كنت تعمل مع وحدة التحكم هذه ، فأنت تعلم أن نقل البرامج يتم عبر Wi-Fi ولا توجد طرق أخرى مناسبة للتواصل معها. لا يوجد ذكر بلوتوث في القائمة. لكن كيف ذلك؟


مسلحًا بـ SSH ، مفك البراغي والفضول ، بدأت أبحث عن Bluetooth. تضمن النظام hcitool و hciconfig و bluetoothd daemon. قال جميعهم إنه لم يكن هناك.


root@trik-7dda93:~# hcitool dev Devices: 

 root@trik-7dda93:~# hciconfig hci0 Can't get device info: No such device 

 root@trik-7dda93:~# bluetoothd -n & [1] 5449 root@trik-7dda93:~# bluetoothd[5449]: Bluetooth daemon 4.101 bluetoothd[5449]: Starting SDP server bluetoothd[5449]: Bluetooth Management interface initialized 

عند الاتصال بالأصدقاء بحثًا عن وحدة USB خارجية ، واصلت البحث.


بعد تفكيك وحدة التحكم ، تم العثور على وحدة Jorjin WG7311-0A. تنص المواصفات على وجود شبكة Wi-Fi وبلوتوث وحتى راديو FM. واجهة الاتصال بالبلوتوث هي UART ، ويتم تشغيلها عبر BT_EN.



بعد قراءة كيفية توصيل وحدة Bluetooth عبر UART عبر hcitool ، جربت حظي ولا شيء. صمت اثنان من منافذ UART الثلاثة المجانية.


ولكن لدينا اتصال BT_EN! من الممكن أن يتم إيقاف تشغيل الوحدة النمطية ببساطة ولا تستجيب للطلبات. بعد فحص جهاز Linux kernel لأجهزة ARM ، تم العثور على ملف يتم فيه تسجيل جميع جهات الاتصال التي تستخدمها SoC. من خلال فتح arch/arm/mach-davinci/board-da850-trik.c في شفرة مصدر kernel ، تم العثور بالفعل على اتصال GPIO للبلوتوث. النصر! فكرت.


 static const short da850_trik_bluetooth_pins[] __initconst = { DA850_GPIO6_11, /*BT_EN_33 */ DA850_GPIO6_10, /*BT_WU_33*/ -1 }; 

المرحلة 2. الهجومية


لتمكين جهة اتصال من خلال GPIO ، تحتاج إلى العثور على الرقم التسلسلي من طرف إلى طرف. نجد السطر التالي في رمز النواة مع طلب لتهيئة جهة الاتصال BT_EN_33 في arch/arm/mach-davinci/board-da850-trik.c :


 ret = gpio_request_one(GPIO_TO_PIN(6, 11), GPIOF_OUT_INIT_LOW, "BT_EN_33"); 

يستخدم الماكرو GPIO_TO_PIN. راجع وصف الماكرو في arch/arm/mach-davinci/include/mach/gpio-davinci.h :


 /* Convert GPIO signal to GPIO pin number */ #define GPIO_TO_PIN(bank, gpio) (16 * (bank) + (gpio)) 

باستخدامه ، يمكنك العثور على رقم الاتصال من طرف إلى طرف. نحصل على 16 * 6 + 11 = 107. الآن ننتقل إلى إدراج جهة الاتصال.


 echo 1 >> /sys/devices/virtual/gpio/gpio107/value 

0 أو 1 في أمر echo هي حالة جهة الاتصال.


قم بتشغيل الأمر للاتصال و ...


 root@trik-7dda93:~# hciattach /dev/ttyS0 texas Found a Texas Instruments' chip! Firmware file : /lib/firmware/TIInit_7.6.15.bts can't open firmware file: No such file or directory Warning: cannot find BTS file: /lib/firmware/TIInit_7.6.15.bts Device setup complete 

رسائل غير مفهومة لنا (في الوقت الحالي). نحاول تكوين الجهاز من خلال hcitool:


 root@trik-7dda93:~# hcitool dev Devices: 

لا توجد أجهزة ، على الرغم من أن التهيئة مرت بنجاح. نحاول الاتصال مرة ثانية ، ولكن باستخدام نوع مختلف من المحولات:


 root@trik-7dda93:~# hciattach /dev/ttyS0 texasalt Texas module LMP version : 0x06 Texas module LMP sub-version : 0x1f0f internal version freeze: 15 software version: 6 chip: wl1271 (7) Opening firmware file: /etc/firmware/wl1271.bin Could not open firmware file /etc/firmware/wl1271.bin: No such file or directory (2). Device setup complete 

ومرة أخرى ، لا شيء. دعنا نعود إلى الخطأ الأول ونطبق معرفة اللغة الإنجليزية:


 Warning: cannot find BTS file: /lib/firmware/TIInit_7.6.15.bts 

نفتح المجلد / lib / البرامج الثابتة مع البرامج الثابتة ولا نجد الملف الذي نحتاجه. بعد بحث طويل على الإنترنت ، نجد الملف المطلوب في مستودع TI ونقوم بتنزيله. رفضت إصدارات أخرى من نفس الملف للعمل.


 curl -k https://git.ti.com/wilink8-bt/ti-bt-firmware/blobs/raw/45897a170bc30afb841b1491642e774f0c89b584/TIInit_7.6.15.bts > TIInit_7.6.15.bts cp TIInit_7.6.15.bts /lib/firmware/TIInit_7.6.15.bts 

نعيد تشغيل وحدة التحكم ونعيد الاتصال:


 root@trik-7dda93:~# echo 1 >> /sys/devices/virtual/gpio/gpio107/value root@trik-7dda93:~# hciattach /dev/ttyS0 texas Found a Texas Instruments' chip! Firmware file : /lib/firmware/TIInit_7.6.15.bts Loaded BTS script version 1 Device setup complete 

مرحى! تم تمهيد البرامج الثابتة. التحقق من hciconfig:


 root@trik-7dda93:~# hciconfig hci0: Type: BR/EDR Bus: UART BD Address: 78:**:**:**:**:B3 ACL MTU: 1021:4 SCO MTU: 180:4 DOWN RX bytes:509 acl:0 sco:0 events:21 errors:0 TX bytes:388 acl:0 sco:0 commands:21 errors:0 

نبدأ خدمة bluetoothd ونبحث عن الأجهزة ونكتشف وحدتنا:


 root@trik-7dda93:~# bluetoothd -n & [1] 4689 bluetoothd[4689]: Bluetooth daemon 4.101 bluetoothd[4689]: Starting SDP server bluetoothd[4689]: Bluetooth Management interface initialized bluetoothd[4689]: Parsing /etc/bluetooth/serial.conf failed: No such file or directory bluetoothd[4689]: Could not get the contents of DMI chassis type bluetoothd[4689]: Adapter /org/bluez/4689/hci0 has been enabled root@trik-7dda93:~# hciconfig hci0 piscan 

يعثر بحث الكمبيوتر على جهاز:



لتمكين Bluetooth ، يمكنك إنشاء برنامج نصي:


 #!/bin/bash case "$1" in start) echo 1 >> /sys/devices/virtual/gpio/gpio107/value bluetoothd -n & hciattach /dev/ttyS0 texas hciconfig hci0 piscan ;; stop) ;; restart) ;; status) ;; *) ;; 

وإضافته إلى التشغيل التلقائي:


 cp init-bluetooth /etc/init.d/init-bluetooth update-rc.d init-bluetooth enable 99 

تتصرف إعادة التشغيل وإيقاف تشغيل الوحدة النمطية بشكل غير متوقع ، وبالتالي لا تحتوي خيارات الإيقاف وإعادة التشغيل على أوامر.


المرحلة 3. فحص الاتصالات


إن أسهل طريقة للتحقق من الاتصال في كلا الاتجاهين هي خدمة منفذ COM. مع بعض الأوامر ، قم بتشغيله:


 root@trik-7dda93:~# sdptool add --channel=3 SP Serial Port service registered root@trik-7dda93:~# mknod -m 666 /dev/rfcomm0 c 216 0 root@trik-7dda93:~# rfcomm watch /dev/rfcomm0 3 /sbin/getty rfcomm0 115200 linux Waiting for connection on channel 3 

نحن نتصل من الهاتف ونرى دعوة لدخول النظام:



لم يُسمح لأي من المحطات المختبرة بإدخال كلمة مرور فارغة للمستخدم ، لذلك كان عليّ إرسال معلومات تسجيل الدخول باستخدام إعادة توجيه مؤشر الترابط في جلسة SSH.


المرحلة 4.. / تكوين && جعل


باتباع الإرشادات الخاصة بتوصيل لوحة الألعاب بنظام Linux ، نواجه المشكلات التالية:


  • BlueZ في التوزيع قديم ولا يفهم الأوامر من برنامج sixad ، والذي ينشئ اتصالاً بلوحة الألعاب
  • يرفض إصدار BlueZ الجديد من المصدر التجميع بسبب العديد من التبعيات
  • يتطلب BlueZ لـ Debian الجديد udev و systemd ، وهي مفقودة من التوزيع الحالي

التبعية الوحيدة التي كانت قادرة على تلبية ذلك كانت وحدة نواة uinput.


للقيام بذلك:


  • الحصول على تكوين النواة الحالية على الجهاز

 cp /proc/config.gz config.gz gunzip config.gz 


 echo "CONFIG_INPUT_UINPUT=m" >> config 

  • بدء التجميع عن طريق تشغيل سلسلة الأدوات أولاً

 source /opt/trik-sdk/environment-setup-arm926ejste-oe-linux-gnueabi make 

  • انسخ وحدات النواة إلى بطاقة الذاكرة

 make INSTALL_MOD_PATH=/mnt/trik-sd modules_install 

  • بناء صورة uBoot ونسخها إلى / التمهيد

 make uImage cp arch/arm/boot/uImage /mnt/trik-sd/boot/uImage-3.6.7 

الآن لا يقسم البرنامج على عدم وجود وحدة kernel ، ولكن بعد ذلك لا يمكننا فعل أي شيء. ستكون تعليمات لوحة الألعاب مفيدة في وقت لاحق.


المرحلة 5. طهي عصيدة من الفأس


للوصول إلى خطة "tyap-blooper". نظرًا لعدم وجود طريقة ملائمة لوضع البرامج اللازمة على التوزيع الأصلي ، سنضع شيئًا شائعًا. يحتوي المعالج على بنية ARMv5TE ، مما يعني أن هناك توزيعات له.


نحن نحاول فك حزم وتشغيل Arch Arch العالمي لـ ARM وعند التحميل في وحدة التحكم ، نرى أن systemd يتطلب إصدارًا أحدثًا من kernel ، وليس لدينا. محاولات نقل نواة 4.16 باءت بالفشل واستغرقت الكثير من الوقت.


ننتقل إلى خيار آخر - دبيان. توجد صورة قرص مع نظام مثبت لـ ARM ، ولكن من الأفضل وضع نظام نظيف مع الحزم والإعدادات اللازمة لنا.


التثبيت في QEMU


قم بتنزيل صورة التثبيت (رابط إلى .iso ) وقم بتثبيت QEMU.
نحتاج أيضًا إلى صورة kernel و initrd لبدء التثبيت ، والذي يمكن تنزيله من هنا .


قم بإنشاء صورة لبطاقة ذاكرة بحجم بطاقة ذاكرة حقيقية (في هذه الحالة 4 جيجا بايت):


 qemu-img create -f raw debian.img 4G 

نبدأ التثبيت:


 qemu-system-arm -M versatilepb -kernel vmlinuz-3.2.0-4-versatile -initrd initrd.gz -hda debian.img -cdrom debian-7.11.0-armel-CD-1.iso 

إذا كنت ستقوم بعمل تخطيط قرص لتوزيع أصلي نسبي غير قياسي ، فاترك قسم الجذر أولاً ، وإلا سيتعين عليك تغيير معلمات تمهيد kernel في uBoot. يوجد رقم القسم الذي يوجد عليه نظام الملفات الجذر.


يحتوي الترميز القياسي على:


  1. قسم EXT4 لنظام ملفات الجذر 1.3 GB
  2. قسم FAT32 لتخزين بيانات المستخدم ≈ 500 ميجابايت في الحجم

إخراج fdisk لصورة التوزيع الأصلي:


 Disk: trik-distro.img geometry: 893/64/63 [3604478 sectors] Signature: 0xAA55 Starting Ending #: id cyl hd sec - cyl hd sec [ start - size] ------------------------------------------------------------------------ 1: 83 1023 3 32 - 1023 3 32 [ 1040382 - 2564096] Linux files* 2: 0C 64 0 1 - 1023 3 32 [ 8192 - 1032190] Win95 FAT32L 3: 00 0 0 0 - 0 0 0 [ 0 - 0] unused 4: 00 0 0 0 - 0 0 0 [ 0 - 0] unused 

بعد وضع المعايير ، نترك لشرب بضعة أكواب من الشاي ، لأنه المحاكي ليس أسرع بكثير من معالج ARM حقيقي.


لبدء النظام المثبت ، تحتاج إلى صورة initrd أخرى ، يمكن التقاطها من هنا .


نبدأ النظام:


 qemu-system-arm -M versatilepb -kernel vmlinuz-3.2.0-4-versatile -initrd initrd.img-3.2.0-4-versatile -hda debian.img -append "root=/dev/sda1" 

إعداد النظام


بعد البدء ، ندخل المستخدم الفائق ، ونتحقق من الاتصال بالإنترنت ، ونحدث المستودعات والنظام ، ونضع الحد الأدنى لمجموعة البرامج:


 apt-get update apt-get upgrade apt-get install curl git mc htop joystick 

المحطات


نقوم بتحرير /etc/inittab ، وإزالة المحطات غير الضرورية ، وتشغيل UART الذي نحتاجه لنا وإضافة الإدخال التلقائي للمستخدم المناسب (استخدم الجذر فقط عند التصحيح). الإدخال التلقائي مفيد إذا كنت تخطط لتشغيل shell للتحكم في وحدة التحكم.


 1:2345:respawn:/sbin/getty 38400 tty1 --autologin root #2:23:respawn:/sbin/getty 38400 tty2 #3:23:respawn:/sbin/getty 38400 tty3 #4:23:respawn:/sbin/getty 38400 tty4 #5:23:respawn:/sbin/getty 38400 tty5 #6:23:respawn:/sbin/getty 38400 tty6 uart:12345:respawn:/sbin/getty -L 115200 ttyS1 

بلوتوث وواي فاي


قم بتثبيت bluez-utils و wpasupplicant للوصول إلى Wi-Fi و Bluetooth.


 apt-get install bluez-utils wpasupplicant 

نقوم بتعطيل واجهة eth0 وتكوين واجهة wlan1 في /etc/network/interfaces :


 # /etc/network/interfaces -- configuration file for ifup(8), ifdown(8) # The loopback interface auto lo iface lo inet loopback # Wireless interfaces auto wlan1 iface wlan1 inet dhcp wireless_mode managed wireless_essid any wpa-driver wext wpa-conf /etc/wpa_supplicant.conf 

أضف الشبكة مسبقًا إلى /etc/wpa_supplicant.conf ، لأنه القيام بذلك على وحدة التحكم نفسها ليس مناسبًا:


 wpa_passphrase ssid password >> /etc/wpa_supplicant.conf 

إذا لم يكن لديك وصول Wi-Fi ، يمكنك استخدام UART لمزيد من التكوين ، ولكن ضع في اعتبارك أن النواة تعرض بشكل افتراضي جميع الأخطاء لهذا الجهاز الطرفي. لذلك ، أثناء العملية ، قد تقاطعك رسالة مفاجئة من النواة أو الخدمة.


أضف برنامج نصي لتمكين Bluetooth. هذه المرة ، قم بتعديل /etc/init.d/bluetooth :


  139: case $1 in start) echo 1 >> /sys/devices/virtual/gpio/gpio107/value  168: hciattach /dev/ttyS0 texas log_end_msg 0 ;; 

وبالتالي ، ستقوم جميع الخدمات التي تتطلب خدمة Bluetooth بتشغيل الأوامر اللازمة للتهيئة.


اسحب لليمين ، اسحب لليمين


نزيل البرامج والخدمات غير الضرورية التي يمكن عرضها باستخدام htop ، لأنها تحتل مكانًا ثمينًا في ذاكرة الوصول العشوائي:



في هذه الحالة ، تحتوي خدمة ConsoleKit على الكثير من العمليات . انقل ملف هذه الخدمة إلى المجلد الجذر في حالة الاسترداد:


 mv /usr/share/dbus-1/system-services/org.freedesktop.ConsoleKit.service /root/ 

قبل إغلاق الخدمة ، كان استهلاك ذاكرة الوصول العشوائي 19 ميجا بايت ، وبعد - 16 ميجا بايت.


أقسام النظام


على الرغم من أن uBoot ينقل إلى kernel الجهاز الذي يوجد عليه قسم الجذر ، فإنه يستحق كتابته في /etc/fstab أجل الموثوقية. نغير السطر الأول المسؤول عن قسم الجذر:


 /dev/mmcblk0p1 / auto defaults 1 1 proc /proc proc defaults 0 0 devpts /dev/pts devpts mode=0620,gid=5 0 0 usbdevfs /proc/bus/usb usbdevfs noauto 0 0 tmpfs /run tmpfs mode=0755,nodev,nosuid,strictatime 0 0 tmpfs /var/volatile tmpfs defaults 0 0 

إذا لم تجعل القسم الجذر هو الأول ، فلا تنس تحديد رقم القسم المطلوب.


إذا تركت قسم FAT الثاني لبيانات المستخدم ، فأنت بحاجة إلى إنشاء مجلد لتركيب القسم فيه


 mkdir /usr/share/trik 

واكتب القسم في /etc/fstab :


 /dev/mmcblk0p2 /usr/share/trik vfat defaults 0 0 

المرحلة 6. نحاول عصيدة لدينا


بعد تكوين صورة النظام ، يجب تركيبها لتثبيت وحدات النواة والنواة نفسها:


 # ,     (start) fdisk -l debian.img mount -o loop,offset=NNNN debian.img /mnt/debian 

حيث ، NNNN = حجم القطاع * بداية القسم. الحجم الافتراضي للقطاع هو 512 بايت.


نقوم أيضًا بتوزيع التوزيع الأصلي:


 fdisk -l trik-distro.img mount -o loop,offset=NNNN trik-distro.img /mnt/trik-clean 

نزيل نواة QEMU ووحداته ، مثل ليست مخصصة لمنصتنا. نقوم بنسخ النواة والوحدات الجديدة ، تمامًا كما هو الحال في التوزيع الأصلي.


 rm -rf /mnt/debian/boot/ rm -rf /mnt/debian/lib/modules/3.2.0-4-versatile rm -rf /mnt/debian/lib/modules/3.2.0-5-versatile mkdir /mnt/debian/boot/ cp arch/arm/boot/uImage /mnt/debian/boot/ make INSTALL_MOD_PATH=/mnt/debian modules_install 

سنحتاج إلى برامج ثابتة لوحدة Wi-Fi ، والتي هي في التوزيع الأصلي في مجلد / lib / البرامج الثابتة وبرنامج Bluetooth الثابت الذي اكتشفناه سابقًا.


 cp /mnt/trik-clean/lib/firmware/* /mnt/debian/lib/firmware/ cp TIInit_7.6.15.bts /mnt/debian/lib/firmware/ 

فصل صور القرص:


 umount /mnt/trik-clean umount /mnt/debian 

وابدأ نسخ الصورة إلى بطاقة الذاكرة باستخدام dd:


 #    ( ) lsblk dd if=debian.img of=/dev/sdX bs=4M 

المرحلة 7. خط النهاية


نقوم بتجميع برامج توصيل لوحة الألعاب على النظام الجديد وتثبيت برنامج sixad.


نقوم بتوصيل لوحة الألعاب عبر USB بوحدة التحكم وتشغيل البرنامج لإنشاء زوج:


 root@trik:~/bt# ./sixpair Current Bluetooth master: 78:**:**:**:**:b9 Setting master bd_addr to 78:**:**:**:**:b9 

عندما يتم توصيل لوحة الألعاب ، لا يحدث شيء وتكون خدمة sixad صامتة:


 sixad-bin[2675]: started sixad-bin[2675]: sixad started, press the PS button now sixad-bin[2675]: unable to connect to sdp session 

لكن مجتمع Raspberry Pi قام بالفعل بعمل "عكاز" لإصلاح الاتصال .


نعيد بناء البرنامج ونفرح.


 sixad-bin[2833]: started sixad-bin[2833]: sixad started, press the PS button now sixad-bin[2833]: unable to connect to sdp session sixad-sixaxis[2836]: started sixad-sixaxis[2836]: Connected 'PLAYSTATION(R)3 Controller (00:**:**:**:**:09)' [Battery 02] 

الآن لوحة الألعاب متاحة للنظام كجهاز إدخال ، وسيظهر البرنامج jstest حالة جميع الأزرار وأجهزة الاستشعار التناظرية:


 root@trik:~# ls /dev/input/ by-path event0 event1 event2 event3 js0 js1 js2 mice root@trik:~# jstest --normal /dev/input/jsX Driver version is 2.1.0. Joystick (PLAYSTATION(R)3 Controller (00:**:**:**:**:09)) has 29 axes (X, Y, Z, Rx, Ry, Rz, Throttle, Rudder, Wheel, Gas, Brake, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, (null), (null), (null), (null), (null), (null), (null), (null)) and 17 buttons (Trigger, ThumbBtn, ThumbBtn2, TopBtn, TopBtn2, PinkieBtn, BaseBtn, BaseBtn2, BaseBtn3, BaseBtn4, BaseBtn5, BaseBtn6, BtnDead, BtnA, BtnB, BtnC, BtnX). Testing ... (interrupt to exit) Axes: 0: 0 1: 0 2: 0 3: 0 4: -7150 5: -7746 6:-32767 7: 0 8: 0 9: 0 10: 0 11: 0 12: 0 13: 0 14: 0 15: 0 16: 0 17: 0 18: 0 19: 0 20: 0 21: 0 22: 0 23: 0 24: 0 25: 0 26: 0 27: 0 28: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off 9:off 10:off 11:off 12:off 13:off 14:off 15:off 16:off 

حيث X هو رقم الجهاز في النظام ، افتراضيًا - 2. يمكن عرض عدد الأزرار والمحاور هنا .


استخدم في الممارسة


فيديو يظهر لوحة اللعب على يوتيوب .


صور التوزيع

تحميل نواة:

تشغيل المحطة على X11:



ووفقًا للتقاليد:



روابط مفيدة


برامج لتوصيل لوحة الألعاب Dualshock 3 - sixpair و sixad .


بالنسبة لأجهزة الألعاب وأجهزة الإدخال الأخرى ، توجد مكتبة C خفيفة الوزن - libenjoy .


الكود المصدري لبرنامج التحكم في المحركات المؤازرة والمحركات هو مستودع GitHub .


جميع ملفات التكوين من المقالة الخاصة بعدة توزيع مؤقتة هي مستودع GitHub .


مصدر النواة هو مستودع جيثب .


حقائق مثيرة للاهتمام حول وحدة التحكم


  • تنص المواصفات على أن ذاكرة الوصول العشوائي 256 ميجا بايت. ولكن إذا قمت بتشغيل htop ، فسترى أنه يتوفر فقط 128 ميغابايت. هذا محدود بخيارات النواة التي يمكن عرضها في وحدة تحكم uBoot:

 mem=128M console=ttyS1,115200n8 rw noinitrd rootwait root=/dev/mmcblk0p1 vt.global_cursor_default=0 consoleblank=0 

يتم تمييز رقاقة الذاكرة 3PC22 D9MTD المصنعة بواسطة Micron. لم يكن من الممكن العثور على معلومات حول حجمه الحالي.


  • يتم تخزين uBoot على ذاكرة فلاش SPI التي تكون فيها النواة سلكية أيضًا ، ولا يتم استخدامها. يمكنك محاولة استخدام هذا المكان لمهامك أو نسخ نواة جديدة وإعادة تكوين uBoot بحيث يستخدمه.

عناوين الصور من dmesg:


 [ 11.598170] 0x000000000000-0x000000040000 : "uboot" [ 11.642985] 0x000000040000-0x000000080000 : "uboot-env1" [ 11.706256] 0x000000080000-0x0000000c0000 : "uboot-env2" [ 11.761827] 0x0000000c0000-0x000000100000 : "config-periph" [ 11.805129] 0x000000100000-0x000000400000 : "kernel" [ 11.861864] 0x000000400000-0x000001000000 : "RootFS" 

  • تحتوي شاشة وحدة التحكم ، على الرغم من صغرها ، على مستشعر مقاوم. ما إذا كان المستشعر نفسه متصلًا غير معروف.
  • يحتوي Dualshock 3 على مصابيح LED في موصل USB تُظهر عدد لوحة الألعاب / عصا التحكم. هناك لوحة ألعاب واحدة في الفيديو ، لكن رقمها هو 3. هذا ليس خطأ ، لأنه هناك نوعان آخران من "عصا التحكم" في النظام: مقياس التسارع والجيروسكوب.

واجهت مشاكل أثناء الاستخدام


  • يتوقف الروبوت في بعض الأحيان بشدة ، دون إيقاف تشغيل المحركات المؤازرة ، مما يسمح لهم بتغيير موقفهم من الضوضاء على خط البيانات. وقد شوهد هذا حتى على التوزيع القياسي .
  • إدراج وحدات تحكم PWM يختلف عما هو مكتوب في الوثائق . على الأقل في نقية C هذا لم ينجح.
  • يتوقف USB أحيانًا عن العمل على دبيان.

Source: https://habr.com/ru/post/ar415007/


All Articles