linux驱动开发之给驱动传参数

作者

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)

总共四个参数

  1. 第一个参数是在insmod的时候用的(insmod对应的参数变量名), insdome a.ko nohwcrypt=1
  2. 第二个参数是在程序中定义的变量名
  3. 第三个参数是变量的类型
  4. 第四个参数是权限
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值