Cara mengatur Bluetooth di Linux dengan cara yang rumit


Dalam persiapan untuk forum TI tahunan, muncul ide untuk membuat manipulator sederhana yang dikendalikan oleh gamepad nirkabel untuk menunjukkan kemampuan mikrokontroler dan komputer papan tunggal. Di tangan adalah pengontrol TRIC, beberapa servomotors, konstruktor besi, dan sebulan sebelum dimulainya forum.


"Semuanya berjalan sesuai rencana," tetapi tidak dalam kasus ini.


Tahap 1. Persiapan


TRIC di atas Linux adalah penghalang bagi manipulator semacam itu, tetapi "masalahnya adalah kegunaan dan pemeliharaan dangkal" ( ClusterM mengutip tentang Linux dalam interkom pintar ).


Setelah membaca spesifikasinya , diketahui bahwa ia memiliki Bluetooth. Jika Anda bekerja dengan pengontrol ini, maka Anda tahu bahwa transfer program adalah melalui Wi-Fi dan tidak ada cara lain yang nyaman untuk berkomunikasi dengannya. Tidak disebutkan Bluetooth dalam menu. Tapi bagaimana caranya?


Berbekal SSH, obeng dan rasa ingin tahu, saya mulai mencari Bluetooth. Sistem ini termasuk hcitool, hciconfig, dan daemon bluetoothd. Mereka semua berkata bahwa dia tidak ada di sana.


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 

Menelepon teman untuk mencari modul USB eksternal, saya terus mencari.


Setelah membongkar controller, modul Jorjin WG7311-0A ditemukan. Spesifikasi menyatakan bahwa sebenarnya ada Wi-Fi, Bluetooth dan bahkan radio FM. Antarmuka untuk berkomunikasi dengan Bluetooth adalah UART, dan dihidupkan melalui BT_EN.



Setelah membaca bagaimana modul Bluetooth terhubung melalui UART melalui hcitool, saya mencoba keberuntungan saya dan tidak melakukan apa pun. Dua dari tiga port UART gratis tidak bersuara.


Tapi kami sudah menghubungi BT_EN! Mungkin saja modul dimatikan dan tidak menanggapi permintaan. Setelah memeriksa perangkat kernel Linux untuk perangkat ARM, sebuah file ditemukan di mana semua kontak yang digunakan oleh SoC terdaftar. Dengan membuka arch/arm/mach-davinci/board-da850-trik.c dalam kode sumber kernel, kontak GPIO untuk Bluetooth benar-benar ditemukan. Kemenangan! Saya pikir.


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

Tahap 2. Menyinggung


Untuk mengaktifkan kontak melalui GPIO, Anda perlu menemukan nomor seri ujung ke ujung. Kami menemukan baris berikut dalam kode kernel dengan permintaan untuk menginisialisasi kontak BT_EN_33 di arch/arm/mach-davinci/board-da850-trik.c :


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

Ini menggunakan GPIO_TO_PIN makro. Lihat deskripsi makro di 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)) 

Dengan menggunakannya, Anda dapat menemukan nomor kontak ujung ke ujung. Kami mendapatkan bahwa 16 * 6 + 11 = 107. Sekarang kita beralih ke pencantuman kontak.


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

0 atau 1 dalam perintah echo adalah status kontak.


Jalankan perintah untuk menghubungkan dan ...


 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 

tidak dapat dipahami oleh kami (saat ini) pesan kesalahan. Kami mencoba mengonfigurasi perangkat melalui hcitool:


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

Tidak ada perangkat, meskipun inisialisasi diduga disahkan. Kami mencoba menghubungkan kedua kalinya, tetapi dengan jenis adaptor yang berbeda:


 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 

Dan lagi, tidak ada. Mari kita kembali ke kesalahan pertama dan menerapkan pengetahuan bahasa Inggris:


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

