linux驅動傳參數 proc sysfs debugfs使用

#用戶空間與驅動的通信手段

驅動傳參

linux驅動: 如何向模塊傳遞參數, module_param和module_param_array

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;
}

#sysfs使用

#debugfs使用

#proc使用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章