作者:GWD 时间:2019.7.25
一、led Linux驱动调用函数分析
int main(int argc, char **argv)
{
int fd;
int val = 1;
fd = open("/dev/led_1", O_RDWR);
if (fd < 0)
{
printf("can't open!\n");
}
if (argc != 2)
{
printf("Usage :\n");
printf("%s <on|off>\n", argv[0]);
return 0;
}
if (strcmp(argv[1], "on") == 0)
{
val = 1;
}
else
{
val = 0;
}
write(fd, &val, 4);
return 0;
}
(一)知识点:
1、问:带参数的主函数目的是什么?
答:main函数的参数其实和普通函数参数的用法基本是一样的,由于不能在程序运行的时候给main传递参数,所以才有int main(int argc,char* argv[])这种用法。
2、问:in(int argc, char **argv)中的argc和argv[]是什么?
答:argc是命令行总的参数个数 ;
argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数 命令行后面跟的用户输入的参数,比如: # ./led on,argc=2;argv[0]=./led;argv[1]=on;argv一般是用来为程序提供非常重要的信息,如:数据文件名,等等。在这个函数中若不记录on/off就无法打开led灯;
(二)、代码分析
第一种情况:
在命令行输入安装驱动的指令后,输入./led off此时argv[0]是./led,argv[1]是off;程序中的判断条件不满足所以val=0,val会通过buf传递给内核区域,关闭led灯;
第二种情况:
在命令行输入./led on后,此时argv[0]是./led,argv[1]是on程序中的判断条件满足所以val=1,val会通过buf传数据给内核区,从而打开led灯。