设为首页 加入收藏

TOP

Linux串口驱动测试(一)
2015-07-16 12:56:15 来源: 作者: 【 】 浏览:6
Tags:Linux 串口 驱动 测试

1 Linux终端(串口)


210开发板有4个串口? 2440开发板有3个串口


在2440开发板中三个串口设备对应如下? ?
串口名字? ? ? ? ? ? ? ? ? ? ? 主设备号? ? ? ? ? ? ? 次设备号
s3c2410_serial0? ? ? ? ? ? 204? ? ? ? ? ? ? ? ? 64
s3c2410_serial1? ? ? ? ? ? 204? ? ? ? ? ? ? ? ? 65
s3c2410_serial2? ? ? ? ? ? 204? ? ? ? ? ? ? ? ? 66


有的系统里使用这三个名字?
ttySAC0? 204? 64
ttySAC1? 204? 65
ttySAC2? 204? 66


2、构建dev目录
? ? 使用两种方法构建dev系统。


方法1:静态创建设备文件(节点)
? ? 从系统启动过程可知,涉及的设备有:/dev/mtdblock*(MTD)(MTD块设备),/dev/ttySAC*(串口设备)、/dev/console、/devnull,只要建立以下设备就可以启动系统。
? ?
? ? 在dev目录下:
? ? #mknod console c 5 1
? ? #mknod null c 1 3
? ? #mknod ttySAC0 c 204 64


方法2:使用mdev创建设备文件
? ? /*通过读取内核信息来创建设备文件的*/
#mount -t tmpfs mdev /dev? ? //使用内核文件系统,减少对flash的读写
? ? #mkdir /dev/pts? ? ? ? ? ? //dev/pts用来支持外部网络链接(telnet)的虚拟终端
? ? #mount -t devpts devpts /dev/pts
? ? #mount -t sysfs sysfs /sys? ? //mdev通过sysfs文件系统获得设备信息
? ? #echo /bin/mdev>/proc/sys/kernel/hotplug? ? //设置内核,当有设备插拔时调用/bin/mdev程序
? ? #mdev -s? ? ? ? ? ? //在/dev目录下生成内核支持的所有设备的节点


? ? 要在内核启动时,自动运行mdev。需要修改两个文件:etc/fstab来自动挂载文件系统、修改etc/init.d/rcS加入自动运行命令。


? ? 1:etc/fstab
? ? # device? ? ? ? mount-point? ? type? ? option? ? ? ? ? dump? ? fsck order
? ? proc? ? ? ? ? ? /proc? ? ? ? ? proc? ? defaults? ? ? ? 0? ? ? 0
? ? tmpfs? ? ? ? ? /tmp? ? ? ? ? ? tmpfs? defaults? ? ? ? 0? ? ? 0? ? //提高速度,减小磨损
? ? sysfs? ? ? ? /sys? ? ? ? sysfs? ? defaults? ? 0? ? 0? ? //告诉mdev有那些设备文件的操作
? ? tmpfs? ? ? ? /dev? ? ? ? tmpfs? ? defaults? ? 0? ? 0? ? //防止热热插拔时减少磨损
需要注意的是:开发板上通过mdev生成的/dev目录中,S3C2410的串口名是s3c2410_serial 0。需要修改etc/inittab文件。
? ? 修改前:
? ? ttySAC0::askfirst:~bin/sh
? ? 修改后:
? ? s3c2410_serial0::askfirst:~/bin/sh


3
对于mdev,需要注意的是,文件系统里存在/etc/mdev.conf文件,它包含了medv的配置信息。通过这个文件,我们可以自定义一些设备节点的名称或链接来满足特定的需要。这是root qtopia中mdev.conf的内容:
9.#console devices


10.tty[0-9]* 0:5 0660


11vc/[0-9]* 0:5 0660


12.? ?
13.? # serial port devices?
14.? s3c2410_serial0? ? 0:5? ? 0666? ? =ttySAC0?
15.? s3c2410_serial1? ? 0:5? ? 0666? ? =ttySAC1?
16.? s3c2410_serial2? ? 0:5? ? 0666? ? =ttySAC2?
17.? s3c2410_serial3? ? 0:5? ? 0666? ? =ttySAC3?
18.? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 19.? # loop devices?
20.? loop[0-9]*? ? 0:0? ? 0660? ? =loop/?
21.? ?
22.? # i2c devices?
23.? i2c-0? ? ? ? 0:0? ? 0666? ? =i2c/0?
24.? i2c-1? ? ? ? 0:0? ? 0666? ? =i2c/1?
可以看到,原本串口驱动注册的设备名是 s3c2410_serial0, s3c2410_serial1 和
s3c2410_serial2,而 mdev 则会在/dev 目录下对应生成 ttySAC0, ttySAC1和ttySAC2以符合
应用程序对于串口设备名称的习惯



4
启动参数 来选择内核采用哪个端口?
init=/linuxrc console=ttySAC1,115200
noinitrd? root=/dev/mtdblock2? init=/linuxrc? console=ttySAC0,115200
noinitrd? root=/dev/mtdblock2? init=/linuxrc? console=s3c2410_serial0,115200


测试程序:


1


#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "pthread.h"



int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)
{
? ? struct termios newtio,oldtio;
? ? //保存测试现有串口参数设置,在这里如果串口号等出错,会有相关的出错信息
? ? if ( tcgetattr( fd,&oldtio) != 0)
? ? {
? ? ? ? perror("SetupSerial 1");
? ? ? ? return -1;
? ? }
? ? //extern void bzero(void *s, int n); 置字节字符串s的前n个字节为零
? ? bzero( &newtio, sizeof( newtio ) );
? ? //设置字符大小
? ? newtio.c_cflag |= CLOCAL | CREAD;
? ? newtio.c_cflag &= ~CSIZE;
? ? //设置数据位
? ? switch( nBits )
? ? {
? ? case 7:
? ? ? ? newtio.c_cflag |= CS7;
? ? ? ? break;
? ? case 8:
? ? ? ? newtio.c_cflag |= CS8;
? ? ? ? break;
? ? }
? ? //设置校验位
? ? switch( nEvent )
? ? {
? ? case 'O':
? ? ? ? newtio.c_cflag |= PARENB;
? ? ? ? newtio.c_cflag |= PARODD;
? ? ? ? newtio.c_iflag |= (INPCK | ISTRIP);
? ? ? ? break;
? ? case 'E':
? ? ? ? newtio.c_iflag |= (INPCK | ISTRIP);
? ? ? ? newtio.c_cflag |= PARENB;
? ? ? ? newtio.c_cflag &

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇详解将驱动程序编译进Linux内核 下一篇制作Linux根文件系统关于链接库的..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: