ວິທີການໃຊ້ Udev ສຳ ລັບການກວດສອບແລະຄຸ້ມຄອງອຸປະກອນໃນ Linux


Udev (userspace/dev) ແມ່ນລະບົບຍ່ອຍຂອງ Linux ສຳ ລັບການຊອກຄົ້ນຫາແລະຈັດການອຸປະກອນແບບເຄື່ອນໄຫວ, ນັບຕັ້ງແຕ່ kernel version 2.6. ມັນແມ່ນການປ່ຽນແທນເຄື່ອງແຟັກແລະເຄື່ອງເຊື່ອມ.

ມັນສ້າງແບບເຄື່ອນໄຫວຫລືເອົາຂໍ້ມູນຂອງອຸປະກອນອອກແບບ (ແບບໂຕ້ຕອບກັບໄດເວີອຸປະກອນທີ່ປະກົດຢູ່ໃນລະບົບແຟ້ມຄືກັບວ່າມັນເປັນເອກະສານ ທຳ ມະດາ, ເກັບຢູ່ພາຍໃນ/ໄດເລກະທໍລີ) ໃນເວລາບູດຫລືຖ້າທ່ານເພີ່ມອຸປະກອນໃສ່ຫລືເອົາອຸປະກອນອອກຈາກ ລະບົບ. ຈາກນັ້ນມັນເຜີຍແຜ່ຂໍ້ມູນກ່ຽວກັບອຸປະກອນໃດ ໜຶ່ງ ຫຼືປ່ຽນສະຖານະຂອງມັນໄປສູ່ພື້ນທີ່ຂອງຜູ້ໃຊ້.

ໜ້າ ທີ່ຂອງມັນແມ່ນ 1) ສະ ໜອງ ການ ນຳ ໃຊ້ລະບົບກັບເຫດການຂອງອຸປະກອນ, 2) ຈັດການສິດຂອງຂໍ້ມູນອຸປະກອນແລະ 3) ອາດຈະສ້າງສັນຍາລັກທີ່ມີປະໂຫຍດຢູ່ໃນໄດເລກະທໍລີ/dev ສຳ ລັບການເຂົ້າເຖິງອຸປະກອນຕ່າງໆ, ຫຼືແມ້ແຕ່ປ່ຽນຊື່ອິນເຕີເຟດເຄືອຂ່າຍ.

ໜຶ່ງ ໃນຄວາມດີຂອງ udev ແມ່ນວ່າມັນສາມາດໃຊ້ຊື່ຂອງອຸປະກອນທີ່ທົນທານເພື່ອຮັບປະກັນການຕັ້ງຊື່ຂອງອຸປະກອນທີ່ຖືກຕ້ອງຕະຫຼອດເວລາທີ່ເປີດ ໃໝ່, ເຖິງວ່າຈະມີການຄົ້ນພົບ. ຄຸນລັກສະນະນີ້ແມ່ນເປັນປະໂຫຍດເພາະວ່າແກ່ນພຽງແຕ່ມອບຊື່ອຸປະກອນທີ່ບໍ່ສາມາດຄາດເດົາໄດ້ໂດຍອີງໃສ່ ຄຳ ສັ່ງຂອງການຄົ້ນພົບ.

ໃນບົດຂຽນນີ້, ພວກເຮົາຈະຮຽນຮູ້ວິທີການໃຊ້ Udev ສຳ ລັບການຊອກຄົ້ນຫາແລະຄຸ້ມຄອງອຸປະກອນໃນລະບົບ Linux. ໃຫ້ສັງເກດວ່າສ່ວນຫຼາຍຖ້າບໍ່ແມ່ນການແຈກແຈງ Linux ທີ່ທັນສະ ໄໝ ທັງ ໝົດ ມາພ້ອມກັບ Udev ເຊິ່ງເປັນສ່ວນ ໜຶ່ງ ຂອງການຕິດຕັ້ງແບບເລີ່ມຕົ້ນ.

ຮຽນຮູ້ພື້ນຖານຂອງ Udev ໃນ Linux

udev daemon, systemd-udevd (ຫຼື systemd-udevd.service) ສື່ສານກັບແກ່ນແລະໄດ້ຮັບອຸປະກອນຈາກອຸປະກອນໂດຍກົງໃນແຕ່ລະຄັ້ງທີ່ທ່ານເພີ່ມຫລືຖອດອຸປະກອນອອກຈາກລະບົບ, ຫຼືອຸປະກອນໃດ ໜຶ່ງ ປ່ຽນແປງສະຖານະຂອງມັນ.

Udev ແມ່ນອີງໃສ່ກົດລະບຽບ - ກົດລະບຽບຂອງມັນມີຄວາມຍືດຫຍຸ່ນແລະມີປະສິດທິພາບຫຼາຍ. ທຸກໆເຫດການຂອງອຸປະກອນທີ່ໄດ້ຮັບແມ່ນກົງກັບຊຸດຂອງກົດທີ່ອ່ານຈາກແຟ້ມທີ່ຕັ້ງຢູ່ໃນ /lib/udev/rules.d ແລະ /run/udev/rules.d.

ທ່ານສາມາດຂຽນເອກະສານກ່ຽວກັບກົດລະບຽບທີ່ ກຳ ນົດໄວ້ໃນໄດເລກະທໍລີ /etc/udev/rules.d/ (ໄຟລ໌ຄວນສິ້ນສຸດດ້ວຍການຂະຫຍາຍ .rules ) ເພື່ອປະມວນຜົນອຸປະກອນ. ໃຫ້ສັງເກດວ່າກົດລະບຽບຂອງແຟ້ມເອກະສານໃນໄດເລກະທໍລີນີ້ມີບູລິມະສິດສູງສຸດ.

ເພື່ອສ້າງເອກະສານຂໍ້ມູນຂອງອຸປະກອນ, udev ຈຳ ເປັນຕ້ອງ ກຳ ນົດອຸປະກອນໂດຍ ນຳ ໃຊ້ຄຸນລັກສະນະບາງຢ່າງເຊັ່ນ: ປ້າຍ ກຳ ກັບ, ເລກ ລຳ ດັບ, ເລກທີ່ ສຳ ຄັນແລະນ້ອຍຂອງມັນທີ່ໃຊ້, ເບີໂທລະສັບອຸປະກອນລົດແລະອື່ນໆ. ຂໍ້ມູນນີ້ຖືກສົ່ງອອກໂດຍລະບົບເອກະສານ sysfs.

ເມື່ອໃດກໍຕາມທີ່ທ່ານເຊື່ອມຕໍ່ອຸປະກອນກັບລະບົບ, ແກ່ນຈະກວດພົບແລະເລີ່ມຕົ້ນມັນ, ແລະໄດເລກະທໍລີທີ່ມີຊື່ອຸປະກອນຖືກສ້າງຂື້ນຢູ່ພາຍໃຕ້ sys/ໄດເລກະທໍລີເຊິ່ງເກັບຮັກສາຄຸນລັກສະນະຂອງອຸປະກອນ.

ເອກະສານການຕັ້ງຄ່າຕົ້ນຕໍ ສຳ ລັບ udev ແມ່ນ /etc/udev/udev.conf, ແລະເພື່ອຄວບຄຸມພຶດຕິ ກຳ ຂອງເວລາທີ່ໃຊ້ udemon daemon, ທ່ານສາມາດໃຊ້ປະໂຫຍດຂອງ udevadm.

ເພື່ອສະແດງເຫດການ kernel ທີ່ໄດ້ຮັບ (uevents) ແລະເຫດການ udev (ເຊິ່ງ udev ສົ່ງອອກຫຼັງຈາກການປຸງແຕ່ງກົດລະບຽບ), ແລ່ນ udevadm ດ້ວຍ ຄຳ ສັ່ງຂອງ monitor. ຈາກນັ້ນເຊື່ອມຕໍ່ອຸປະກອນກັບລະບົບຂອງທ່ານແລະເບິ່ງ, ຈາກຢູ່ປາຍຍອດ, ວິທີການຈັດການກັບອຸປະກອນ.

ພາບ ໜ້າ ຈໍຕໍ່ໄປນີ້ສະແດງໃຫ້ເຫັນການຄັດເລືອກຂອງເຫດການ ADD ຫຼັງຈາກເຊື່ອມຕໍ່ USB flash disk ກັບລະບົບທົດສອບ:

