GNU/Linux >> Belajar Linux >  >> Linux

Linux – Sysfs dan Devtmpfs?

Ulrich Dangel menjelaskan dengan baik perbedaan antara devtmpfs dan udev.

Bagaimana dengan sysfs?

Saya mengerti bahwa kernel menggunakan sysfs untuk mengekspor node perangkat ke ruang pengguna untuk digunakan oleh udev. Jadi devtmpfs dan sysfs sama? Jika ya, mengapa mereka menggunakan nama yang berbeda? Jika tidak, apa perbedaan nyata antara sysfs dan devtmpfs?

Jawaban yang Diterima:

kernel menggunakan sysfs untuk mengekspor node perangkat ke ruang pengguna untuk digunakan oleh udev

Tidak. Sysfs tidak mengandung node perangkat. Sysfs terutama berisi file yang memberikan informasi tentang perangkat, serta beberapa file yang memungkinkan proses untuk mengontrol bagaimana perangkat beroperasi. Tetapi sebagian besar perangkat tidak dapat digunakan melalui apa yang disediakan sysfs.

Mari kita ambil hard disk, misalnya. Ada direktori untuk itu di suatu tempat di bawah /sys/devices , dengan jalur yang bergantung pada cara koneksinya ke komputer (mis. /sys/devices/pci0000:00/… untuk disk yang terhubung ke pengontrol yang terhubung ke bus PCI utama komputer). Di direktori itu, Anda dapat menemukan berbagai informasi seperti ukurannya, apakah itu dapat dilepas, status dayanya, dll. Ada juga subdirektori untuk partisi. Tetapi tidak ada apa pun di sana yang menyediakan akses ke konten disk. Di tempat lain di /sys , ada tautan simbolis ke direktori yang terkait dengan disk itu:di /sys/block , di /sys/class/block , dll. Tapi tetap tidak ada yang bisa mengakses konten disk.

Di /dev , entri untuk disk adalah file khusus — perangkat blok. File ini memungkinkan proses untuk membaca dan menulis konten disk. (Meskipun untuk disk yang biasanya tidak terjadi; sebagai gantinya konten disk — atau partisi — dipasang, sehingga kernel mengakses perangkat, proses tidak.)

File perangkat memungkinkan beberapa operasi selain membaca dan menulis konten dilakukan melalui ioctl. Dimungkinkan untuk menyediakan semua informasi dan antarmuka kontrol yang disediakan sysfs melalui ioctl pada file perangkat. Namun ini akan menjadi kurang nyaman karena beberapa alasan:

  • Dengan file terpisah di /sys , izin dapat diatur secara terperinci. Dengan satu file per perangkat di /dev , itu semua atau tidak sama sekali.
  • File terpisah dapat dibaca dan ditulis dengan mudah oleh aplikasi. Anda cukup menggunakan cat atau echo . Dengan ioctl, ini jauh lebih sulit:tidak ada antarmuka shell, seringkali tidak ada antarmuka dalam bahasa tingkat tinggi lainnya.
  • Dengan ioctl, perintah harus dikodekan dalam angka daripada nama, dan format argumen harus didefinisikan pada tingkat biner. Menggunakan nama dan format teks sederhana memudahkan penulisan perangkat lunak.

Pergi ke arah lain, dimungkinkan untuk menyediakan akses ke konten perangkat melalui file di sysfs. Tapi ini akan membutuhkan kerja ekstra di kernel:sysfs dirancang terutama untuk melayani file kecil dan tautan simbolik, dan tanpa ioctl dukungan yang diharapkan aplikasi yang ada. Saya tidak berpikir akan ada manfaat yang signifikan untuk memperluas sysfs untuk mendukung jenis perangkat yang ada, sehingga keberadaan file perangkat terus berlanjut.

Terkait:Linux – Bagaimana cara mengetahui hard disk apa yang ada di sistem?

Sysfs secara otomatis diisi oleh kernel, mencerminkan perangkat yang sebenarnya tersedia secara real time. Arti file di sysfs berasal dari jalurnya, yang dipilih oleh driver yang menyediakan file itu. /dev bekerja secara berbeda:arti file berasal dari jenis file perangkat (blok atau karakter) dan nomor mayor dan minornya (itulah ls -l daftar alih-alih ukuran file untuk perangkat). Biasanya, /dev statis, dengan file perangkat yang dibuat selama instalasi sistem; tetapi itu tidak berfungsi dengan baik ketika perangkat dapat dicolokkan, oleh karena itu keinginan untuk /dev dinamis yang mencerminkan perangkat yang terhubung secara real time.

Linux telah melalui beberapa iterasi /dev yang dinamis . Linux 2.4 memiliki devfs, di mana kernel secara otomatis membuat entri untuk mencerminkan perangkat yang terhubung. Tapi itu tidak begitu bagus, karena penamaan perangkat dan kebijakan izin hard-code ke dalam kernel, sehingga digantikan oleh program userland udev untuk mengelola kebijakan, dan /dev pada sistem file tmpfs sederhana (sistem file dalam memori tanpa arti khusus untuk kernel). Dan kemudian devfs membuat comeback sebagian, dengan devtmpfs, yang merupakan turunan dari tmpfs di mana entri untuk perangkat yang tersedia secara otomatis dibuat oleh kernel, tetapi udev melakukan semua manajemen yang diinginkan selain itu.


Linux
  1. Bagaimana cara mendapatkan vendor USB dan info produk secara terprogram di Linux?

  2. Apa perbedaan antara driver platform Linux dan driver perangkat biasa?

  3. Bagaimana cara memasang perangkat di Linux?

  1. Cara menginstal driver perangkat di Linux

  2. Kaset Linux, apa l a dan m di akhir perangkat kaset di dev?

  3. Enumerasi perangkat Linux yang konsisten

  1. Perintah Linux:pekerjaan, bg, dan fg

  2. Linux Hapus File dan Direktori

  3. Putuskan dan sambungkan kembali ttyUSB0 secara terprogram di Linux