编写自己的LINUX驱动并加载到系统中

2025-10-26 23:46:35

1、Linux下的设备大体分为三类:

(1)块设备: 一次I/O操作以固定大小的数据块为单位,块设备通过缓冲区读写,如硬盘。

(2)字符设备:直接读取的,不必使用缓冲区,如串口。

(3)网络设备:Linux使用套接口(socket)以文件I/O方式提供了对网络数据的访问。

2、虚拟文件系统

      Linux使用虚拟文件系统VFS(Virtual File System)做为统一的操作接口来处理文件和设备。

      每个设备文件与普通的目录和文件一样,可用一个file结构来表示。其属性包括:文件名、设备类型、主设备号、次设备号。

编写自己的LINUX驱动并加载到系统中

3、file_operations结构体

    通过file_operations来调用驱动程序的设备服务子程序。如:write( ) 函数:向设备发送数据,read()函数:从设备中读取数据。

编写自己的LINUX驱动并加载到系统中

4、查看当前设备

#cd /dev

#ls -l

编写自己的LINUX驱动并加载到系统中

5、查看设备的相关命令

# cat /proc/cpuinfo      # 查看CPU信息 

 # hostname               # 查看计算机名  

# lsusb -tv              # 列出所有USB设备

# env                  # 查看环境变量

编写自己的LINUX驱动并加载到系统中

6、编写源代码my_driver.c

   在my_driver.c中编写源代码,它是一个非常简单的设备驱动程序代码框架,其任务是将内核模块中的init函数动态地注册到系统中并运行,由module_init()实现驱动的加载,由module_exit()实现驱动的卸载

编写自己的LINUX驱动并加载到系统中

7、Makefile及编译

编写Makefile,将源代码编译,其内容如下:

-------------------------------------------------

obj-m+=my_driver.o

all:        

       make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules

 clean:       

       make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) clean

---------------------------------------------

其中my_driver.o就是目标文件,make工具会根据目标文件自动推导来编译my_driver.c文件。

编写自己的LINUX驱动并加载到系统中

8、加载到内核中

    运行#make后,就会编译生成了内核文件my_driver.ko,我们使用以下命令,将其加载到内核中 

#sudo insmod my_driver.ko  //超级模式下加载驱动

#lsmod | grep "my_driver"  //检查是否加载成功

#sudo rmmod my_driver.ko//卸载驱动  

编写自己的LINUX驱动并加载到系统中

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