本文來自: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必須增加。