驱动测试程序编写、驱动程序卸载与测试

来源:互联网 发布:ubuntu 16.04 精简下载 编辑:程序博客网 时间:2024/05/16 05:45


一、基于qtopia2.2.0的驱动测试程序的编写

1、PWM测试程序的开发

   1、1 在  /opt/FriendlyARM/qtopia_apps 目录下创建 pwm-testing作为本示例的项目目录,在终端上输入如下命令: 

# mkdir –p /opt/FriendlyARM/qtopia_apps/pwm-testing

   1.2  使用 designer  工具设计图形界面 

在弹出的 New  Form 界面中,选择“Widget”然后点击”OK“,在弹出的界面中设置如下参数,且添加如下pushbutton控件.其中Start,Stop,Close按钮nameyi依次设置为:m_startbutton,m_stopbutton,m_closebutton。

  

   1.3 编写代码

首先用 vi 编辑器创建并打开  main.cpp 文件: 

# vi main.cpp 

在 vi 编辑器中输入如下源代码内容: 

#include "main_form.h" 

#include <qtopia/qpeapplication.h> 

 

QTOPIA_ADD_APPLICATION("pwm-testing",TMainForm) 

QTOPIA_MAIN 

 

然后用 vi 编辑器创建并打开  main_form.h 文件: 

# vi main_form.h 

 

在 vi 编辑器中输入如下源代码内容: 

#ifndef __MAIN_FORM_H__ 

# define    __MAIN_FORM_H__ 

 

#include "main_form_base.h" 

 

class TMainForm: public TMainFormBase { 

    Q_OBJECT 

public: 

    TMainForm(QWidget * parent = 0, const char * name = 0, WFlags f = WType_TopLevel); 

    virtual ~TMainForm(); 

private slots: 

    void buttonClicked(); 

private: 

    int m_fd; 

}; 

#endif

 

其次用 vi 编辑器创建并打开  main_form.cpp 文件: 

# vi main_form.cpp 

 

在 vi 编辑器中输入如下源代码内容: 

#include "main_form.h" 

 

#include <qlabel.h> 

#include <qpushbutton.h> 

#include <qlayout.h> 

#include <qspinbox.h> 

#include <unistd.h> 

#include <stdlib.h> 

#include <sys/types.h> 

#include <sys/stat.h> 

#include <sys/ioctl.h> 

#include <fcntl.h> 

#include <qapplication.h> 

 

#define PWM_IOCTL_SET_FREQ              1 

#define PWM_IOCTL_STOP                  0 

 

TMainForm::TMainForm(QWidget * parent, const char * name, WFlags f) 

    : TMainFormBase(parent, name, f) 

    m_fd = ::open("/dev/pwm", O_RDONLY); 

    ::ioctl(m_fd, PWM_IOCTL_STOP); 

 

    connect(m_startButton,SIGNAL(clicked()),this,SLOT(buttonClicked()) ); 

connect(m_stopButton, SIGNAL(clicked()), this, SLOT(buttonClicked()) ); 

    connect(m_closeButton,SIGNAL(clicked()),this,SLOT(buttonClicked()) ); 

 

TMainForm::~TMainForm() 

    ::ioctl(m_fd, PWM_IOCTL_STOP); 

    ::close(m_fd); 

 

 

void TMainForm::buttonClicked() 

    QPushButton* obj = (QPushButton*)sender(); 

 

    if (obj == m_startButton) { 

        ::ioctl(m_fd, PWM_IOCTL_SET_FREQ, 1000); 

    } else if (obj == m_stopButton) { 

        ::ioctl(m_fd, PWM_IOCTL_STOP); 

    } else if (obj == m_closeButton) { 

        close(); 

    } 

 

 

最后用 vi 编辑器创建并打开  pwm-testing.pro 文件: 

# vi pwm-testing.pro 

在 vi 编辑器中输入如下内容: 

CONFIG       += qtopiaapp 

CONFIG       -= buildQuicklaunch 

HEADERS      = main_form.h 

SOURCES      = main_form.cpp main.cpp 

INTERFACES       = main_form_base.ui 

TARGET       = pwm-testing 

 

 

1.4 交叉编译 pwm-testing 程序 

创建一个 ARM 版本的编译脚本  buildarm.sh,然后执行该脚本编译 pwm-testing :.

#vim buildarm.sh

其中的内容如下:

运行脚本:

#./buildarm.sh    (会生成pwm-testing可执行文件)

