今天来聊聊Linux的驱动
Linux设备驱动时Linux系统中必不可少的一个重要组成部分。
linux的应用程序是不能直接访问硬件的,必须要通过驱动才能访问硬件。
具体的步骤是:Linux应用程序—>Linux设备驱动程序—>访问硬件
例如图形显示:
Linux系统IO函数(应用程序)—>显卡的驱动程序—>显卡和液晶屏硬件
每个硬件都需要有自己的驱动程序,驱动程序给应用程序提供的是一个标准的接口#
驱动框架
给大家随意画了个图参考一下
Linux设备驱动的分类
1.字符设备驱动
应用程序和驱动程序之间是按照字节来传输数据的,传输的数据是实时的,是没有缓存的。字符设备也是没有文件系统的。
设备:显卡、声卡、串口、摄像头、LED、BEEP、按键、鼠标、键盘、触摸屏、ADC、I2C、…
访问字符设备的方法:
系统IO函数:open()、mmap()、write()、read()、ioctl()、close()
2、块设备驱动
大容量的存储设备,块设备上面需要使用文件系统、而且带有缓存。例如:电子硬盘、U盘、SD卡、机械硬盘、…
1)查看块设备的设备文件
==>ls /dev -l
drwxr-xr-x 2 root root 320 Feb 20 20:24 block
drwxr-xr-x 3 root root 60 Jan 1 1970 bus
drwxr-xr-x 2 root root 3440 Feb 20 20:24 char
drwxr-xr-x 6 root root 120 Feb 20 20:24 disk
drwxr-xr-x 3 root root 80 Feb 20 20:24 dri
2)查看硬盘的使用情况
==>df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 6.6G 1.6G 4.7G 26% /
devtmpfs 507M 4.0K 507M 1% /dev
tmpfs 988M 0 988M 0% /dev/shm
tmpfs 988M 8.5M 979M 1% /run
tmpfs 988M 0 988M 0% /sys/fs/cgroup
tmpfs 988M 4.0K 988M 1% /tmp
tmpfs 988M 192K 987M 1% /var/volatile
/dev/mmcblk0p1 500M 23M 478M 5% /run/media/mmcblk0p1
tmpfs 198M 88K 198M 1% /run/user/0
分析/dev/root---->rootfs所在分区。
==>ls /dev/mmcblk* -l
brw-rw---- 1 root disk 179, 0 Feb 20 20:24 /dev/mmcblk0
brw-rw---- 1 root disk 179, 32 Feb 20 20:24 /dev/mmcblk0boot0
brw-rw---- 1 root disk 179, 64 Feb 20 20:24 /dev/mmcblk0boot1
brw-rw---- 1 root disk 179, 1 Feb 20 20:24 /dev/mmcblk0p1
brw-rw---- 1 root disk 179, 2 Feb 20 20:24 /dev/mmcblk0p2
brw-rw---- 1 root disk 179, 96 Feb 20 20:24 /dev/mmcblk0rpmb
一般fs会放在mmcblk0p2下面
内核的启动输出:
==>dmesg|grep EXT4-fs
[ 4.545484] EXT4-fs (mmcblk0p2): mounting ext3 file system using the ext4 subsystem
[ 4.706012] EXT4-fs (mmcblk0p2): recovery complete
[ 4.710127] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[ 5.420665] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
==>mount /dev/mmcblk0p2 /mnt
root@imx8mqevk:~# ls /mnt
bin dev fb.jpg lib media mnt proc sbin tmp usr
boot etc home lost+found memtester opt run sys unit_tests va
3)查看硬盘的分区
==>cat /proc/partitions
major minor #blocks name
179 0 7634944 mmcblk0
179 1 512000 mmcblk0p1
179 2 7020544 mmcblk0p2
179 96 512 mmcblk0rpmb
179 64 4096 mmcblk0boot1
179 32 4096 mmcblk0boot0
3、网络设备驱动
1)
主要是针对网卡设备,例:网卡、wifi、…
网络设备是没有设备文件的。
2)以太网网络分层
应用层
表示层
会话层
--------------网络应用,如:tftp、telnet、HTTP、音视频传输—>linux应用程序
传输层
网络层
--------------TCP/IP协议—>linux内核
数据链路层
--------------Linux网卡驱动---->Linux内核
物理层
--------------网卡硬件
3)网卡操作
#ifconfig -a
#ifconfig eth0 up
#ifconfig eth0 down
#ifconfig eth0 192.168.14.20
4)应用程序访问网卡的方法
socket套接字+TCP或UDP