基于arm的linux串口通信与独立按键的实验
最近正好在学习基于ARM的linux下串口通信,现将学习经验与大家共享。以本人刚刚做的例程来一步步讲解。
/*例程目的:通过向内核加载独立按键模块,串口通信模块,编写应用程序,使得当按键按下时,arm可以通过串口对外发送数据。已达到arm与其他设备间的串口通信的目的*/
一、基础知识
1.串口基本知识:串口:计算机上一种非常通用设备通信协议。串口通信:串口按位发送和接收字节。
2.设备驱动:linux下总共有三种设备方式:字符设备,块设备,网络设备。这里串口和键盘都是字符设备。这些设备都在/dev 目录下 。可通过ls -l 来查看设备类型。【crw-rw---- 1 root dialout 4, 64 7月 4 02:53 ttyS0】最前面的c表示他是(char)字符设备。
二、程序编写
1.编写驱动程序:
串口设备驱动程序一般在linux和arm都已经加载了,可以在/dev 目前查看一下设备名,串口名一般是ttys0-ttysn。由于此例程还有个独立矩阵按键驱动,这个需要自己加载到arm的内核中。步骤:(1)在网上或者通过其他途径找到矩阵键盘的驱动程序,然后移植到你的平台,然后编写makefile文件,这里我曾出现个问题内核指定目录不对,这时你在linux下是无法编译通过的,修改此路径KERNELDIR := /SRC/kernel/linux-2.6.21_magic。(2)make 一下 生成.ko文件就是可加载的内核模块。这里我曾出现一个错误,多线程的库无法链接,我采取的办法是直接输入命令 arm-linux-gcc keys.c -o key -lpthread.将库动态添加进去。
键盘驱动程序下载地址
2.编写应用程序
串口通信打开串口:fd = open(COM2, O_RDWR );关闭串口:ret=close(fd);打开独立键盘fs = open("/de/KEYS0",0)读矩阵键盘返回4》4键盘的编码ret=read(fs,&keys_value,sizeof(keys_value));看到这里不知道读者有没有体会,linux下的设备操作都是基于文件的,所以有许多相通之处。
以下是我这个程序的发送模块:
void* send(void * data)三、移植程序到arm平台上运行
1.建立nfs服务器,或其他宿主机与arm的通信,将此实验的相关文件复制cp 到可读可写的文件夹下(如yaffs)
2.加载驱动模块到内核:insmod /yaffs/keys.ko ;然后建立设备连接号 mknod /dev/keys c 252 0
3. 执行可执行应用程序 ./buttonserial_test
附程序下载地址linux串口通信实验/*欢迎各路大神指导*/