linux参数传递

    前几天在看vivi的代码的时候,发现在main.c中设置要传递给LINUX的一些参数的时候是经过一系列的调用使用了para_struct这个结构体进行的,当时一看头文件,并没有发现哪个里面有定义了这个结构体,用source insight来搜索整个VIVI工程同样没有搜索到,事实上这个结构体也是在LINUX内核中定义的。所以一直纠结怎么可以编译通过,而网上看了很久也就一个人提出了这个问题,但是没有找出原因。回头分析来想,要么这个结构提在编译的时候加入(不合理),要么上一个关键字一样的概念(不可能有这样的关键字),那么还是应该在哪里定义的,只有这样三种情况。既然是在LINUX中有定义,那么可能是通过什么语句将LINUX库中这个文件给包含进来了,既然C文件里没有,那么可能在MAKEFILE中有猫腻,这样想到在设置编译选项的时候是有一个INCLUDE LINUX目录的过程,估计是那个时候包含进来的,但是就没有再去进一步缕清楚。

     今天白天在实验室跟赵老师说起这个事情,他也说不能没有定义的,结果继续找,果然在定义setup_linux_param(ulong param_base)这个函数的文件中,看到了#include <setup.h>,打开setup.h:#include <asm/setup.h>,再联系Makefile中LINUX的一个目录被设置为搜索目录/opt/host/armv41/include,那么在LINUX的这个目录中去找到asm/setup.h,果然在那里定义的。

     可以看出, vivi的编译是离不开LINUX内核的,除非把那些LINUX中类似这个结构体这样的定义全部在VIVI中重新定义。所以以前在网上看到的一些人的移植笔记说VIVI中/opt/host/armv41/include这个编译项的设置可以是不需要的完全是不对的,还有些人就机械地按照别人的移植步骤来将这个选项改成自己对应的,却不是很清楚为什么要这样做。

      看来还是仔细再仔细,引以为戒。

你可能感兴趣的:(c,linux,struct,include,makefile,linux内核)