#!/bin/sh 

 

source /opt/FriendlyARM/tiny4412/linux/arm-qtopia/qtopia-2.2.0-FriendlyARM/setQpeEnv

qmake -spec qws/linux-arm-g++ -o Makefile.target *.pro 

make -f Makefile.target clean 

make -f Makefile.target

 

如下图所示:


 

 

 

编译完成后,在 pwm-testing 下生成了 pwm-testing 可执行文件,把它拷贝到 SD 卡,然后将 SD插到 tiny4412 开发板上,在串口终端上输入以下命令将可执行文件拷贝到开发板上的 /opt/Qtopia/bin/  目录下: 

@# cp /sdcard/pwm-testing /opt/Qtopia/bin/ 

@# chmod +x /opt/Qtopia/bin/pwm-testing 

 

1.5 在 Qtopia 上添加 pwm-testing 程序图标 

首先编写一 desktop 文件: 

# cd /opt/tiny4412/qtopia2_apps/pwm-testing/ 

# vi pwm-testing.desktop 

 

在 vi 中输入以下内容并保存: 

[Translation] 

File=QtopiaSettings 

Context=pwm-testing 

Comment[Desktop  Entry/Name]=Use  soft  hyphen  (char  U00AD)  to  indicate 

hyphenation 

[Desktop Entry] 

Exec=pwm-testing 

Icon=pwm-testing 

Type=Application 

Name[]=PWM-Testing 

CanFastload=0

 

把 pwm-testing.png  和  pwm-testing.desktop  这两个文件放入 SD 卡,然后将  SD  卡插到 tiny4412开发板上,在串口终端上执下以下命令,把这两个文件拷贝到 Qtopia 目录的相应位置: 

@# cp /sdcard/pwm-testing.desktop /opt/Qtopia/apps/Applications/ 

@# cp /sdcard/pwm-testing.png /opt/Qtopia/pics/ 

 

 

1.6 运行 pwm-testing 程序 

     要运行 pwm-testing 程序,只要在 Applications 中找到 pwm-testing 应用程序图标并点击即可,运行结果如下图所示: 

 

 

点击 Start 即可,要停止发声,点击 Stop,点 Close 将退出程序

 

 

 

 

 

2、LED测试程序的开发

   2、1 在  /opt/FriendlyARM/qtopia_apps 目录下创建 led-testing作为本示例的项目目录,在终端上输入如下命令: 

# mkdir –p /opt/FriendlyARM/qtopia_apps/led-testing

2.2  使用 designer  工具设计图形界面 

在弹出的 New  Form 界面中,选择“Widget”然后点击”OK“,在弹出的界面中设置如下参数,且添加如下CheckBox控件.其中Start,Stop,Close按钮nameyi依次设置为:m_led1,m_led2,m_led3,m_led4。

 

 2.3 编写代码(代码见附录)

首先用 vi 编辑器创建并打开  main.cpp 文件: 

# vi main.cpp 

然后用 vi 编辑器创建并打开  main_form.h 文件: 

# vi main_form.h 

其次用 vi 编辑器创建并打开  main_form.cpp 文件: 

最后用 vi 编辑器创建并打开  led-testing.pro 文件: 

 

   2.4 交叉编译 led-testing 程序 

创建一个 ARM 版本的编译脚本  buildarm.sh,然后执行该脚本编译 led-testing :.

#vim buildarm.sh

其中的内容如下:

运行脚本:

#./buildarm.sh    (会生成led-testing可执行文件)

 

如下图所示:

 

 

编译完成后,在 led-testing 下生成了 led-testing 可执行文件,把它拷贝到 SD 卡,然后将 SD插到 tiny4412 开发板上,在串口终端上输入以下命令将可执行文件拷贝到开发板上的 /opt/Qtopia/bin/  目录下: 

@# cp /sdcard/led-testing /opt/Qtopia/bin/ 

@# chmod +x /opt/Qtopia/bin/led-testing 

 

2.5 在 Qtopia 上添加 led-testing 程序图标 

首先编写一 desktop 文件: 

# cd /opt/mini6410/qtopia2_apps/led-testing/ 

# vi led-testing.desktop 

 

在 vi 中输入以下内容并保存: 

[Translation] 

File=QtopiaSettings 

Context=led-testing 

Comment[Desktop  Entry/Name]=Use  soft  hyphen  (char  U00AD)  to  indicate 

