linux基础操作2-字符设备控制-LBA的控制
导:在 linux 驱动中,字符驱动是必须掌握的,本章主要介绍字符设备应用的程序,无论是学习了后面的知识自己写的字符驱动,还是已有的字符驱动,都需要能够写一些简单的应用程序。即使从事 linux 驱动的工作,linux 驱动写出来之后,也需要由驱动程序员编写简单的应用进行测试的。
1.先理顺对 main函数的理解
main 函数作为应用程序的入口,在头文件“#include<stdio.h> ”中。
main 函数需要传参数的时候完整的定义为: int main(int argc,char **argv)
//参数 argc,表示参数的个数
//参数**argv,存储输入字符的数组:argv[0]表示程序名称,argv[1]——argv[n]输入的参数
不传参数的时候定义为:int main(void),
//函数 main 的返回值为类型为 int,用于判断程序执行成功还是失败
无返回,并且不传参数的时候定义为:main(void) (等同 void main(void))
可测函数 int main(int argc,char **argv) 的用例子如下
2.LBA控制操作
----------硬件电路---------------
-----引入一个硬件io的控制函数ioctl()-----------
int ioctl( int fd, int request, int cmd);
//参数 fd,函数 open 返回的句柄。
//参数 request 和参数 cmd,由内核驱动决定具体操作,例如:request 可以代表哪一个 IO 口,cmd 代表对 IO 进行什么样的操作,也可以反过来。具体的含义由驱动工程师在驱动中 switch决定。
//返回值:返回 0 成功;返回-1,出错
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <sys/types.h>
#include <termios.h>
#include <sys/stat.h>
int main(int argc ,char *argv[])
{
int i,j,k,fd,adc_len,r;//
i=atoi(argv[1]);
j=atoi(argv[2]);//
k=atoi(argv[3]);
char adc_buffer[512];
char *leds="/dev/leds";
char *buzzer_ctl="/dev/buzzer_ctl";
char *adc="/dev/adc";//=========if p i c p========================
if((fd=open(leds,O_RDWR | O_CREAT | O_NDELAY))<0)
{
printf("打开LED失败!\r\n");
}
printf("打开LED 成功!\r\n");
ioctl(fd,i,j);
close(fd);//--------关闭LED----if p i c p-----------------------------
printf("关闭LED 成功!\r\n");
if((fd=open(buzzer_ctl,O_RDWR | O_CREAT | O_NDELAY))<0)
{
printf("打开beep失败!\r\n");
}
printf("打开beep 成功!\r\n");
ioctl(fd,k,0);
close(fd);//--------关闭beep-----if p i c p----------------------------
printf("关闭beep 成功!\r\n");
if((fd=open(adc,O_RDWR | O_CREAT | O_NDELAY))<0)
{
printf("打开adc失败!\r\n");
}else
{
printf("打开adc成功!\r\n");
adc_len=read(fd,adc_buffer,10);
if(adc_len==0) printf("read null \r\n");
else {
r=atoi(adc_buffer);
r=(int)(r*10000/4095);
printf("数值为:%d \t",r);
}
}
close(fd);//--------关闭adc if c p---------------------------------
printf("关闭beep 成功!\r\n");
return 1;
}
3 现象验证:
第一个参数是亮灭,第二个参数是选择灯,第三个参数开关beep
验证通过!!!!