资源描述:
《linux参数传递总结》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、这节说明内核命令的处理先看一下有bootloader传递给内核的参数root=/dev/nfsnfsroot=192.16&1.130:/opt/linux-top-pub/ui」ef/tnmk/bld_7266_h_64x2/Footfsrwnoinitrdinit=/initip=192.168.1.188:192.168.1.180:192.168.1.1:255.255.255.0:target:eth0:offconsole=ttySO,115200这些参数在内核中是怎么处理它的呢?1.Linux在整个内核中定义了大量的命令行参数。在Linux源码中的…/Documenta
2、tion子目录中有一个名为kernel-parameters.txt文件,该文件包含了Linux内核命令行参数列表,它们按字母顺序依次列出2.先在回忆一下.setup宏,这个就上要功能就是凡是有用到这个宏的代码在编译连接的时候就会统一放在一个代码段屮去,这样就变成了一个初始化的列表3./*4.*Setupalistofconsoles.Calledfrominit/main.c5.*/6・staticint_initconsole_setup(char*str)7.{8・charname[sizeof(console_cmdline[0]•name)];9・char*s,*optio
3、ns;10・intidx;11・12./*13・*Decodestrintoname,index,options.14.*/15.16・return1;17.}18.19・_setup(l,console=n,console_setup);你可以将-setup宏看作是内核命令行控制台参数在内核中的注册函数。当字符串信息console=出现在内核命令行吋,就通过—setup広的第2个参数调用函数console_setup()0但是在并不知道控制台功能的情况下,这个模块之外的配置代码是如何获収该信息呢?事实上,其实现机制巧妙而复杂,并且依赖于目标链接器所创建的列表。1.#definese
4、tup_param(strzunique_idzfn,early)2.staticchar—setup_str_##unique_id[]—initdata=str;3.staticstructobs_kernel_paramsetup_##unique_id4.attribute_used—5.attribute—((section_{".init.setup11)))6•attribute—((aligned((sizeof(long)))))6.={setup_str_##imiquG_idFfn,early}9.#define._setup_null_param(
5、str,unique_id)10.・_setup_param(str,unique_id,NULL,0)11.12.#define._setup(str,fn)13-._setup_param(str,fn,fn,0)staticint_initchecksetup(charJine){structkernel_param*p;p=&_setup_start;do{intn=strlen(p・>str);if(!stmcmp(line,p->str,n)){if(p->setup_func(line+n))return1;}P++;}while(pv&_setup_end);retu
6、rn0;}这里的意思是从_setup_start开始处到_setup_end处中査找一个数据结构,这个数据结构中冇str与setup_func这两个数据成员变量.只要与这里面的str与输入的参数字符串相匹配,就会调用个这个字符串后而所指的内容,对于你这里所说的—setup(nconsole=n,console_setup);就是你在启动linux内核的时候如果有这么一个参数输入console=ttyS1,那内核就会把默认的tty定位为ttyS1,这个在consol_setup函数的字符串处理中完成,因为它最后是确定prefered^console的参数.代码清单5-6内核命令行处理1
7、.1externstructobs_kernel_paramsetup_start[],setup_end[];2.23.3staticintinitobsolete_checksetup(char*line)4.4{5.5structobs_kernel_param*p;6•67.7p=setup_start;8.8do{9.9intn=strlen(p->str);10.10if(!strncmp(line,p->str,n)){12.12/*Alre