hyphenation 

[Desktop Entry] 

Exec=led-testing 

Icon=led-testing 

Type=Application 

Name[]=LED-Testing 

CanFastload=0

 

把 led-testing.png  和  led-testing.desktop  这两个文件放入 SD 卡,然后将  SD  卡插到 tiny4412开发板上,在串口终端上执下以下命令,把这两个文件拷贝到 Qtopia 目录的相应位置: 

@# cp /sdcard/led-testing.desktop /opt/Qtopia/apps/Applications/ 

@# cp /sdcard/led-testing.png /opt/Qtopia/pics/ 

 

 

2.6  要运行 led-testing 程序,只要在 Applications 中找到 led-testing 应用程序图标并点击即可,运行结果如下图所示: 

   

 

3、ADC测试程序的开发

   3、1 在  /opt/FriendlyARM/qtopia_apps 目录下创建 adc-testing作为本示例的项目目录,在终端上输入如下命令: 

# mkdir –p /opt/FriendlyARM/qtopia_apps/adc-testing

   3.2  使用 designer  工具设计图形界面 

在弹出的 New  Form 界面中,选择“Widget”然后点击”OK“,在弹出的界面中设置如下参数,且添加如下LCD Number控件.按钮名字设置为:m_label

 

3.3 编写代码(代码见附录)

首先用 vi 编辑器创建并打开  main.cpp 文件: 

# vi main.cpp 

然后用 vi 编辑器创建并打开  main_form.h 文件: 

# vi main_form.h 

其次用 vi 编辑器创建并打开  main_form.cpp 文件: 

最后用 vi 编辑器创建并打开  adc-testing.pro 文件: 

 

   3.4 交叉编译 adc-testing 程序 

创建一个 ARM 版本的编译脚本  buildarm.sh,然后执行该脚本编译 adc-testing :.

#vim buildarm.sh(其中的内容与前面相同

运行脚本:

#./buildarm.sh    (会生成adc-testing可执行文件)

 

编译完成后,在 adc-testing 下生成了 adc-testing 可执行文件,把它拷贝到 SD 卡,然后将 SD插到 tiny4412 开发板上,在串口终端上输入以下命令将可执行文件拷贝到开发板上的 /opt/Qtopia/bin/  目录下: 

@# cp /sdcard/adc-testing /opt/Qtopia/bin/ 

@# chmod +x /opt/Qtopia/bin/adc-testing 

 

3.5 在 Qtopia 上添加 adc-testing 程序图标 

首先编写一 desktop 文件: 

# cd /opt/mini6410/qtopia2_apps/adc-testing/ 

# vi adc-testing.desktop 

 

在 vi 中输入以下内容并保存: 

[Translation] 

File=QtopiaSettings 

Context=led-testing 

Comment[Desktop  Entry/Name]=Use  soft  hyphen  (char  U00AD)  to  indicate 

hyphenation 

[Desktop Entry] 

Exec=adc-testing 

Icon=adc-testing 

Type=Application 

Name[]=ADC-Testing 

CanFastload=0

 

把 adc-testing.png  和  adc-testing.desktop  这两个文件放入 SD 卡,然后将  SD  卡插到 tiny4412开发板上,在串口终端上执下以下命令,把这两个文件拷贝到 Qtopia 目录的相应位置: 

@# cp /sdcard/adc-testing.desktop /opt/Qtopia/apps/Applications/ 

@# cp /sdcard/adc-testing.png /opt/Qtopia/pics/ 

 

 

3.6  要运行 adc-testing 程序,只要在 Applications 中找到 adc-testing 应用程序图标并点击即可,运行结果如下图所示: 

 

 

 

 

 

 

 

 

4、button测试程序的开发

   4.1 在  /opt/FriendlyARM/qtopia_apps 目录下创建 button-testing作为本示例的项目目录,在终端上输入如下命令: 

# mkdir –p /opt/FriendlyARM/qtopia_apps/button-testing

  4.2  使用 designer工具设计图形界面 

        此时不需要设计界面,可以忽略。

 4.3 编写代码(代码见附录)

首先用 vi 编辑器创建并打开  main.cpp 文件: 

# vi main.cpp 

然后用 vi 编辑器创建并打开  main_form.h 文件: 

# vi main_form.h 

其次用 vi 编辑器创建并打开  main_form.cpp 文件: 

最后用 vi 编辑器创建并打开  button-testing.pro 文件: 

 4.4 交叉编译 button-testing 程序 

