红联Linux门户
Linux帮助

Linux最简单的驱动编写及测试流程

发布时间:2015-05-23 09:58:05来源:linux网站作者:可乐虎

本文采用nfs挂载网络文件系统的方式,手动创建设备节点,动态加载驱动模块,对理解驱动编写流程有很大好处!


一、初级驱动执行流程:

1、写好Makefile文件,里面包含将应用程序编译成app文件,将驱动程序编译成mydrv.ko文件的脚本

2、在Ubuntu里执行sudo make

3、确保mydrv.ko和app被拷贝到nfs挂载的根文件系统的/modules目录

4、在模块中创建设备节点(在串口软件显示的开发板文件系统里执行)
mknod /dev/dcx-drv c 250 0

4.1、执行ls /dev
观察是否有设备dcx-drv,有则ok

5、安装模块设备
insmod /modules/mydrv.ko

5.1、执行cat /proc/devices (这个文件里的设备是由驱动程序生成的)
观察是否有“250 dcx-drv”,有则ok

6、执行./modules/app
观察创建的内核模块是否有执行,有则ok


二、代码改动后需要重新编译,完毕后执行:

1、删掉原模块:
rmmod /modules/mydrv

2、安装新模块:
insmod /modules/mydrv.ko

3、执行应用程序:

./modules/app


三、本文采用的Makefile文件

obj-m += mydrv.o

KERNEL_DIR = /opt/03.kernel_transplant/Android-kernel-samsung-dev
GCC = arm-linux-gcc
all:
make -C $(KERNEL_DIR) M=`pwd` modules #编译驱动程序
$(GCC) -Wall app.c -o app #编译应用程序

cp ./mydrv.ko /mini_rootfs/modules
cp ./app /mini_rootfs/modules

#clean:
rm -rf ./*.o
rm -rf ./*.order
rm -rf ./*.symvers
rm -rf ./*.mod.c


Linux驱动程序与应用程序函数的联系:http://www.linuxdiyf.com/linux/8735.html

Linux驱动程序中的platform总线详解:http://www.linuxdiyf.com/linux/9029.html

Linux系统下USB摄像头驱动开发:http://www.linuxdiyf.com/linux/8657.html

Linux下的通信时延测试程序:http://www.linuxdiyf.com/linux/10072.html

用Expect来做Linux程序测试:http://www.linuxdiyf.com/linux/7673.html