i.MX6ULL终结者Linux并发与竞争实验互斥体实验

日期:2020-12-15

  • 1 编写驱动程序

    本实验例程路径:i.MX6UL终结者光盘资料/06_Linux驱动例程/07_gpioled_mutex

    创建gpioled_mutex.c,内容如下(有省略) :

    第 33 行,定义互斥体 lock。

    第 45~58 行,在 open 函数中调用 mutex_lock_interruptible 或者 mutex_lock 获取 mutex,成功的话就表示可以使用 LED 灯,失败的话就会进入休眠状态,和信号量一样。

    第 114 行,在 release 函数中调用 mutex_unlock 函数释放 mutex,这样其他应用程序就可以获取 mutex 了。

    第 138 行,在驱动入口函数中调用 mutex_init 初始化 mutex。

    互斥体和二值信号量类似,只不过互斥体是专门用于互斥访问的。

    2 编写应用测试程序

    应用测试程序使用38.1.2中的应用测试程序即可。

    3 运行测试

    1、编译驱动程序

    添加Makefile文件,修改obj-m的值为 gpioled_mutex.o,内容如下:

    首先我们在终端输入两个命令(设置两个环境变量):

    export ARCH=arm

    export CROSS_COMPILE=arm-linux-gnueabihf-

    然后使用“make”命令进行编译,生成gpioled_semaphore.ko驱动模块文件。

    2、运行测试

    将编译好的gpioled_mutex.ko驱动模块文件拷贝到/lib/modules/4.1.15目录下(检查开发板根文件系统中有没有“/lib/modules/4.1.15”这个目录,如果没有的话需要自行创建一下。开发板中使用的是光盘资料里面提供的busybox文件系统,光盘资料的“i.MX6UL终结者光盘资料\08_开发板系统镜像\03_文件系统镜像\01_Busybox文件系统”目录下)。输入下面命令加载模块:

    depmod

    modprobe gpioled_mutex

    驱动模块加载成功如图 3.1所示:

    驱动模块加载成功后,使用gpioled_atomic_test应用测试程序进行测试,测试流程和原子变量测试一样。使用下面的命令打开LED灯:

    ./gpioled_atomic_test /dev/gpioled 1 &

    然后紧接着输入LED灯关闭命令:

    ./gpioled_atomic_test /dev/gpioled 0 &

    运行结果如下:

    可以看出和信号量的测试结果一样。

    卸载模块命令:

    rmmod gpioled_mutex

收缩
  • 旺旺咨询
  • 点这里给我发消息
  • 电话咨询

  • 01085270716