本文来自:http://3y.uu456.com/bp-b399108ed0d233d4b14e6911-1.html
很多时候我们内核驱动的模块需要模块参数来运行,这;如下面例子setenvbootargsmem=8;Uboot启动参数中的红色部分表示模块,蓝色部分;我们举例dm365_imp.oper_mode=;驱动文件dm365_ipipe.c被编译到dm3;staticu32oper_mode=IMP_M;如果uboot参数中没有dm365_imp.op;davin
很多时候我们内核驱动的模块需要模块参数来运行,这个模块参数在基本的驱动概念中有介绍,我们很多时候把他写在uboot的启动参数中,在内核启动时内核会读取uboot的启动参数,这样我们设置在uboot里面的启动参数就可以被对应的驱动模块获取到。
如下面例子 setenv bootargs mem=80M console=ttyS0,115200n8 root=/dev/nfs nfsroot=192.168.1.222:/home/mydemo/test/yaffs/rootfs noinitrd rw ip=192.168.1.175:192.168.1.1:255.255.255.0 video=davincifb:osd0=1440x240x16 4050K davinci_enc_mngr.ch0_output=LCD dm365_imp.oper_mode=0 davinci_capture.device_type=4
Uboot启动参数中的红色部分表示模块,蓝色部分表示模块里面的参数,黑色部分表示参数的值。
我们举例dm365_imp.oper_mode = 0说明
驱动文件dm365_ipipe.c被编译到dm365_imp.o模块 在dm365_ipipe.c文件中有如下参数对应。
①:
static u32 oper_mode = IMP_MODE_SINGLE_SHOT;
module_param(oper_mode, uint, S_IRUGO);
如果uboot参数中没有dm365_imp.oper_mode=0 那么参数的值就会被赋值为IMP_MODE_SINGLE_SHOT(1)。
②:
davinci_enc_mngr.ch0_output=LCD参数在 Davinci_enc_mngr.c中
static char *ch0_output = "";
static char *ch1_output = "";
static char *ch0_mode = "";
static char *ch1_mode = "";
module_param(ch0_output, charp, S_IRUGO);
module_param(ch1_output, charp, S_IRUGO);
module_param(ch0_mode, charp, S_IRUGO);
module_param(ch1_mode, charp, S_IRUGO);
③:
davinci_capture.device_type=
This defines which driver to use. Use the following settings:
davinci_capture.device_type=0 for MT9T001
davinci_capture.device_type=1 for TVP5146
davinci_capture.device_type=2 for MT9T031
davinci_capture.device_type=3 for MT9P031
davinci_capture.device_type=4 for TVP7002
这里我们可以去掉。
此外:
通过命令“modinfo -p ${modulename}”可以得知一个模块有哪些参数可以使用。同时,对于已经加载到内核里的模块,它们的模块参数会列举在/sys/module/${modulename}/parameters/目录下面,可以使用“echo -n ${value} > /sys/module/${modulename}/parameters/${parm}”这样的命令去修改。
但是这个操作是需要有权限问题的。
module_param(node_name, charp, S_IRUGO | S_IWUSR);
这个用户写权限S_IWUSR必须增加。