Led驱动框架代码编译与运行

2023-12-24 15:48:59

一.? 简介

上一篇文章实现了 Led驱动框架,文章地址如下:

LED驱动框架代码的实现-CSDN博客

这里对上一篇实现的 Led驱动框架进行编译,然后在开发板上加载 Led驱动模块。

二.? Led驱动框架代码编译与运行

1.? 编译Led驱动框架代码

前面编写好了 Led驱动框架代码,现在对 2_led工程代码进行编译。进入 2_led根目录下,输入"make" 命令编译代码:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/2_led$ make
make -C /home/wangtian/zhengdian_Linux/linux/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga M=/home/wangtian/zhengdian_Linux/Linux_Drivers/2_led modules
make[1]: 进入目录“/home/wangtian/zhengdian_Linux/linux/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga”
  CC [M]  /home/wangtian/zhengdian_Linux/Linux_Drivers/2_led/led.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/wangtian/zhengdian_Linux/Linux_Drivers/2_led/led.mod.o
  LD [M]  /home/wangtian/zhengdian_Linux/Linux_Drivers/2_led/led.ko
make[1]: 离开目录“/home/wangtian/zhengdian_Linux/linux/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga”
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/2_led$
总用量 36

查看是否编译生成 .ko文件:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/2_led$ ls
led.c               led.ko     led.mod.o  Makefile       Module.symvers
led.code-workspace  led.mod.c  led.o      modules.order
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/2_led$ 

将 led.ko 驱动文件拷贝到 开发板的根文件系统 /lib/modules/4.1.15/ 目录下。

因为我这里根文件系统rootfs 放在 ubuntu 系统 nfs服务所设置的目录下, 开发板通过 nfs服务挂载方式加载根文件系统。

拷贝操作如下:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/2_led$ sudo cp led.ko /home/wangtian/linux/nfs_File/rootfs/lib/modules/4.1.15/ -f
[sudo] wangtian 的密码: 
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/2_led$ 

2. 加载驱动模块

开发板上电进入根文件系统下,进入 /lib/modules/4.1.15/目录下。查看是否已存在 驱动文件 led.ko:

/ # cd /lib/modules/4.1.15/
/lib/modules/4.1.15 # ls -l
total 12
-rw-r--r--    1 0        0             4367 Dec 23  2023 led.ko
-rw-r--r--    1 0        0                0 Dec 23  2023 modules.alias
-rw-r--r--    1 0        0                8 Dec 23  2023 modules.dep
-rw-r--r--    1 0        0                0 Dec 23  2023 modules.symbols
/lib/modules/4.1.15 # 

注意:使用 modprobe 命令加载驱动模块,但是,在第一次加载驱动模块时需要首先运行 depmod命令生成一些文件,之后才能使用 modprobe命令加载驱动模块!
这里使用 modprobe命令加载驱动模块。 输入如下命令加载 led.ko 驱动模块:
depmod     //第一次加载驱动的时候需要运行此命令
modprobe led.ko //加载驱动

开发板上运行 depmod命令,具体操作如下:

/lib/modules/4.1.15 # depmod
/lib/modules/4.1.15 # ls -l
total 12
-rw-r--r--    1 0        0             4367 Dec 23  2023 led.ko
-rw-r--r--    1 0        0                0 Dec 24  2023 modules.alias
-rw-r--r--    1 0        0                8 Dec 24  2023 modules.dep
-rw-r--r--    1 0        0                0 Dec 24  2023 modules.symbols
/lib/modules/4.1.15 # 

然后加载 modprobe命令加载驱动模块:

/lib/modules/4.1.15 # modprobe led.ko 
led_init!
/lib/modules/4.1.15 # 

确定 led.ko驱动模块是否成功加载?

确定 led.ko 驱动模块是否已成功加载有两种方法:运行 lsmod命令或 运行 cat /proc/devices 命令

运行 lsmod命令查看已加载的驱动模块:

/lib/modules/4.1.15 # lsmod
Module????????????????? Size? Used by??? Tainted: G ?
led???????????????????? 1038? 0
/lib/modules/4.1.15 #

或者 查看 开发板根文件系统 的根目录 /proc/devices目录下,是否已存在我加载的 Led设备。

运行 "cat /proc/devices" 命令查看设备:

可以看到,/proc/devices 目录下已经存在了 刚刚所加载的 led驱动设备。说明 led驱动模块已加载成功。

现在可以卸载驱动模块,卸载模块使用 "rmmod led.ko" 命令:

/lib/modules/4.1.15 # rmmod led.ko 
led_exit!
/lib/modules/4.1.15 # 

lsmod命令可以确认驱动模块是否已卸载:

/lib/modules/4.1.15 # lsmod 
Module                  Size  Used by    Tainted: G  
/lib/modules/4.1.15 # 

可以看出,已经成功卸载驱动模块。

Led驱动框架实现后,接下来开始编写 Led具体驱动代码的实现。

文章来源:https://blog.csdn.net/wojiaxiaohuang2014/article/details/135181641
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。