创建一个 ARM 版本的编译脚本  buildarm.sh,然后执行该脚本编译 button-testing :.

#vim buildarm.sh(其中的内容与前面相同

运行脚本:

#./buildarm.sh    (会生成button-testing可执行文件)

 

编译完成后,在 button-testing 下生成了 button-testing 可执行文件,把它拷贝到 SD 卡,然后将 SD插到 tiny4412 开发板上,在串口终端上输入以下命令将可执行文件拷贝到开发板上的 /opt/Qtopia/bin/  目录下: 

@# cp /sdcard/button-testing /opt/Qtopia/bin/ 

@# chmod +x /opt/Qtopia/bin/button-testing 

 

4.5 在 Qtopia 上添加 button-testing 程序图标 

首先编写一 desktop 文件: 

# cd /opt/mini6410/qtopia2_apps/button-testing/ 

# vi button-testing.desktop 

 

在 vi 中输入以下内容并保存: 

[Translation] 

File=QtopiaSettings 

Context=button-testing 

Comment[Desktop  Entry/Name]=Use  soft  hyphen  (char  U00AD)  to  indicate 

hyphenation 

[Desktop Entry] 

Exec=button-testing 

Icon=button-testing 

Type=Application 

Name[]=button-Testing 

CanFastload=0

 

   把 button-testing.png和 button-testing.desktop 这两个文件放入 SD 卡,然后将  SD  卡插到 tiny4412开发板上,在串口终端上执下以下命令,把这两个文件拷贝到 Qtopia 目录的相应位置: 

@# cp /sdcard/button-testing.desktop /opt/Qtopia/apps/Applications/ 

@# cp /sdcard/button-testing.png /opt/Qtopia/pics/ 

 

4.6  要运行button-testing 程序,只要在 Applications 中找到 button-testing 应用程序图标并点击即可,运行结果如下图所示: 

 

 

                二、卸载Linux3.5中四个驱动模块编译内核

1、首先卸载原来linux3.5中的PWM、LED、ADC、BUTTON四个驱动模块。

输入如下指令:

[root@localhost linux-3.5]# make menuconfig

出现如下画面,依次选择:Device Drivers->Character devices

 

 


 

在此处不选LED、Buttons、Buzzer、ADC四个驱动模块

 

重新编译内核,输入如下指令:

[root@localhost linux-3.5]# make uImage

这样,生成的镜像中就不会含有以上四个驱动模块,将编译好的镜像烧入卡发板。通过先前写的qtopia2.2.0程序测试,PWM,Button,LED,ADC功能都不能正常使用。

 

 

                      三、单独写四个驱动并且独自编译进内核

1、首先在char 下面建立一个mydriver文件夹

[root@localhost linux-3.5]#mkdir -p /driver/char/mydriver

[root@localhost linux-3.5]#cd /driver/char/mydriver

2、在mydriver下建立4个驱动程序目录

[root@localhost mydriver]#mkdir -p pwmdrver leddriver adcdriver buttonsdrivers

3、在每个驱动目录下加入驱动代码(.c)和Makefile,例如对于leddriver

[root@localhost mydriver]#cd leddriver

[root@localhost leddriver]#vi myled.c

 驱动程序内容见附件

[root@localhost leddriver]#vi Makefile

Makefile文件内容如下:

obj-m := myleds.o

#KERN_DIR =/usr/src/kernels/2.6.25-14.fc9.i686

KERN_DIR ?=/opt/FriendlyARM/tiny4412/linux/linux-3.5

PWD :=$(shell pwd)

default:

 make -C $(KERN_DIR) M=$(PWD) modules

clean:

rm -rf *.o *.cmd *.ko  *.mod.c  *.markers *.symvers *.tmp_versions

其它三个也类似,只是相关的文件名字稍微修改一下即可

 

4、对每个驱动进行编译(下面以LED为例来说明)

[root@localhost leddriver]# make

编译成功会得到如下截图,

 

且会生成.ko文件,输入

[root@localhost leddriver]#ls

可以看到,其中有一个myleds.ko文件


5、将产生的myleds.ko文件通过SD卡拷贝到tiny4412上,在对应的目录下输入insmod myleds,可以将led驱动加入其中。通过lsmod查看当前模块。

@#insmod myleds

@#insmod myleds

 

6、最后通过之前的测试程序测试驱动的正确性。

 

 

1 0