$ udevadm monitor 

ເພື່ອຊອກຫາຊື່ທີ່ຖືກຈັດໃສ່ໃນແຜ່ນ USB ຂອງທ່ານ, ໃຫ້ໃຊ້ lsblk utility ທີ່ອ່ານລະບົບແຟ້ມ sysfs ແລະ udev db ເພື່ອເກັບ ກຳ ຂໍ້ມູນກ່ຽວກັບອຸປະກອນທີ່ປະມວນຜົນ.

 
$ lsblk

ຈາກຜົນໄດ້ຮັບຂອງ ຄຳ ສັ່ງທີ່ຜ່ານມາ, ແຜ່ນ USB ມີຊື່ວ່າ sdb1 (ເສັ້ນທາງທີ່ສົມບູນຄວນຈະເປັນ /dev/sdb1 ). ເພື່ອສອບຖາມຄຸນລັກສະນະຂອງອຸປະກອນຈາກຖານຂໍ້ມູນ udev, ໃຫ້ໃຊ້ ຄຳ ສັ່ງຂໍ້ມູນ.

$ udevadm info /dev/sdb1

ວິທີການເຮັດວຽກກັບກົດລະບຽບ Udev ໃນ Linux

ໃນພາກນີ້, ພວກເຮົາຈະປຶກສາຫາລືສັ້ນໆກ່ຽວກັບວິທີການຂຽນກົດລະບຽບຂອງ udev. ກົດລະບຽບປະກອບດ້ວຍບັນຊີລາຍຊື່ທີ່ແຍກອອກຈາກຈຸດຂອງຄູ່ ໜຶ່ງ ຫຼືຫຼາຍຄູ່ທີ່ມີຄ່າ ສຳ ຄັນ. ກົດລະບຽບຊ່ວຍໃຫ້ທ່ານສາມາດປ່ຽນຊື່ node ຂອງອຸປະກອນຈາກຊື່ເລີ່ມຕົ້ນ, ແກ້ໄຂສິດແລະຄວາມເປັນເຈົ້າຂອງຂອງ node ຂອງອຸປະກອນ, ກະຕຸ້ນການປະຕິບັດໂປແກຼມຫຼືສະຄິບເມື່ອ node ຂອງອຸປະກອນຖືກສ້າງຂື້ນຫຼືຖືກລຶບອອກ, ແລະອື່ນໆ.

ພວກເຮົາຈະຂຽນກົດລະບຽບງ່າຍໆເພື່ອເປີດສະຄິບເມື່ອມີການເພີ່ມອຸປະກອນ USB ແລະເມື່ອມັນຖືກຖອດອອກຈາກລະບົບແລ່ນ.

ເລີ່ມຕົ້ນໂດຍການສ້າງສອງສະຄິບ:

$ sudo vim /bin/device_added.sh

ຕື່ມສາຍຕໍ່ໄປນີ້ໃສ່ໃນຕົວອັກສອນ device_added.sh

#!/bin/bash
echo "USB device added at $(date)" >>/tmp/scripts.log

ເປີດຄິບທີສອງ.

$ sudo vim /bin/device_removed.sh

ຫຼັງຈາກນັ້ນຕື່ມສາຍຕໍ່ໄປນີ້ໃສ່ ສະຄິບ.

#!/bin/bash
echo "USB device removed  at $(date)" >>/tmp/scripts.log

ບັນທຶກເອກະສານ, ປິດແລະເຮັດໃຫ້ທັງສອງສະຄິບສາມາດປະຕິບັດໄດ້.

$ sudo chmod +x /bin/device_added.sh
$ sudo chmod +x /bin/device_removed.sh

ຕໍ່ໄປ, ໃຫ້ສ້າງກົດເກນທີ່ຈະເຮັດໃຫ້ເກີດການປະຕິບັດຂອງສະຄິບຂ້າງເທິງ, ເອີ້ນວ່າ /etc/udev/rules.d/80-test.rules.

$ vim /etc/udev/rules.d/80-test.rules

ຕື່ມສອງກົດລະບຽບຕໍ່ໄປນີ້ໃນມັນ.

SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device",  RUN+="/bin/device_added.sh"
SUBSYSTEM=="usb", ACTION=="remove", ENV{DEVTYPE}=="usb_device", RUN+="/bin/device_removed.sh"

ບ່ອນທີ່:

  • "==" : ແມ່ນຜູ້ປະຕິບັດການເພື່ອປຽບທຽບເພື່ອຄວາມສະ ເໝີ ພາບ.
  • "+ =" : ແມ່ນຜູ້ປະຕິບັດການທີ່ຈະເພີ່ມມູນຄ່າໃສ່ກະແຈທີ່ຖືບັນຊີລາຍການເຂົ້າມາ.
  • ລະບົບຍ່ອຍ: ກົງກັບລະບົບຍ່ອຍຂອງອຸປະກອນເຫດການ.
  • ການກະ ທຳ: ກົງກັບຊື່ການກະ ທຳ ເຫດການ.
  • ENV {DEVTYPE}: ກົງກັບມູນຄ່າຊັບສິນຂອງອຸປະກອນ, ປະເພດອຸປະກອນໃນກໍລະນີນີ້.
  • RUN: ລະບຸໂປຣແກຣມຫຼືສະຄິບທີ່ຈະ ດຳ ເນີນການເປັນສ່ວນ ໜຶ່ງ ຂອງການຈັດການເຫດການ.

ບັນທຶກເອກະສານແລະປິດມັນ. ຫຼັງຈາກນັ້ນເປັນຮາກ, ບອກ systemd-udevd ໃຫ້ໂຫລດໄຟລ໌ກົດລະບຽບ (ນີ້ກໍ່ຈະໂຫລດຖານຂໍ້ມູນອື່ນໆເຊັ່ນດັດສະນີໂມດູນແກ່ນ), ໂດຍການເຮັດວຽກ.

$ sudo udevadm control --reload

ຕອນນີ້ເຊື່ອມຕໍ່ USB drive ໃສ່ເຄື່ອງຂອງທ່ານແລະກວດເບິ່ງວ່າຕົວອັກສອນ device_added.sh ຖືກປະຕິບັດຫຼືບໍ່. ຫນ້າທໍາອິດຂອງໄຟລ໌ scripts.log ຄວນຖືກສ້າງຂື້ນພາຍໃຕ້/tmp.

$ ls -l /tmp/scripts.log

ຫຼັງຈາກນັ້ນ, ເອກະສານຄວນຈະມີການປ້ອນຂໍ້ມູນເຊັ່ນ:“ ອຸປະກອນ USB ອອກໃນວັນທີ”, ດັ່ງທີ່ສະແດງໃນພາບ ໜ້າ ຈໍ.

$ cat /tmp/scripts.log

ສຳ ລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບວິທີການຂຽນກົດລະບຽບຂອງ udev ແລະຄຸ້ມຄອງ udev, ໃຫ້ ຄຳ ປຶກສາກ່ຽວກັບປື້ມຄູ່ມືຂອງ udev ແລະ udevadm ຕາມ ລຳ ດັບ, ໂດຍການເຮັດວຽກ:

$ man udev
$ man udevadm

Udev ແມ່ນຜູ້ຈັດການອຸປະກອນທີ່ໂດດເດັ່ນເຊິ່ງສະ ໜອງ ວິທີການເຄື່ອນໄຫວໃນການຕັ້ງຄ່າຂໍ້ອຸປະກອນໃນໄດເລກະທໍລີ /dev . ມັນຮັບປະກັນວ່າອຸປະກອນຕ່າງໆໄດ້ຖືກຕັ້ງຄ່າທັນທີທີ່ພວກເຂົາສຽບແລະຄົ້ນພົບ. ມັນກະຈາຍຂໍ້ມູນກ່ຽວກັບອຸປະກອນທີ່ປຸງແຕ່ງຫຼືປ່ຽນແປງສະຖານະພາບຂອງມັນ, ຕໍ່ພື້ນທີ່ຂອງຜູ້ໃຊ້.

ຖ້າທ່ານມີ ຄຳ ຖາມຫຼືຄວາມຄິດໃດທີ່ຈະແບ່ງປັນກ່ຽວກັບຫົວຂໍ້ນີ້, ໃຫ້ໃຊ້ແບບຟອມ ຄຳ ຕິຊົມ.