上一篇文章实现了 Led驱动框架,文章地址如下:
这里对上一篇实现的 Led驱动框架进行编译,然后在开发板上加载 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$
开发板上电进入根文件系统下,进入 /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 #
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 驱动模块是否已成功加载有两种方法:运行 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具体驱动代码的实现。