Kami membuka folder / lib / firmware dengan firmware dan tidak menemukan file yang kami butuhkan. Setelah lama mencari di Internet, kami menemukan file yang diinginkan di repositori TI dan mengunduhnya. Versi lain dari file yang sama menolak untuk berfungsi.


 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 

Kami me-reboot controller dan menyambung kembali:


 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 

Hore! Firmware telah di-boot. Memeriksa 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 

Kami memulai layanan bluetoothd, memindai perangkat, dan mendeteksi modul kami:


 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 

Pencarian komputer menemukan perangkat:



Untuk mengaktifkan Bluetooth, Anda dapat membuat skrip:


 #!/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) ;; *) ;; 

Dan tambahkan ke autorun:


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

Restart dan shutdown modul berperilaku tidak terduga, oleh karena itu opsi stop dan restart tidak memiliki perintah.


Tahap 3. Pemeriksaan komunikasi


Cara termudah untuk memverifikasi komunikasi di kedua arah adalah layanan port COM. Dengan beberapa perintah, hidupkan:


 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 

Kami terhubung dari telepon dan melihat undangan untuk masuk ke sistem:



Tidak ada terminal yang diuji yang diizinkan memasukkan kata sandi pengguna kosong, jadi saya harus mengirim informasi masuk menggunakan pengalihan utas dalam sesi SSH.


Tahap 4. ./configure && make


Mengikuti instruksi untuk menghubungkan gamepad ke Linux, kami menghadapi masalah berikut:


  • BlueZ dalam distribusi sudah usang dan tidak mengerti perintah dari daemon sixad, yang membuat koneksi dengan gamepad
  • Versi BlueZ baru dari sumber menolak untuk dikompilasi karena banyak dependensi
  • BlueZ Fresh Debian membutuhkan udev dan systemd, yang hilang dari distribusi saat ini

Satu-satunya ketergantungan yang dapat memuaskan adalah modul kernel uinput.


Untuk melakukan ini:


  • dapatkan konfigurasi kernel saat ini di perangkat

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

  • unduh kode kernel
  • unduh dan instal toolchain
  • salin konfigurasi kernel ke folder dengan kode kernel
  • tambahkan modul uinput ke konfigurasi

 echo "CONFIG_INPUT_UINPUT=m" >> config 

  • mulai perakitan dengan terlebih dahulu menyalakan toolchain

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

  • salin modul kernel ke kartu memori

 make INSTALL_MOD_PATH=/mnt/trik-sd modules_install 

  • buat gambar uBoot dan salin ke / boot

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

Sekarang program tidak bersumpah pada kurangnya modul kernel, tetapi kemudian kita tidak dapat melakukan apa-apa. Instruksi untuk gamepad akan berguna nanti.


Tahap 5. Masak bubur dari kapak


Mencapai rencana "tyap-blooper." Karena tidak ada cara mudah untuk meletakkan program yang diperlukan pada distribusi asli, kami akan meletakkan sesuatu yang populer. Prosesor ini memiliki arsitektur ARMv5TE, yang berarti ada distribusi untuk itu.


Kami mencoba membongkar dan menjalankan Arch Linux universal untuk ARM dan ketika memuat di konsol kami melihat bahwa systemd membutuhkan versi kernel yang lebih baru, yang tidak kami miliki. Upaya untuk mentransfer kernel 4,16 tidak berhasil dan butuh terlalu banyak waktu.


Kami beralih ke opsi lain - Debian. Ada disk image dengan sistem yang terinstal untuk ARM, tetapi lebih baik menempatkan sistem yang bersih dengan paket dan pengaturan yang diperlukan untuk kita.


Instalasi di QEMU


Unduh gambar instalasi (tautan ke .iso ) dan instal QEMU.
Kita juga memerlukan kernel dan imej initrd untuk mem-boot instalasi, yang dapat diunduh dari sini .


Buat gambar kartu memori dengan ukuran kartu memori nyata (dalam hal ini 4 GB):


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

