Linux USB??????????
???????????? ???????[ 2014/12/25 11:11:48 ] ????????Linux ??????
????Linux USB???????????????
????probe??usb???????????????????????USB?豸???????????????usb?????????production ID??vendor ID?????????豸??class??subclass??protocol???????????豸????????????????probe???????????????skeleton???????skel_probe?????????????????usb_interface *?????struct usb_device_id *??????????????????USB?豸??????????????????豸???0??????y??????????????0??????????????豸ID??????????Vendor ID??Production ID?????probe???????????????????????????????
????dev->udev = usb_get_dev(interface_to_usbdev(interface));
????dev->interface = interface;
?????????????Щ??????????????????????????????——interface_to_usbdev?????uo???usb_interface??????y???????豸???豸?????????????????????usb_device????interface_to_usbdev?????????????????usb_device?????ü???????????????????usb_get_dev????????????????ü?????????????豸???usb_put_dev?????????ü???????????????????????ü????????usb_device????????????????????????????????????kref????????????probe?????г????kref????????kref_init??????????????kref?????????????1?????????????????????kref_put??????kref???????1?????kref????????0?????kref??????kref_put???????????????????????????????????????????????????????kfree???ú?????????????kref????????????????????????????????????????????????????е????????????
/**
* kref_put - decrement refcount for object.
* @kref: object.
* @release: pointer to the function that will clean up the object when the
* last reference to the object is released.
* This pointer is required?? and it is not acceptable to pass kfree
* in as this function.
*
* Decrement the refcount?? and if 0?? call release().
* Return 1 if the object was removed?? otherwise return 0. Beware?? if this
* function returns 0?? you still can not count on the kref from remaining in
* memory. Only use the return value if you want to see if the kref is now
* gone?? not present.
*/
int kref_put(struct kref *kref?? void (*release)(struct kref *kref))
{
WARN_ON(release == NULL);
WARN_ON(release == (void (*)(struct kref *))kfree);
/*
* if current count is one?? we are the last user and can release object
* right now?? avoiding an atomic operation on 'refcount'
*/
if ((atomic_read(&kref->refcount) == 1) ||
(atomic_dec_and_test(&kref->refcount))) {
release(kref);
return 1;
}
return 0;
}
|
????????????д?????????????????kref????????????????kref_get??????ɡ????ж?struct kref??????????????????????????
???????????????????????漰???????????????????SPASVOС??(021-61079698-8054)?????????????????????????
??????
Linux??????DDR????????????Linux?????????????????豸??????????linux???в???????????м??????????????????????????Linux????Linux??DNS????????????γ???????????Linux?????????????Linux????(???)????????Linux ????????????????????????????????Windows???У?Linux???????Linux????????????????Linux iommu??vfio???????Linux????ε???TCP???????Linux?????????????СLinux?·???????????Linux???Jexus?й?Asp.Net Core??ó???Linux?????????Щ??
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11????????
?????????App Bug???????????????????????Jmeter?????????QC??????APP????????????????app?????е????????jenkins+testng+ant+webdriver??????????????JMeter????HTTP???????Selenium 2.0 WebDriver ??????