作者
QQ群:852283276
微信:arm80x86
微信公众号:青儿创客基地
B站:主页 https://space.bilibili.com/208826118
参考
linux驱动: 如何向模块传递参数, module_param和module_param_array
module_param_named
module_param
代码,
module_param(name, type, perm)
static unsigned int int_var = 0;
module_param(int_var, uint, S_IRUGO);
insmod xxxx.ko int_var=x
module_param_array(para , type , &n_para , perm)
static int pcie_ep_vid[PCI_EP_MAX_ID_NUM];
static int pcie_ep_did[PCI_EP_MAX_ID_NUM];
static int pcie_ep_vid_num;
static int pcie_ep_did_num;
module_param_array(pcie_ep_vid, int, &pcie_ep_vid_num, S_IRUGO);
module_param_array(pcie_ep_did, int, &pcie_ep_did_num, S_IRUGO);
static int __init pcie_ep_init(void)
{
int ret;
int i;
int id_num = PCI_EP_MAX_ID_NUM;
/*printk("%s compile: %s %s\n", __FUNCTION__, __DATE__, __TIME__);*/
if (pcie_ep_vid_num > id_num || pcie_ep_did_num > id_num) {
printk("%s modules param array too long\n", __FUNCTION__);
return -EINVAL;
}
id_num = (pcie_ep_vid_num < pcie_ep_did_num) ? pcie_ep_vid_num : pcie_ep_did_num;
printk("%s modules param num %d %d\n", __FUNCTION__, pcie_ep_vid_num, pcie_ep_did_num);
for (i = 0; i < id_num; i++) {
pcie_ep_match[i].vendor = pcie_ep_vid[i];
pcie_ep_match[i].device = pcie_ep_did[i];
pcie_ep_match[i].subvendor = PCI_ANY_ID;
pcie_ep_match[i].subdevice = PCI_ANY_ID;
printk("%s match[%d] 0x%04x 0x%04x 0x%04x 0x%04x\n", __FUNCTION__,
i, pcie_ep_match[i].vendor, pcie_ep_match[i].device,
pcie_ep_match[i].subvendor, pcie_ep_match[i].subdevice);
}
if (id_num > 0) {
pcie_ep_match[i].vendor = 0;
pcie_ep_match[i].device = 0;
pcie_ep_match[i].subvendor = 0;
pcie_ep_match[i].subdevice = 0;
}
ret = pci_register_driver(&pcie_ep_driver);
if(ret)
printk("%s pci_register_driver error\n", __FUNCTION__);
return ret;
}
加载时,
modprobe pcie_ep.ko pcie_ep_vid=0x0731 pcie_ep_did=0x2018
module_param_named
static int modparam_nohwcrypt;
module_param_named(nohwcrypt, modparam_nohwcrypt, int, 0444);
module_param_named(name, parameter name, type, permission)
总共四个参数
- 第一个参数是在insmod的时候用的(insmod对应的参数变量名), insdome a.ko nohwcrypt=1
- 第二个参数是在程序中定义的变量名
- 第三个参数是变量的类型
- 第四个参数是权限