Kami memulai instalasi:


 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 

Jika Anda akan membuat tata letak disk dari distribusi asli relatif non-standar, maka tinggalkan partisi root terlebih dahulu, jika tidak, Anda harus mengubah parameter boot kernel di uBoot. Ada sejumlah partisi tempat sistem file root berada.


Markup standar berisi:


  1. Partisi EXT4 untuk file 1,3 GB sistem file root
  2. Partisi FAT32 untuk menyimpan data pengguna ≈ berukuran 500 MB

Output fdisk untuk gambar distribusi asli:


 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 

Setelah mengatur parameter, kami pergi minum beberapa cangkir teh, karena emulator tidak jauh lebih cepat daripada prosesor ARM nyata.


Untuk memulai sistem yang terinstal, Anda memerlukan gambar initrd lain, yang dapat diambil dari sini .


Kami memulai sistem:


 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" 

Pengaturan sistem


Setelah memulai, kita memasuki superuser, memeriksa koneksi ke Internet, memperbarui repositori dan sistem, menempatkan sekumpulan minimum program:


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

Terminal


Kami mengedit /etc/inittab , menghapus terminal yang tidak perlu, menyalakan UART yang kami butuhkan untuk kami dan menambahkan input otomatis untuk pengguna yang tepat (gunakan root hanya saat debugging). Input otomatis berguna jika Anda berencana menjalankan shell untuk kontrol pada controller.


 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 

Bluetooth dan wifi


Instal bluez-utils dan wpasupplicant untuk mengakses Wi-Fi dan Bluetooth.


 apt-get install bluez-utils wpasupplicant 

Kami menonaktifkan antarmuka eth0 dan mengkonfigurasi antarmuka wlan1 di /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 

Tambahkan jaringan terlebih dahulu ke /etc/wpa_supplicant.conf , karena melakukan ini pada controller itu sendiri tidak begitu nyaman:


 wpa_passphrase ssid password >> /etc/wpa_supplicant.conf 

Jika Anda tidak memiliki akses Wi-Fi, Anda dapat menggunakan UART untuk konfigurasi lebih lanjut, tetapi perlu diingat bahwa secara default kernel menampilkan semua kesalahan ke terminal ini. Karena itu, selama operasi, pesan mendadak dari kernel atau layanan dapat mengganggu Anda.


Tambahkan skrip untuk mengaktifkan Bluetooth. Kali ini, ubah /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 ;; 

Dengan demikian, semua layanan yang memerlukan layanan Bluetooth akan menjalankan perintah yang diperlukan untuk menginisialisasi.


Geser ke kiri, geser ke kanan


Kami menghapus program dan layanan yang tidak perlu yang dapat dilihat menggunakan htop, karena mereka menempati tempat yang berharga di RAM:



Dalam hal ini, layanan ConsoleKit memiliki banyak proses . Pindahkan file layanan ini ke folder root jika terjadi pemulihan:


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

Sebelum mematikan layanan, konsumsi RAM adalah 19 MB, dan setelah - 16 MB.


Bagian sistem


Meskipun uBoot mentransfer ke kernel perangkat tempat partisi root berada, ada baiknya menuliskannya di /etc/fstab untuk keandalan. Kami mengubah baris pertama yang bertanggung jawab untuk bagian root:


 /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 

Jika Anda tidak menjadikan partisi root sebagai yang pertama, jangan lupa untuk menentukan nomor partisi yang diinginkan.


Jika Anda meninggalkan partisi FAT kedua untuk data pengguna, maka Anda perlu membuat folder untuk memasang partisi di dalamnya


 mkdir /usr/share/trik 

dan tulis bagian di /etc/fstab :


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

Tahap 6. Kami mencoba bubur kami


Setelah mengkonfigurasi gambar sistem, Anda harus memasangnya untuk menginstal modul kernel dan kernel itu sendiri:


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

