Peranti aksara Linux diletakkan dalam direktori "/dev". Peranti aksara merujuk kepada peranti yang hanya boleh dibaca dan ditulis bait demi bait Secara amnya, setiap peranti aksara atau peranti sekat akan sepadan dengan fail peranti dalam direktori "/dev", dan setiap fail peranti mesti mempunyai utama/ Peranti dengan. nombor peranti kecil yang sama dan nombor peranti utama adalah peranti yang serupa dan menggunakan pemacu yang sama.
Persekitaran pengendalian tutorial ini: sistem linux7.3, komputer Dell G3.
Sistem Linux membahagikan peranti kepada tiga kategori: Peranti aksara, peranti sekat dan rangkaian Peranti , antara tiga kategori ini, peranti aksara adalah agak mudah. Aplikasi mengakses peranti aksara melalui fail peranti aksara. Jika anda berminat dengan peranti sekat dan peranti rangkaian, anda boleh merujuk kepada maklumat yang berkaitan dan memperoleh pemahaman yang mendalam mengenainya.
Peranti aksara merujuk kepada peranti yang hanya boleh membaca dan menulis bait demi bait Data tertentu dalam peranti tidak boleh dibaca secara rawak dan data mesti dibaca mengikut susunan. Peranti aksara ialah peranti berorientasikan aliran termasuk tetikus, papan kekunci, port bersiri, konsol dan LED.
Secara amnya, setiap peranti aksara atau peranti sekat akan sepadan dengan fail peranti dalam direktori /dev, dan setiap fail peranti mesti mempunyai utama/ Peranti dengan nombor peranti kecil dan nombor peranti utama yang sama adalah peranti yang serupa dan menggunakan pemacu yang sama.
Atur cara peringkat pengguna Linux menggunakan pemacu untuk mengendalikan peranti aksara atau menyekat peranti melalui fail peranti.
Anda boleh menggunakan perintah
cat /proc/devices
untuk melihat nombor peranti utama pemacu peranti yang sedang dimuatkan.
Anda boleh melihat nombor peranti utama dan kecil bagi semua fail peranti dengan melaksanakan arahan
ls -l
dalam direktori /dev:
Terangkan fail peranti biasa seperti berikut:
/dev/hd[a-t]:IDE设备 /dev/sd[a-z]:SCSI设备 /dev/fd[0-7]:标准软驱 /dev/md[0-31]:软raid设备 /dev/loop[0-7]:本地回环设备 /dev/mem:内存 /dev/null:无限数据接收设备,相当于黑洞 /dev/zero:无限零资源 /dev/tty[0-63]:虚拟终端 /dev/ttyS[0-3]:串口 /dev/lp[0-3]:并口 /dev/console:控制台 /dev/fb[0-31]:framebuffer /dev/cdrom => /dev/hdc /dev/modem => /dev/ttyS[0-9] /dev/pilot => /dev/ttyS[0-9]
Terdapat dua cara untuk mencipta fail peranti Salah satunya adalah melalui panggilan sistem mknod(). daripada arahan Parameter ialah nama fail peranti, parameter kedua ialah jenis peranti, contohnya, c mewakili peranti aksara, dan parameter ketiga dan keempat ialah nombor peranti utama dan nombor peranti kecil bagi fail peranti, seperti 231 dan 0. Gabungan nombor peranti utama dan nombor peranti kecil secara unik menentukan peranti Nombor peranti utama bagi jenis peranti yang sama adalah sama, tetapi nombor peranti kecil adalah berbeza nombor peranti kecil yang berbeza Nombor peranti boleh mengaitkan fail peranti dengan pemandu.
nama fail mknod jenis major minor
Apabila proses pengguna melakukan operasi seperti membaca dan menulis pada fail peranti, sistem memanggil untuk mencari pemacu peranti yang sepadan melalui nombor peranti utama fail peranti, dan kemudian membaca fungsi yang sepadan penunjuk struktur data ini, dan kemudian memindahkan kawalan ke fungsi Ini adalah prinsip asas bagaimana pemacu peranti Linux berfungsi.
struct cdev { struct kobject kobj; // 内嵌内核对象 struct module *owner; //该字符设备所在的内核模块 const struct file_operations *ops; //文件操作结构体 struct list_head list; //已注册字符设备链表 dev_t dev; //由主、次设备号构成的设备号 unsigned int count;//同一主设备号的次设备号的个数 };
5 Antara muka antara peranti aksara dan sistem fail
struct file_operations { struct module *owner; loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char *, size_t, loff_t *); ssize_t (*write) (struct file *, const char *, size_t, loff_t *); int (*readdir) (struct file *, void *, filldir_t); unsigned int (*poll) (struct file *, struct poll_table_struct *); int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long); int (*mmap) (struct file *, struct vm_area_struct *); int (*open) (struct inode *, struct file *); int (*flush) (struct file *); int (*release) (struct inode *, struct file *); int (*fsync) (struct file *, struct dentry *, int datasync); int (*fasync) (int, struct file *, int); int (*lock) (struct file *, int, struct file_lock *); ssize_t (*readv) (struct file *, const struct iovec *, unsigned long,loff_t *); ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *); };
Seperti yang ditunjukkan dalam rajah, dalam kernel Linux, di bahagian paling kiri, struktur cdev digunakan untuk menerangkan peranti aksara dev_t digunakan untuk menentukan nombor peranti (dibahagikan kepada nombor peranti utama dan kecil). tentukan keunikan peranti aksara; melalui dev_t ahlinya File_operations ahli mentakrifkan fungsi antara muka yang disediakan oleh pemacu peranti aksara kepada sistem fail maya VFS, seperti buka biasa(), baca(), tulis(), dsb. Fungsi-fungsi ini sebenarnya mengendalikan peranti perkakasan.
Berdasarkan gambar sebelum ini, mari lihat gambar ini Pemacu peranti aksara dimuatkan ke dalam kernel dalam bentuk modul kernel Pertama, fungsi pemuatan modul adalah statik atau Secara dinamik memperoleh nombor peranti ; kemudian peranti aksara fungsi permulaan mewujudkan sambungan antara cdev dan operasi_fail , dan menambahkannya pada sistem melalui fungsi pendaftaran cdev untuk melengkapkan pendaftaran; apabila modul dipunggah, sepadan dengan pemuatan, cdev perlu dilog keluar dan nombor peranti dikeluarkan.
Dalam program pengguna, fungsi ini yang dilaksanakan oleh pemacu dalam kernel boleh dipanggil melalui panggilan sistem seperti open(), read(), write(), dll. Dengan cara ini, laluan antara mod pengguna dan pemacu kernel dibuka.
Seperti yang ditunjukkan dalam rajah, tulis aksara. pemacu peranti Terdapat tiga langkah utama:
Fungsi fungsi antara muka yang dipanggil adalah seperti berikut:
Fungsi pertama ialah fungsi peruntukan, yang digunakan secara dinamik untuk memori cdev dan memperuntukkannya ke ruang memori struktur.
Fungsi kedua ialah fungsi permulaan, yang memulakan ahli cdev dan mewujudkan perkaitan antara cdev dan operasi_fail.
Fungsi ketiga mendaftarkan objek peranti cdev, iaitu, menambah aksara peranti ke Dalam jadual peranti aksara, sama seperti semua orang mendaftar apabila mereka memasuki sekolah.
Fungsi keempat adalah untuk log keluar panggilan pemacu dan memadam objek cdev daripada sistem.
Fungsi kelima melepaskan memori yang diduduki oleh struktur data cdev.
6.1 Aplikasi dan keluaran nombor peranti
Peranti aksara atau peranti blok mempunyai nombor peranti utama dan A nombor peranti kecil. Nombor peranti utama digunakan untuk mengenal pasti pemacu yang disambungkan ke fail peranti dan menggambarkan jenis peranti. Nombor peranti kecil digunakan oleh pemandu untuk mengenal pasti peranti yang ia sedang beroperasi dan untuk membezakan peranti daripada jenis yang sama . Mohon nombor peranti semasa mendaftar, dan keluarkan nombor peranti semasa log keluar Sama seperti semua orang mempunyai ID pelajar semasa mereka mendaftar, dan ID pelajar ini dikeluarkan apabila mereka tamat pengajian dan keluar.
6.2 Pemindahan Ruang Pengguna dan Data Ruang Kernel
Apabila kita Apabila fungsi baca() dipanggil dalam program pengguna, ia jatuh ke dalam ruang kernel Malah, data dalam penimbal ruang kernel mesti disalin ke penimbal ruang pengguna melalui fungsi copy_to_user() kernel. apabila kita memanggil fungsi write() Apabila, kernel menyalin data ruang pengguna ke penimbal kernel dengan memanggil fungsi copy_from_user().
Cadangan berkaitan: "Tutorial Video Linux"
Atas ialah kandungan terperinci Di manakah peranti aksara linux diletakkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!