di mana, NNNN = ukuran sektor * awal bagian. Ukuran sektor default adalah 512 byte.


Kami juga memasang distribusi asli:


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

Kami menghapus kernel untuk QEMU dan modul-modulnya, seperti mereka tidak dimaksudkan untuk platform kami. Kami menyalin kernel dan modul baru, seperti pada distribusi asli.


 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 

Kami membutuhkan firmware untuk modul Wi-Fi, yang ada dalam distribusi asli di folder / lib / firmware dan firmware Bluetooth yang kami temukan sebelumnya.


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

Putuskan sambungan gambar disk:


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

Dan mulai menyalin gambar ke kartu memori menggunakan dd:


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

Tahap 7. Garis finish


Kami mengkompilasi program untuk menghubungkan gamepad pada sistem baru dan menginstal daemon sixad.


Kami menghubungkan gamepad melalui USB ke controller dan menjalankan program untuk membuat pasangan:


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

Ketika gamepad terhubung, tidak ada yang terjadi dan layanan keenam diam:


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

Namun komunitas Raspberry Pi telah membuat "penopang" untuk memperbaiki koneksi .


Kami membangun kembali program dan bersukacita.


 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] 

Sekarang gamepad tersedia untuk sistem sebagai perangkat input dan program jstest akan menunjukkan status semua tombol dan sensor analog:


 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 

di mana X adalah nomor perangkat dalam sistem, secara default - 2. Jumlah tombol dan sumbu dapat dilihat di sini .


Gunakan dalam praktek


Video yang menampilkan gamepad di YouTube .


Foto-foto distribusi

Pemuatan kernel:

Terminal berjalan pada X11:



Dan menurut tradisi:



Tautan yang bermanfaat


Program untuk menghubungkan gamepad Dualshock 3 - sixpair dan sixad .


Untuk gamepad dan perangkat input lainnya, ada pustaka C yang ringan - libenjoy .


Kode sumber program untuk mengendalikan servomotors dan motor adalah repositori GitHub .


Semua file konfigurasi dari artikel untuk distribusi yang dibuat sendiri - repositori GitHub .


Sumber kernel adalah repositori GitHub .


Fakta menarik tentang controller


  • Spesifikasi menyatakan bahwa RAM adalah 256 MB. Tetapi jika Anda menjalankan htop, Anda akan melihat bahwa hanya 128 MB yang tersedia. Ini dibatasi oleh opsi kernel yang dapat dilihat di konsol uBoot:

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

Chip memori ditandai 3PC22 D9MTD yang diproduksi oleh Micron. Itu tidak mungkin untuk menemukan informasi tentang volume saat ini.


  • uBoot disimpan pada memori flash SPI di mana kernel juga terhubung, dan tidak digunakan. Anda dapat mencoba menggunakan tempat ini untuk tugas-tugas Anda atau menyalin kernel baru dan mengkonfigurasi ulang uBoot sehingga menggunakannya.

Alamat gambar dari 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" 

  • Layar pengontrol, meskipun kecil, sebenarnya memiliki sensor resistif. Apakah sensor itu sendiri terhubung tidak diketahui.
  • Dualshock 3 memiliki LED di konektor USB yang menunjukkan jumlah gamepad / joystick. Ada satu gamepad di video, tetapi jumlahnya 3. Ini bukan kesalahan, karena ada dua "joystick" dalam sistem: accelerometer dan giroskop.

Terjadi masalah saat menggunakan


  • Robot kadang-kadang hang ketat, tanpa mematikan servomotors, yang memungkinkan mereka untuk mengubah posisi mereka dari noise pada jalur data. Ini telah terlihat bahkan pada distribusi standar .
  • Dimasukkannya pengontrol PWM berbeda dari apa yang tertulis dalam dokumentasi . Setidaknya dalam C murni ini tidak berhasil.
  • USB terkadang berhenti bekerja pada Debian.

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


All Articles