%3Ch1%3ELinux%20%E5%86%85%E6%A0%B8%E8%AE%BE%E5%A4%87%E6%A8%A1%E5%9E%8B%E4%B8%8E%20sysfs%20%E6%B7%B1%E5%BA%A6%E5%AE%9E%E6%88%98%EF%BC%9A%E4%BB%8E%20kobject%20%E5%88%B0%20udev%20%E4%BA%8B%E4%BB%B6%E7%9A%84%E5%AE%8C%E6%95%B4%E9%93%BE%E8%B7%AF%3C/h1%3E%0A%3Chr/%3E%0A%3Ch2%3E%E4%B8%80%E3%80%81%E4%B8%BA%E4%BB%80%E4%B9%88%E9%9C%80%E8%A6%81%E8%AE%BE%E5%A4%87%E6%A8%A1%E5%9E%8B%3C/h2%3E%0A%3Cp%3ELinux%20%E8%AE%BE%E5%A4%87%E6%A8%A1%E5%9E%8B%EF%BC%88Linux%20Device%20Model%EF%BC%89%E6%98%AF%202.6%20%E5%86%85%E6%A0%B8%E5%BC%95%E5%85%A5%E7%9A%84%E7%BB%9F%E4%B8%80%E6%A1%86%E6%9E%B6%EF%BC%8C%E6%A0%B8%E5%BF%83%E7%9B%AE%E6%A0%87%E6%98%AF%E8%A7%A3%E5%86%B3%E5%9B%9B%E4%B8%AA%E5%B7%A5%E7%A8%8B%E9%97%AE%E9%A2%98%EF%BC%9A%3C/p%3E%0A%3Col%3E%0A%3Cli%3E%3Cstrong%3E%E7%94%B5%E6%BA%90%E7%AE%A1%E7%90%86%E5%8D%8F%E5%90%8C%3C/strong%3E%E2%80%94%E2%80%94%E5%85%B3%E6%9C%BA%E6%97%B6%E5%BF%85%E9%A1%BB%E6%8C%89%E4%BE%9D%E8%B5%96%E9%A1%BA%E5%BA%8F%E5%85%B3%E9%97%AD%E8%AE%BE%E5%A4%87%EF%BC%8C%E5%8F%8D%E4%B9%8B%E5%BC%80%E6%9C%BA%E8%A6%81%E6%9C%89%E6%AD%A3%E7%A1%AE%E7%9A%84%E4%BE%9D%E8%B5%96%E6%8B%93%E6%89%91%EF%BC%9B%3C/li%3E%0A%3Cli%3E%3Cstrong%3E%E7%83%AD%E6%8F%92%E6%8B%94%E9%80%9A%E7%9F%A5%3C/strong%3E%E2%80%94%E2%80%94%E7%94%A8%E6%88%B7%E6%80%81%E9%9C%80%E5%AE%9E%E6%97%B6%E6%84%9F%E7%9F%A5%E8%AE%BE%E5%A4%87%E5%A2%9E%E5%88%A0%EF%BC%9B%3C/li%3E%0A%3Cli%3E%3Cstrong%3E%E6%8B%93%E6%89%91%E5%8F%AF%E8%A7%86%3C/strong%3E%E2%80%94%E2%80%94%E8%AE%A9%E7%AE%A1%E7%90%86%E5%91%98%20%3Ccode%3Etree%20/sys%3C/code%3E%20%E5%B0%B1%E8%83%BD%E7%9C%8B%E5%88%B0%E7%89%A9%E7%90%86%E8%AE%BE%E5%A4%87%E6%A0%91%EF%BC%9B%3C/li%3E%0A%3Cli%3E%3Cstrong%3E%E9%A9%B1%E5%8A%A8%E5%A4%8D%E7%94%A8%3C/strong%3E%E2%80%94%E2%80%94%E5%90%8C%E4%B8%80%E9%A9%B1%E5%8A%A8%E5%AE%9E%E4%BE%8B%E5%8C%96%E5%A4%9A%E4%BB%BD%EF%BC%8C%E4%BD%86%E9%80%9A%E8%BF%87%E5%86%85%E6%B6%B5%E7%9A%84%E5%B7%AE%E5%BC%82%E5%8C%96%E9%80%82%E9%85%8D%E4%B8%8D%E5%90%8C%E7%A1%AC%E4%BB%B6%E3%80%82%3C/li%3E%0A%3C/ol%3E%0A%3Cp%3E%E8%BF%99%E5%9B%9B%E4%B8%AA%E7%9B%AE%E6%A0%87%E7%BB%9F%E4%B8%80%E7%94%B1%E5%90%8C%E4%B8%80%E4%B8%AA%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E6%97%8F%E5%AE%9E%E7%8E%B0%EF%BC%9A%3Ccode%3Ekobject%3C/code%3E%20%E2%86%92%20%3Ccode%3Ekset%3C/code%3E%20%E2%86%92%20%3Ccode%3Ektype%3C/code%3E%20%E2%86%92%20%3Ccode%3Edevice%3C/code%3E%20%E2%86%92%20%3Ccode%3Edriver%3C/code%3E%20%E2%86%92%20%3Ccode%3Ebus_type%3C/code%3E%E3%80%82%E6%9C%AC%E6%96%87%E4%BB%8E%E6%BA%90%E7%A0%81%E5%B1%82%E9%9D%A2%E9%80%90%E5%B1%82%E6%8B%86%E8%A7%A3%E8%BF%99%E4%B8%80%E6%9C%BA%E5%88%B6%EF%BC%8C%E5%B9%B6%E7%BB%99%E5%87%BA%E5%8F%AF%E7%9B%B4%E6%8E%A5%E8%90%BD%E5%9C%B0%E7%9A%84%E5%B7%A5%E5%85%B7%E9%9B%86%E3%80%82%3C/p%3E%0A%3Chr/%3E%0A%3Ch2%3E%E4%BA%8C%E3%80%81kobject%EF%BC%9A%E4%B8%80%E5%88%87%E7%9A%84%E5%9F%BA%E7%9F%B3%3C/h2%3E%0A%3Cp%3E%3Ccode%3Ekobject%3C/code%3E%20%E4%B8%8D%E6%98%AF%E8%AE%BE%E5%A4%87%E5%AF%B9%E8%B1%A1%E7%9A%84%26quot%3B%E5%AE%9E%E4%BE%8B%26quot%3B%EF%BC%8C%E8%80%8C%E6%98%AF%E5%AF%B9%E8%B1%A1%E6%A8%A1%E5%9E%8B%E7%9A%84%26quot%3B%E5%9F%BA%E7%B1%BB%26quot%3B%E3%80%82%E5%AE%83%E6%8F%90%E4%BE%9B%E4%B8%89%E9%A1%B9%E6%A0%B8%E5%BF%83%E8%83%BD%E5%8A%9B%EF%BC%9A%3C/p%3E%0A%3Ctable%3E%3Cthead%3E%3Ctr%3E%0A%3Cth%3E%E8%83%BD%E5%8A%9B%3C/th%3E%0A%3Cth%3E%E8%AF%B4%E6%98%8E%3C/th%3E%0A%3C/tr%3E%3C/thead%3E%3Ctbody%3E%0A%3Ctable%3E%3Cthead%3E%3Ctr%3E%0A%3Cth%3E%E5%BC%95%E7%94%A8%E8%AE%A1%E6%95%B0%3C/th%3E%0A%3Cth%3E%3Ccode%3Ekref%3C/code%3E%20%E9%87%8A%E6%94%BE%E5%AF%B9%E8%B1%A1%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E7%AE%A1%E7%90%86%3C/th%3E%0A%3C/tr%3E%3C/thead%3E%3Ctbody%3E%0A%3Ctable%3E%3Cthead%3E%3Ctr%3E%0A%3Cth%3Esysfs%20%E7%9B%AE%E5%BD%95%3C/th%3E%0A%3Cth%3E%E8%87%AA%E5%8A%A8%E5%9C%A8%20%3Ccode%3E/sys/%3C/code%3E%20%E4%B8%8B%E5%88%9B%E5%BB%BA%E5%90%8C%E5%90%8D%E7%9B%AE%E5%BD%95%3C/th%3E%0A%3C/tr%3E%3C/thead%3E%3Ctbody%3E%0A%3Ctable%3E%3Cthead%3E%3Ctr%3E%0A%3Cth%3E%E7%83%AD%E6%8F%92%E6%8B%94%E4%BA%8B%E4%BB%B6%3C/th%3E%0A%3Cth%3E%3Ccode%3Ekobject_uevent%3C/code%3E%20%E8%A7%A6%E5%8F%91%E7%94%A8%E6%88%B7%E6%80%81%E4%BA%8B%E4%BB%B6%3C/th%3E%0A%3C/tr%3E%3C/thead%3E%3Ctbody%3E%0A%3Ch3%3E2.1%20%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%EF%BC%88%E5%86%85%E6%A0%B8%206.x%EF%BC%89%3C/h3%3E%0A%3Cpre%3E%3Ccode%3E%0A%3Cpre%3E%3Ccode%3Estruct%20kobject%20%7B%0A%20%20%20%20const%20char%20%20%20%20%20%20%2Aname%3B%0A%20%20%20%20struct%20list_head%20entry%3B%0A%20%20%20%20struct%20kobject%20%20%2Aparent%3B%20%20%20%20%20%20%20//%20%E4%B8%8A%E7%BA%A7%E8%8A%82%E7%82%B9%0A%20%20%20%20struct%20kset%20%20%20%20%20%2Akset%3B%20%20%20%20%20%20%20%20%20//%20%E6%89%80%E5%B1%9E%E9%9B%86%E5%90%88%0A%20%20%20%20struct%20kobj_type%20%2Aktype%3B%20%20%20%20%20%20%20//%20%E6%93%8D%E4%BD%9C%E4%B8%8E%E9%87%8A%E6%94%BE%E6%96%B9%E6%B3%95%0A%20%20%20%20struct%20kernfs_node%20%2Asd%3B%20%20%20%20%20%20%20%20//%20sysfs%20%E8%8A%82%E7%82%B9%E6%8C%87%E9%92%88%0A%20%20%20%20struct%20kref%20%20%20%20%20kref%3B%20%20%20%20%20%20%20%20%20%20//%20%E5%BC%95%E7%94%A8%E8%AE%A1%E6%95%B0%0A%23ifdef%20CONFIG_DEBUG_KOBJECT_RELEASE%0A%20%20%20%20struct%20delayed_work%20release_work%3B%0A%23endif%0A%7D%3B%3C/code%3E%3C/pre%3E%0A%3Cp%3E%3Cstrong%3E%E4%B8%89%E4%B8%AA%E5%85%B3%E9%94%AE%E5%AD%97%E6%AE%B5%E7%9A%84%E8%AF%AD%E4%B9%89%E9%93%BE%3C/strong%3E%EF%BC%9A%3C/p%3E%0A%3Cul%3E%0A%3Cli%3E%3Ccode%3Eparent%3C/code%3E%20%E2%80%94%E2%80%94%20%E5%86%B3%E5%AE%9A%20sysfs%20%E7%9B%AE%E5%BD%95%E7%9A%84%E7%89%A9%E7%90%86%E5%B1%82%E6%AC%A1%EF%BC%9B%3C/li%3E%0A%3Cli%3E%3Ccode%3Ekset%3C/code%3E%20%E2%80%94%E2%80%94%20%E5%90%8C%E7%B1%BB%E5%9E%8B%E5%AF%B9%E8%B1%A1%E7%9A%84%E9%9B%86%E5%90%88%EF%BC%8C%E5%90%8C%E6%97%B6%E4%B8%BA%E7%83%AD%E6%8F%92%E6%8B%94%E6%8F%90%E4%BE%9B%20%3Ccode%3Euevent_ops%3C/code%3E%EF%BC%9B%3C/li%3E%0A%3Cli%3E%3Ccode%3Ektype%3C/code%3E%20%E2%80%94%E2%80%94%20%E6%9E%90%E6%9E%84%E5%9B%9E%E8%B0%83%20%3Ccode%3Erelease%28%29%3C/code%3E%20%E5%92%8C%20sysfs%20%E5%B1%9E%E6%80%A7%E6%93%8D%E4%BD%9C%20%3Ccode%3Esysfs_ops%3C/code%3E%E3%80%82%3C/li%3E%0A%3C/ul%3E%0A%3Ch3%3E2.2%20%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E7%AE%A1%E7%90%86%3C/h3%3E%0A%3Cp%3E%E5%BC%95%E7%94%A8%E8%AE%A1%E6%95%B0%E9%81%B5%E5%BE%AA%26quot%3B%E8%B0%81%E6%8C%81%E6%9C%89%E8%B0%81%E9%87%8A%E6%94%BE%26quot%3B%E7%AD%96%E7%95%A5%EF%BC%9A%3C/p%3E%0A%3Cpre%3E%3Ccode%3E%0A%3Cpre%3E%3Ccode%3Estruct%20kobject%20%2Ak%20%3D%20kobject_get%28my_obj%29%3B%20%20%20//%20%2B1%0Akobject_put%28k%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20-1%2C%20%E5%8F%AF%E8%83%BD%E8%A7%A6%E5%8F%91%20release%3C/code%3E%3C/pre%3E%0A%3Cp%3E%E8%B0%83%E8%AF%95%E6%8A%80%E5%B7%A7%EF%BC%9A%E5%BC%80%E5%90%AF%20%3Ccode%3ECONFIG_DEBUG_KOBJECT_RELEASE%3C/code%3E%20%E5%90%8E%EF%BC%8C%3Ccode%3Erelease%3C/code%3E%20%E4%BC%9A%E5%BB%B6%E8%BF%9F%20100ms%20%E6%89%A7%E8%A1%8C%EF%BC%8C%E5%8F%AF%E6%8D%95%E8%8E%B7%26quot%3B%E7%88%86%E7%82%B8%E5%90%8E%E5%BC%95%E7%94%A8%26quot%3B%EF%BC%88use-after-free%EF%BC%89%E7%9A%84%E8%B0%83%E7%94%A8%E6%A0%88%E3%80%82%3C/p%3E%0A%3Ch3%3E2.3%20sysfs%20%E5%B1%9E%E6%80%A7%E7%9A%84%E5%88%9B%E5%BB%BA%3C/h3%3E%0A%3Cp%3E%E6%AF%8F%E4%B8%AA%20%3Ccode%3Ekobj_type%3C/code%3E%20%E4%B8%AD%E5%8F%AF%E4%BB%A5%E5%AE%9A%E4%B9%89%20%3Ccode%3Edefault_attrs%3C/code%3E%EF%BC%88%E6%97%A7%E7%89%88%EF%BC%89%E6%88%96%20%3Ccode%3Eattribute%3C/code%3E%EF%BC%88%E6%96%B0%E7%89%88%EF%BC%89%EF%BC%8C%E5%AE%83%E4%BB%AC%E5%9C%A8%20sysfs%20%E4%B8%AD%E8%A1%A8%E7%8E%B0%E4%B8%BA%E6%96%87%E4%BB%B6%EF%BC%9A%3C/p%3E%0A%3Cpre%3E%3Ccode%3E%0A%3Cpre%3E%3Ccode%3E//%20attribute%20%E5%AE%9A%E4%B9%89%0Astatic%20DEVICE_ATTR%28fan_speed%2C%200644%2C%20fan_speed_show%2C%20fan_speed_store%29%3B%0A%0A//%20show%20%E5%87%BD%E6%95%B0%0Astatic%20ssize_t%20fan_speed_show%28struct%20device%20%2Adev%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20struct%20device_attribute%20%2Aattr%2C%20char%20%2Abuf%29%0A%7B%0A%20%20%20%20return%20sysfs_emit%28buf%2C%20%26quot%3B%25u%5Cn%26quot%3B%2C%20read_fan_rpm%28dev%29%29%3B%0A%7D%3C/code%3E%3C/pre%3E%0A%3Cp%3E%3Ccode%3Esysfs_emit%28%29%3C/code%3E%20%E6%98%AF%E6%8E%A8%E8%8D%90%E7%9A%84%E5%86%99%E5%85%A5%E6%96%B9%E5%BC%8F%EF%BC%8C%E5%AE%83%E4%BC%9A%E5%81%9A%E9%95%BF%E5%BA%A6%E6%A3%80%E6%9F%A5%E5%92%8C%E6%A0%BC%E5%BC%8F%E5%8C%96%EF%BC%8C%E6%AF%94%20%3Ccode%3Esprintf%3C/code%3E%20%E5%AE%89%E5%85%A8%E3%80%82%3C/p%3E%0A%3Chr/%3E%0A%3Ch2%3E%E4%B8%89%E3%80%81kset%20%E4%B8%8E%E7%B1%BB%E5%9E%8B%E7%B3%BB%E7%BB%9F%EF%BC%88ktype%EF%BC%89%3C/h2%3E%0A%3Ch3%3E3.1%20kset%EF%BC%9A%E5%AE%B9%E5%99%A8%20%2B%20uevent%20%E9%92%A9%E5%AD%90%3C/h3%3E%0A%3Cp%3E%3Ccode%3Ekset%3C/code%3E%20%E8%87%AA%E8%BA%AB%E6%98%AF%E4%B8%80%E4%B8%AA%20%3Ccode%3Ekobject%3C/code%3E%EF%BC%88%E5%9B%A0%E6%AD%A4%E5%AE%83%E4%B9%9F%E4%BC%9A%E5%87%BA%E7%8E%B0%E5%9C%A8%20sysfs%20%E4%B8%AD%EF%BC%89%EF%BC%8C%E6%AD%A4%E5%A4%96%E7%BB%B4%E6%8A%A4%E4%B8%80%E4%B8%AA%E5%AD%90%E5%AF%B9%E8%B1%A1%E9%93%BE%E8%A1%A8%20%3Ccode%3Elist%3C/code%3E%EF%BC%8C%E5%B9%B6%E6%8C%81%E6%9C%89%20%3Ccode%3Euevent_ops%3C/code%3E%EF%BC%9A%3C/p%3E%0A%3Cpre%3E%3Ccode%3E%0A%3Cpre%3E%3Ccode%3Estruct%20kset%20%7B%0A%20%20%20%20struct%20list_head%20list%3B%20%20%20%20%20%20%20%20%20%20//%20%E6%8C%82%E8%BD%BD%E7%9A%84%20kobject%20%E9%93%BE%E8%A1%A8%0A%20%20%20%20spinlock_t%20list_lock%3B%0A%20%20%20%20struct%20kobj%20kobj%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%E5%86%85%E5%B5%8C%20kobject%0A%20%20%20%20const%20struct%20kset_uevent_ops%20%2Auevent_ops%3B%0A%7D%3B%3C/code%3E%3C/pre%3E%0A%3Cp%3E%3Ccode%3Euevent_ops%3C/code%3E%20%E5%85%81%E8%AE%B8%E6%8B%A6%E6%88%AA%E6%88%96%E8%A1%A5%E5%85%85%E7%83%AD%E6%8F%92%E6%8B%94%E4%BA%8B%E4%BB%B6%E3%80%82%E4%BE%8B%E5%A6%82%20block%20%E5%AD%90%E7%B3%BB%E7%BB%9F%E5%9C%A8%20%3Ccode%3Eblock_uevent_filter%3C/code%3E%20%E4%B8%AD%E5%8F%AA%E5%AF%B9%E7%A3%81%E7%9B%98%E5%92%8C%E5%88%86%E5%8C%BA%E7%B1%BB%E5%9E%8B%E5%90%91%E4%B8%8A%E6%8A%A5%E4%BA%8B%E4%BB%B6%EF%BC%8C%E6%8E%92%E9%99%A4%E8%99%9A%E6%8B%9F%20block%20%E8%AE%BE%E5%A4%87%E3%80%82%3C/p%3E%0A%3Ch3%3E3.2%20ktype%EF%BC%9A%E7%B1%BB%E5%9E%8B%E6%93%8D%E4%BD%9C%3C/h3%3E%0A%3Cpre%3E%3Ccode%3E%0A%3Cpre%3E%3Ccode%3Estruct%20kobj_type%20%7B%0A%20%20%20%20void%20%28%2Arelease%29%28struct%20kobject%20%2Akobj%29%3B%0A%20%20%20%20const%20struct%20sysfs_ops%20%2Asysfs_ops%3B%0A%20%20%20%20const%20struct%20attribute_group%20%2A%2Adefault_groups%3B%0A%20%20%20%20const%20struct%20kobj_ns_type_operations%20%2A%28%2A_ns_operations%29%28void%29%3B%0A%7D%3B%3C/code%3E%3C/pre%3E%0A%3Cp%3E%3Ccode%3Esysfs_ops%3C/code%3E%20%E6%8F%90%E4%BE%9B%20%3Ccode%3Eshow%3C/code%3E/%3Ccode%3Estore%3C/code%3E%20%E7%BB%9F%E4%B8%80%E6%B4%BE%E5%8F%91%E7%82%B9%EF%BC%9A%3C/p%3E%0A%3Cpre%3E%3Ccode%3E%0A%3Cpre%3E%3Ccode%3Estatic%20const%20struct%20sysfs_ops%20fan_sysfs_ops%20%3D%20%7B%0A%20%20%20%20.show%20%20%3D%20fan_attr_show%2C%0A%20%20%20%20.store%20%3D%20fan_attr_store%2C%0A%7D%3B%3C/code%3E%3C/pre%3E%0A%3Chr/%3E%0A%3Ch2%3E%E5%9B%9B%E3%80%81%E6%80%BB%E7%BA%BF%E2%80%94%E9%A9%B1%E5%8A%A8%E2%80%94%E8%AE%BE%E5%A4%87%E4%B8%89%E5%85%83%E7%BB%84%3C/h2%3E%0A%3Ch3%3E4.1%20bus_type%EF%BC%9A%E6%80%BB%E7%BA%BF%E6%8E%A7%E5%88%B6%E5%99%A8%3C/h3%3E%0A%3Cp%3E%3Ccode%3Ebus_type%3C/code%3E%20%E5%AE%9A%E4%B9%89%E4%BA%86%E4%B8%80%E7%B1%BB%E8%AE%BE%E5%A4%87%E5%85%B1%E6%9C%89%E7%9A%84%E5%8C%B9%E9%85%8D%E8%A7%84%E5%88%99%E5%92%8C%E7%94%B5%E6%BA%90%E7%AE%A1%E7%90%86%EF%BC%9A%3C/p%3E%0A%3Cpre%3E%3Ccode%3E%0A%3Cpre%3E%3Ccode%3Estruct%20bus_type%20%7B%0A%20%20%20%20const%20char%20%2Aname%3B%0A%20%20%20%20int%20%28%2Amatch%29%28struct%20device%20%2Adev%2C%20struct%20device_driver%20%2Adrv%29%3B%20%20//%20%E5%8C%B9%E9%85%8D%0A%20%20%20%20int%20%28%2Aprobe%29%28struct%20device%20%2Adev%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%E9%A9%B1%E5%8A%A8%E7%BB%91%E5%AE%9A%0A%20%20%20%20void%20%28%2Aremove%29%28struct%20device%20%2Adev%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%E8%A7%A3%E7%BB%91%0A%20%20%20%20int%20%28%2Asuspend%29%28struct%20device%20%2Adev%2C%20pm_message_t%20state%29%3B%0A%20%20%20%20...%0A%20%20%20%20struct%20subsys_private%20%2Ap%3B%20%20%20%20//%20%E7%A7%81%E6%9C%89%E6%95%B0%E6%8D%AE%EF%BC%9Akset%E3%80%81devices_kset%E3%80%81drivers_kset%0A%7D%3B%3C/code%3E%3C/pre%3E%0A%3Cp%3E%3Cstrong%3E%E5%85%B3%E9%94%AE%E6%B5%81%E7%A8%8B%3C/strong%3E%EF%BC%9A%E5%BD%93%E6%96%B0%E8%AE%BE%E5%A4%87%E6%8F%92%E5%85%A5%20%E2%86%92%20%E6%80%BB%E7%BA%BF%20%3Ccode%3Ematch%28%29%3C/code%3E%20%E9%80%9A%E8%BF%87%20%E2%86%92%20%3Ccode%3Eprobe%28%29%3C/code%3E%20%E8%A2%AB%E8%B0%83%E7%94%A8%20%E2%86%92%20%E9%A9%B1%E5%8A%A8%E6%8E%A5%E7%AE%A1%E8%AE%BE%E5%A4%87%E3%80%82%3C/p%3E%0A%3Cp%3E%E5%8C%B9%E9%85%8D%E6%9C%BA%E5%88%B6%E5%9B%A0%E6%80%BB%E7%BA%BF%E4%B8%8D%E5%90%8C%E8%80%8C%E5%BC%82%EF%BC%9A%3C/p%3E%0A%3Ctable%3E%3Cthead%3E%3Ctr%3E%0A%3Cth%3E%E6%80%BB%E7%BA%BF%3C/th%3E%0A%3Cth%3E%E5%8C%B9%E9%85%8D%E6%96%B9%E5%BC%8F%3C/th%3E%0A%3C/tr%3E%3C/thead%3E%3Ctbody%3E%0A%3Ctable%3E%3Cthead%3E%3Ctr%3E%0A%3Cth%3EPCI%3C/th%3E%0A%3Cth%3E%3Ccode%3Evendor_id%3C/code%3E%20%2B%20%3Ccode%3Edevice_id%3C/code%3E%20%E6%AF%94%E5%AF%B9%3C/th%3E%0A%3C/tr%3E%3C/thead%3E%3Ctbody%3E%0A%3Ctable%3E%3Cthead%3E%3Ctr%3E%0A%3Cth%3EPlatform%3C/th%3E%0A%3Cth%3E%E8%AE%BE%E5%A4%87%E5%90%8D%E5%AD%97%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%8C%B9%E9%85%8D%EF%BC%88%E6%88%96%20%3Ccode%3Ecompatible%3C/code%3E%20%E5%AD%97%E7%AC%A6%E4%B8%B2%EF%BC%89%3C/th%3E%0A%3C/tr%3E%3C/thead%3E%3Ctbody%3E%0A%3Ctable%3E%3Cthead%3E%3Ctr%3E%0A%3Cth%3EUSB%3C/th%3E%0A%3Cth%3E%E6%8E%A5%E5%8F%A3%20class/subclass/proto%3C/th%3E%0A%3C/tr%3E%3C/thead%3E%3Ctbody%3E%0A%3Ctable%3E%3Cthead%3E%3Ctr%3E%0A%3Cth%3EI2C%3C/th%3E%0A%3Cth%3E%3Ccode%3Ename%3C/code%3E%20%2B%20%E8%AE%BE%E5%A4%87%E6%A0%91%20%3Ccode%3Ecompatible%3C/code%3E%3C/th%3E%0A%3C/tr%3E%3C/thead%3E%3Ctbody%3E%0A%3Ch3%3E4.2%20device%20%E4%B8%8E%20device_driver%3C/h3%3E%0A%3Cpre%3E%3Ccode%3E%0A%3Cpre%3E%3Ccode%3Estruct%20device%20%7B%0A%20%20%20%20struct%20device%20%2Aparent%3B%20%20%20%20%20%20%20%20//%20%E7%89%A9%E7%90%86%E6%8B%93%E6%89%91%E4%B8%AD%E7%9A%84%E4%B8%8A%E7%BA%A7%0A%20%20%20%20struct%20kobj%20kobj%3B%20%20%20%20%20%20%20%20%20%20%20%20//%20%E7%BB%A7%E6%89%BF%20kobject%0A%20%20%20%20struct%20bus_type%20%2Abus%3B%20%20%20%20%20%20%20%20//%20%E6%89%80%E5%B1%9E%E6%80%BB%E7%BA%BF%0A%20%20%20%20struct%20device_driver%20%2Adriver%3B//%20%E7%BB%91%E5%AE%9A%E9%A9%B1%E5%8A%A8%0A%20%20%20%20void%20%2Aplatform_data%3B%20%20%20%20%20%20%20%20%20//%20%E6%9D%BF%E7%BA%A7%E7%A7%81%E6%9C%89%E6%95%B0%E6%8D%AE%0A%20%20%20%20void%20%2Adriver_data%3B%20%20%20%20%20%20%20%20%20%20%20//%20%E9%A9%B1%E5%8A%A8%E7%A7%81%E6%9C%89%E6%95%B0%E6%8D%AE%0A%20%20%20%20struct%20device_node%20%2Aof_node%3B%20//%20%E8%AE%BE%E5%A4%87%E6%A0%91%E8%8A%82%E7%82%B9%0A%20%20%20%20...%0A%7D%3B%0A%0Astruct%20device_driver%20%7B%0A%20%20%20%20const%20char%20%2Aname%3B%0A%20%20%20%20struct%20bus_type%20%2Abus%3B%0A%20%20%20%20const%20struct%20of_device_id%20%2Aof_match_table%3B%20%20//%20%E8%AE%BE%E5%A4%87%E6%A0%91%E5%8C%B9%E9%85%8D%0A%20%20%20%20int%20%20%28%2Aprobe%29%28struct%20device%20%2A%29%3B%0A%20%20%20%20void%20%28%2Aremove%29%28struct%20device%20%2A%29%3B%0A%20%20%20%20const%20struct%20dev_pm_ops%20%2Apm%3B%0A%7D%3B%3C/code%3E%3C/pre%3E%0A%3Cp%3E%3Cstrong%3Eprobe%20%E7%9A%84%E7%83%AD%E5%8C%BA%3C/strong%3E%EF%BC%9A%E9%A9%B1%E5%8A%A8%E5%AF%B9%E8%AE%BE%E5%A4%87%E5%81%9A%E5%88%9D%E5%A7%8B%E5%8C%96%E6%97%B6%EF%BC%8C%E7%B3%BB%E7%BB%9F%E4%BC%9A%E8%BF%9B%E5%85%A5%20%3Ccode%3EEAGAIN%3C/code%3E%20%E8%BF%94%E5%9B%9E%E8%AE%A9%E8%AE%BE%E5%A4%87%E6%A8%A1%E5%9E%8B%E9%87%8D%E8%AF%95%E2%80%94%E2%80%94%E8%BF%99%E6%98%AF%20defer%20probe%20%E7%9A%84%E5%9F%BA%E7%A1%80%EF%BC%8C%E7%AD%89%E5%BE%85%E4%BE%9D%E8%B5%96%E8%B5%84%E6%BA%90%E5%B0%B1%E7%BB%AA%E3%80%82%3C/p%3E%0A%3Chr/%3E%0A%3Ch2%3E%E4%BA%94%E3%80%81sysfs%20%E7%9A%84%E6%8C%82%E8%BD%BD%E4%B8%8E%E5%BA%95%E5%B1%82%E5%AE%9E%E7%8E%B0%3C/h2%3E%0A%3Ch3%3E5.1%20VFS%20%E5%B1%82%E6%8E%A5%E5%85%A5%3C/h3%3E%0A%3Cp%3E%3Ccode%3Esysfs%3C/code%3E%20%E6%98%AF%E5%9F%BA%E4%BA%8E%20RAM%20%E7%9A%84%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%EF%BC%8C%E7%BC%96%E8%AF%91%E8%BF%9B%E5%86%85%E6%A0%B8%E3%80%82%E6%8C%82%E8%BD%BD%E7%82%B9%E9%80%9A%E5%B8%B8%E6%98%AF%20%3Ccode%3E/sys%3C/code%3E%EF%BC%9A%3C/p%3E%0A%3Cpre%3E%3Ccode%3E%0A%3Cpre%3E%3Ccode%3Esysfs%20on%20/sys%20type%20sysfs%20%28rw%2Cnosuid%2Cnodev%2Cnoexec%2Crelatime%29%3C/code%3E%3C/pre%3E%0A%3Cp%3E%E5%86%85%E6%A0%B8%E5%90%AF%E5%8A%A8%E5%BA%8F%E5%88%97%E4%B8%AD%EF%BC%8C%20%3Ccode%3Esysfs_init%28%29%3C/code%3E%20%E6%B3%A8%E5%86%8C%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E3%80%81%3Ccode%3Esysfs_mount%28%29%3C/code%3E%20%E5%AE%9E%E7%8E%B0%E5%86%85%E9%83%A8%E5%A1%AB%E5%85%85%E3%80%82%E5%90%AF%E5%8A%A8%E8%84%9A%E6%9C%AC%E4%B8%AD%E7%94%A8%E6%88%B7%E6%80%81%E6%8C%82%E8%BD%BD%EF%BC%9A%3C/p%3E%0A%3Cpre%3E%3Ccode%3E%0A%3Cpre%3E%3Ccode%3Emount%20-t%20sysfs%20sysfs%20/sys%3C/code%3E%3C/pre%3E%0A%3Ch3%3E5.2%20kobject%20%E5%A6%82%E4%BD%95%E5%8F%98%E6%88%90%20/sys%20%E7%9B%AE%E5%BD%95%3C/h3%3E%0A%3Cp%3E%E5%85%B3%E9%94%AE%E8%B0%83%E7%94%A8%E9%93%BE%EF%BC%9A%3C/p%3E%0A%3Cpre%3E%3Ccode%3E%0A%3Cpre%3E%3Ccode%3Ekobject_add_internal%28%29%0A%20%20%E2%86%92%20sysfs_create_dir%28%29%20%20%20%20%20%20%20%23%20%E5%9C%A8%20kernfs%20%E5%88%9B%E5%BB%BA%E7%9B%AE%E5%BD%95%0A%20%20%E2%86%92%20sysfs_create_files%28%29%20%20%20%20%20%23%20%E5%88%9B%E5%BB%BA%E5%B1%9E%E6%80%A7%E6%96%87%E4%BB%B6%3C/code%3E%3C/pre%3E%0A%3Cp%3E%E6%AF%8F%E4%B8%AA%20kobject%20%E5%AF%B9%E5%BA%94%20kernfs%20%E4%B8%AD%E7%9A%84%E4%B8%80%E4%B8%AA%20%3Ccode%3Ekernfs_node%3C/code%3E%E3%80%82%E5%B1%9E%E6%80%A7%E6%96%87%E4%BB%B6%E9%80%9A%E8%BF%87%20%3Ccode%3Esysfs_create_file_ns%28%29%3C/code%3E%20%E5%88%9B%E5%BB%BA%EF%BC%8C%E6%96%87%E4%BB%B6%E6%93%8D%E4%BD%9C%E6%9C%80%E7%BB%88%E8%A2%AB%E8%B7%AF%E7%94%B1%E5%88%B0%20%3Ccode%3Ekobj_type-%26gt%3Bsysfs_ops-%26gt%3Bshow/store%3C/code%3E%E3%80%82%3C/p%3E%0A%3Ch3%3E5.3%20%E5%AE%9E%E6%88%98%EF%BC%9A%E9%80%9A%E8%BF%87%20sysfs%20%E6%9F%A5%E7%9C%8B%20PCIe%20%E9%93%BE%E8%B7%AF%E7%8A%B6%E6%80%81%3C/h3%3E%0A%3Cpre%3E%3Ccode%3E%0A%3Cpre%3E%3Ccode%3E%23%20%E6%9F%A5%E7%9C%8B%E7%BD%91%E5%8D%A1%20PCIe%20%E9%93%BE%E8%B7%AF%E5%AE%BD%E5%BA%A6%E5%92%8C%E9%80%9F%E5%BA%A6%0Acat%20/sys/class/net/eth0/device/current_link_width%0Acat%20/sys/class/net/eth0/device/current_link_speed%0A%0A%23%20%E8%AF%BB%E5%8F%96%20NVMe%20SSD%20%E7%9A%84%E6%B8%A9%E5%BA%A6%E9%98%88%E5%80%BC%0Acat%20/sys/block/nvme0n1/device/hwmon/hwmon%2A/temp1_input%3C/code%3E%3C/pre%3E%0A%3Chr/%3E%0A%3Ch2%3E%E5%85%AD%E3%80%81%E7%83%AD%E6%8F%92%E6%8B%94%E4%BA%8B%E4%BB%B6%E4%B8%8E%20udev%3C/h2%3E%0A%3Ch3%3E6.1%20%E4%BA%8B%E4%BB%B6%E8%A7%A6%E5%8F%91%E8%B7%AF%E5%BE%84%3C/h3%3E%0A%3Cpre%3E%3Ccode%3E%0A%3Cpre%3E%3Ccode%3E%E7%94%A8%E6%88%B7%E6%80%81%E5%86%99%E5%85%A5%20%26quot%3Badd%26quot%3B%20%E5%88%B0%20uevent%0A%20%20%E6%88%96%0A%E5%86%85%E6%A0%B8%E8%B0%83%E7%94%A8%20kobject_uevent%28%29%0A%20%20%E2%86%92%20dev_uevent%28%29%20%E7%94%9F%E6%88%90%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%0A%20%20%E2%86%92%20netlink%20%E5%8F%91%E9%80%81%E5%88%B0%E7%94%A8%E6%88%B7%E6%80%81%20%28NETLINK_KOBJECT_UEVENT%29%0A%20%20%E2%86%92%20%E7%94%A8%E6%88%B7%E6%80%81%20udevd%20%E6%94%B6%E5%88%B0%E4%BA%8B%E4%BB%B6%20%E2%86%92%20%E5%A4%84%E7%90%86%E8%A7%84%E5%88%99%3C/code%3E%3C/pre%3E%0A%3Ch3%3E6.2%20%E5%AE%9E%E6%88%98%EF%BC%9A%E8%A7%A6%E5%8F%91%20NVMe%20%E7%83%AD%E9%87%8D%E7%BD%AE%E4%BA%8B%E4%BB%B6%3C/h3%3E%0A%3Cpre%3E%3Ccode%3E%0A%3Cpre%3E%3Ccode%3E%23%20%E9%80%9A%E8%BF%87%20sysfs%20%E8%A7%A6%E5%8F%91%20NVMe%20%E8%AE%BE%E5%A4%87%E9%87%8D%E7%BD%AE%0Aecho%201%20%26gt%3B%20/sys/block/nvme0n1/device/reset%0A%0A%23%20%E8%A7%82%E5%AF%9F%E5%86%85%E6%A0%B8%E6%97%A5%E5%BF%97%0Admesg%20%7C%20tail%0A%23%20%5B%20%20%2B0.000000%5D%20nvme%20nvme0%3A%20pci%20function%200000%3A01%3A00.0%0A%23%20%5B%20%20%2B0.000000%5D%20nvme%200000%3A01%3A00.0%3A%20enabling%20device%20%280000%20-%26gt%3B%200002%29%3C/code%3E%3C/pre%3E%0A%3Ch3%3E6.3%20udev%20%E8%A7%84%E5%88%99%E7%BC%96%E5%86%99%E5%AE%9E%E6%88%98%3C/h3%3E%0A%3Cp%3E%E5%9C%BA%E6%99%AF%EF%BC%9A%E4%B8%BA%E7%89%B9%E5%AE%9A%E7%BD%91%E5%8D%A1%E7%BB%91%E5%AE%9A%E5%9B%BA%E5%AE%9A%E5%90%8D%E7%A7%B0%EF%BC%8C%E9%81%BF%E5%85%8D%E9%87%8D%E5%90%AF%E5%90%8E%E7%BD%91%E5%8D%A1%E5%90%8D%E6%BC%82%E7%A7%BB%E3%80%82%3C/p%3E%0A%3Cpre%3E%3Ccode%3E%0A%3Cpre%3E%3Ccode%3E%23%20/etc/udev/rules.d/70-persistent-net.rules%0ASUBSYSTEM%3D%3D%26quot%3Bnet%26quot%3B%2C%20ACTION%3D%3D%26quot%3Badd%26quot%3B%2C%20%0A%20%20ATTR%7Baddress%7D%3D%3D%26quot%3Baa%3Abb%3Acc%3Add%3Aee%3Aff%26quot%3B%2C%20%0A%20%20NAME%3D%26quot%3Bdata_net0%26quot%3B%2C%20%0A%20%20SYMLINK%2B%3D%26quot%3Bcontrol/%25k%26quot%3B%3C/code%3E%3C/pre%3E%0A%3Cp%3E%E8%B0%83%E8%AF%95%E5%91%BD%E4%BB%A4%EF%BC%9A%3C/p%3E%0A%3Cpre%3E%3Ccode%3E%0A%3Cpre%3E%3Ccode%3E%23%20%E6%A8%A1%E6%8B%9F%E4%BA%8B%E4%BB%B6%E5%B9%B6%E6%9F%A5%E7%9C%8B%E8%A7%84%E5%88%99%E6%98%AF%E5%90%A6%E5%91%BD%E4%B8%AD%0Audevadm%20test%20/sys/class/net/eth0%202%26gt%3B%26amp%3B1%20%7C%20grep%20-E%20%26quot%3B%28RUN%7CNAME%7CSYMLINK%29%26quot%3B%0A%0A%23%20%E7%9B%91%E5%90%AC%E5%AE%9E%E6%97%B6%E4%BA%8B%E4%BB%B6%0Audevadm%20monitor%20--environment%20--udev%3C/code%3E%3C/pre%3E%0A%3Chr/%3E%0A%3Ch2%3E%E4%B8%83%E3%80%81Platform%20%E6%80%BB%E7%BA%BF%EF%BC%9A%E5%B5%8C%E5%85%A5%E5%BC%8F%E8%AE%BE%E5%A4%87%E7%9A%84%E5%9F%BA%E7%9F%B3%3C/h2%3E%0A%3Cp%3EPlatform%20%E6%80%BB%E7%BA%BF%E5%A4%84%E7%90%86%E7%89%87%E4%B8%8A%E9%9B%86%E6%88%90%E8%AE%BE%E5%A4%87%EF%BC%88%E6%B2%A1%E6%9C%89%E7%89%A9%E7%90%86%E6%80%BB%E7%BA%BF%E6%8E%A2%E6%B5%8B%E6%9C%BA%E5%88%B6%E7%9A%84%E8%AE%BE%E5%A4%87%EF%BC%89%E3%80%82%E6%9C%89%E4%B8%A4%E7%A7%8D%E6%B3%A8%E5%86%8C%E6%96%B9%E5%BC%8F%EF%BC%9A%3C/p%3E%0A%3Ch3%3E7.1%20%E4%BC%A0%E7%BB%9F%E6%96%B9%E5%BC%8F%EF%BC%9Aplatform_device%20%2B%20platform_driver%3C/h3%3E%0A%3Cpre%3E%3Ccode%3E%0A%3Cpre%3E%3Ccode%3E//%20%E6%B3%A8%E5%86%8C%E8%AE%BE%E5%A4%87%E5%AE%9E%E4%BE%8B%EF%BC%88%E9%80%9A%E5%B8%B8%E5%9C%A8%E6%9D%BF%E7%BA%A7%E6%96%87%E4%BB%B6%E6%88%96%E8%AE%BE%E5%A4%87%E6%A0%91%E4%B8%AD%EF%BC%89%0Astatic%20struct%20resource%20mydev_resources%5B%5D%20%3D%20%7B%0A%20%20%20%20%5B0%5D%20%3D%20%7B%20.start%20%3D%200x10000000%2C%20.end%20%3D%200x100000ff%2C%20.flags%20%3D%20IORESOURCE_MEM%20%7D%2C%0A%20%20%20%20%5B1%5D%20%3D%20%7B%20.start%20%3D%20IRQ_NUM%2C%20%20%20%20%20.end%20%3D%20IRQ_NUM%2C%20%20%20%20%20%20.flags%20%3D%20IORESOURCE_IRQ%20%7D%2C%0A%7D%3B%0A%0Astatic%20struct%20platform_device%20mydev%20%3D%20%7B%0A%20%20%20%20.name%20%3D%20%26quot%3Bmy_custom_ip%26quot%3B%2C%0A%20%20%20%20.id%20%3D%20-1%2C%0A%20%20%20%20.num_resources%20%3D%20ARRAY_SIZE%28mydev_resources%29%2C%0A%20%20%20%20.resource%20%3D%20mydev_resources%2C%0A%7D%3B%0A%0A//%20%E9%A9%B1%E5%8A%A8%E4%BE%A7%0Astatic%20const%20struct%20of_device_id%20mydev_of_match%5B%5D%20%3D%20%7B%0A%20%20%20%20%7B%20.compatible%20%3D%20%26quot%3Bvendor%2Ccustom-ip%26quot%3B%2C%20%7D%2C%0A%20%20%20%20%7B%20/%2A%20sentinel%20%2A/%20%7D%0A%7D%3B%0A%0Astatic%20struct%20platform_driver%20mydev_driver%20%3D%20%7B%0A%20%20%20%20.probe%20%20%3D%20mydev_probe%2C%0A%20%20%20%20.remove%20%3D%20mydev_remove%2C%0A%20%20%20%20.driver%20%3D%20%7B%0A%20%20%20%20%20%20%20%20.name%20%3D%20%26quot%3Bmy_custom_ip%26quot%3B%2C%0A%20%20%20%20%20%20%20%20.of_match_table%20%3D%20mydev_of_match%2C%0A%20%20%20%20%7D%2C%0A%7D%3B%3C/code%3E%3C/pre%3E%0A%3Ch3%3E7.2%20%E8%AE%BE%E5%A4%87%E6%A0%91%E6%96%B9%E5%BC%8F%EF%BC%88%E6%8E%A8%E8%8D%90%EF%BC%89%3C/h3%3E%0A%3Cp%3E%E8%AE%BE%E5%A4%87%E6%A0%91%E8%8A%82%E7%82%B9%EF%BC%88.dts%EF%BC%89%EF%BC%9A%3C/p%3E%0A%3Cpre%3E%3Ccode%3E%0A%3Cpre%3E%3Ccode%3Ecustom_ip%4010000000%20%7B%0A%20%20%20%20compatible%20%3D%20%26quot%3Bvendor%2Ccustom-ip%26quot%3B%3B%0A%20%20%20%20reg%20%3D%20%26lt%3B0x10000000%200x100%26gt%3B%3B%0A%20%20%20%20interrupts%20%3D%20%26lt%3B0%2042%204%26gt%3B%3B%0A%7D%3B%3C/code%3E%3C/pre%3E%0A%3Cp%3E%E5%86%85%E6%A0%B8%E8%A7%A3%E6%9E%90%E8%AE%BE%E5%A4%87%E6%A0%91%E6%97%B6%E8%87%AA%E5%8A%A8%E5%88%9B%E5%BB%BA%20%3Ccode%3Eplatform_device%3C/code%3E%EF%BC%8C%E9%A9%B1%E5%8A%A8%E4%B8%AD%20%3Ccode%3Eof_match_table%3C/code%3E%20%E5%AE%8C%E6%88%90%E7%BB%91%E5%AE%9A%E3%80%82%3C/p%3E%0A%3Ch3%3E7.3%20%E8%B0%83%E8%AF%95%E6%8A%80%E5%B7%A7%3C/h3%3E%0A%3Cp%3E%E6%9F%A5%E7%9C%8B%E5%BD%93%E5%89%8D%E6%89%80%E6%9C%89%20platform%20%E8%AE%BE%E5%A4%87%EF%BC%9A%3C/p%3E%0A%3Cpre%3E%3Ccode%3E%0A%3Cpre%3E%3Ccode%3Els%20/sys/bus/platform/devices/%0Acat%20/sys/bus/platform/devices/10000000.custom_ip/modalias%0A%0A%23%20%E9%80%9A%E8%BF%87%20sysfs%20%E9%87%8D%E6%96%B0%E7%BB%91%E5%AE%9A/%E8%A7%A3%E7%BB%91%E9%A9%B1%E5%8A%A8%0Aecho%20%26quot%3B10000000.custom_ip%26quot%3B%20%26gt%3B%20/sys/bus/platform/drivers/my_custom_ip/unbind%0Aecho%20%26quot%3B10000000.custom_ip%26quot%3B%20%26gt%3B%20/sys/bus/platform/drivers/my_custom_ip/bind%3C/code%3E%3C/pre%3E%0A%3Chr/%3E%0A%3Ch2%3E%E5%85%AB%E3%80%81Device%20Link%20%E4%B8%8E%20Runtime%20PM%3C/h2%3E%0A%3Cp%3E%E8%AE%BE%E5%A4%87%E6%A8%A1%E5%9E%8B%E8%BF%98%E7%BB%B4%E6%8A%A4%E4%BA%86%E8%AE%BE%E5%A4%87%E9%97%B4%E7%9A%84%E4%BE%9D%E8%B5%96%E5%85%B3%E7%B3%BB%E2%80%94%E2%80%94%3Ccode%3Edevice_link%3C/code%3E%E3%80%82%E5%AE%83%E4%B8%8E%20runtime%20PM%20%E7%94%B5%E6%BA%90%E7%AE%A1%E7%90%86%E7%B4%A7%E5%AF%86%E9%85%8D%E5%90%88%EF%BC%9A%3C/p%3E%0A%3Cpre%3E%3Ccode%3E%0A%3Cpre%3E%3Ccode%3E//%20%E5%BB%BA%E7%AB%8B%E4%BE%9B%E5%BA%94%E5%95%86-%E6%B6%88%E8%B4%B9%E8%80%85%E5%85%B3%E7%B3%BB%0Adevice_link_add%28consumer%2C%20supplier%2C%20DL_FLAG_STATELESS%29%3B%3C/code%3E%3C/pre%3E%0A%3Cp%3E%E8%BF%99%E6%A0%B7%E4%BE%9B%E5%BA%94%E5%95%86%EF%BC%88%E5%A6%82%E6%97%B6%E9%92%9F%E3%80%81%E6%80%BB%E7%BA%BF%EF%BC%89%E5%85%B3%E6%9C%BA%E5%89%8D%EF%BC%8C%E6%B6%88%E8%B4%B9%E8%80%85%EF%BC%88%E4%BD%BF%E7%94%A8%E8%AF%A5%E6%97%B6%E9%92%9F%E7%9A%84%20IP%EF%BC%89%E5%BF%85%E9%A1%BB%E5%85%88%E8%A2%AB%E6%8C%82%E8%B5%B7%E3%80%82%3C/p%3E%0A%3Cp%3E%E6%9F%A5%E7%9C%8B%E7%B3%BB%E7%BB%9F%E4%B8%AD%E7%9A%84%20device%20link%EF%BC%9A%3C/p%3E%0A%3Cpre%3E%3Ccode%3E%0A%3Cpre%3E%3Ccode%3Els%20/sys/devices/%2A/supplier%2A%3C/code%3E%3C/pre%3E%0A%3Chr/%3E%0A%3Ch2%3E%E4%B9%9D%E3%80%81%E6%80%A7%E8%83%BD%E9%97%AE%E9%A2%98%E8%AF%8A%E6%96%AD%3C/h2%3E%0A%3Ch3%3E9.1%20%E6%85%A2%E4%B8%80%E9%A1%B9%E6%8E%92%E6%9F%A5%3C/h3%3E%0A%3Cp%3E%E6%9C%89%E4%BA%9B%20admin%20%E5%8F%8D%E9%A6%88%20%3Ccode%3E/sys%3C/code%3E%20%E5%A4%A7%E7%9B%AE%E5%BD%95%E9%81%8D%E5%8E%86%E6%9E%81%E6%85%A2%EF%BC%8C%E5%8E%9F%E5%9B%A0%E9%80%9A%E5%B8%B8%E6%98%AF%E5%A4%A7%E9%87%8F%E6%97%A0%E7%94%A8%20uevent%E3%80%82%E6%80%9D%E8%B7%AF%EF%BC%9A%3C/p%3E%0A%3Cpre%3E%3Ccode%3E%0A%3Cpre%3E%3Ccode%3E%23%20%E6%9F%A5%E7%9C%8B%E6%9F%90%E4%B8%AA%20kset%20%E7%9A%84%20uevent%20%E6%98%AF%E5%90%A6%E8%A2%AB%E8%BF%87%E6%BB%A4%0Acat%20/sys/bus/pci/drivers_probe%0A%0A%23%20%E7%94%A8%20trace%20event%20%E8%BF%BD%E8%B8%AA%20kobject%20%E4%BA%8B%E4%BB%B6%0Aecho%201%20%26gt%3B%20/sys/kernel/debug/tracing/events/kobject/enable%0Acat%20/sys/kernel/debug/tracing/trace_pipe%3C/code%3E%3C/pre%3E%0A%3Ch3%3E9.2%20%E5%86%85%E6%A0%B8%E9%85%8D%E7%BD%AE%E5%85%B3%E9%94%AE%E9%80%89%E9%A1%B9%3C/h3%3E%0A%3Ctable%3E%3Cthead%3E%3Ctr%3E%0A%3Cth%3E%E9%85%8D%E7%BD%AE%3C/th%3E%0A%3Cth%3E%E5%BF%85%E8%A6%81%E6%80%A7%3C/th%3E%0A%3C/tr%3E%3C/thead%3E%3Ctbody%3E%0A%3Cp%3E%3Ccode%3ECONFIG_SYSFS%3C/code%3E%20%7C%20%E5%BF%85%E9%80%89%3C/p%3E%0A%3Cp%3E%3Ccode%3ECONFIG_HOTPLUG%3C/code%3E%20%7C%20%E7%83%AD%E6%8F%92%E6%8B%94%3C/p%3E%0A%3Cp%3E%3Ccode%3ECONFIG_UEVENT_HELPER_PATH%3C/code%3E%20%7C%20%E4%BC%A0%E7%BB%9F%20hotplug%EF%BC%88%E6%96%B0%E7%89%88%E5%B7%B2%E4%B8%8D%E9%87%8D%E8%A6%81%EF%BC%89%3C/p%3E%0A%3Cp%3E%3Ccode%3ECONFIG_NET%3C/code%3E%20%2B%20%3Ccode%3ECONFIG_KOBJECT_UEVENT%3C/code%3E%20%7C%20netlink%20uevent%20%E9%80%9A%E9%81%93%3C/p%3E%0A%3Chr/%3E%0A%3Ch2%3E%E5%8D%81%E3%80%81%E4%BB%8E%E7%94%A8%E6%88%B7%E6%80%81%E5%8F%8D%E6%8E%A8%E5%86%85%E6%A0%B8%E8%AE%BE%E8%AE%A1%3C/h2%3E%0A%3Cp%3E%E5%9C%A8%E7%94%A8%E6%88%B7%E6%80%81%EF%BC%8C%3Ccode%3Esysfs%3C/code%3E%20%E5%92%8C%20%3Ccode%3Eprocfs%3C/code%3E%E3%80%81%3Ccode%3Edebugfs%3C/code%3E%20%E5%85%B1%E5%90%8C%E6%9E%84%E6%88%90%E4%BA%86%E6%9A%B4%E9%9C%B2%E5%86%85%E6%A0%B8%E7%8A%B6%E6%80%81%E7%9A%84%20API%E3%80%82%E4%BD%86%20sysfs%20%E6%9C%89%E5%85%B6%26quot%3B%E5%88%86%E6%B0%B4%E5%B2%AD%26quot%3B%E8%AF%AD%E4%B9%89%EF%BC%9A%3C/p%3E%0A%3Cul%3E%0A%3Cli%3E%3Cstrong%3E%E7%A8%B3%E5%AE%9A%E6%8E%A5%E5%8F%A3%3C/strong%3E%EF%BC%9A%3Ccode%3E/sys/class/%3C/code%3E%2C%20%3Ccode%3E/sys/bus/%3C/code%3E%2C%20%3Ccode%3E/sys/devices/%3C/code%3E%20%E4%B8%8B%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%8C%E9%80%9A%E5%B8%B8%E5%9C%A8%205%20%E5%B9%B4%E7%94%9A%E8%87%B3%E6%9B%B4%E9%95%BF%E6%97%B6%E6%9C%9F%E4%BF%9D%E6%8C%81%E7%A8%B3%E5%AE%9A%EF%BC%9B%3C/li%3E%0A%3Cli%3E%3Cstrong%3E%E5%AE%9E%E9%AA%8C%E6%8E%A5%E5%8F%A3%3C/strong%3E%EF%BC%9A%3Ccode%3E/sys/kernel/%3C/code%3E%20%E4%B8%8B%E7%9A%84%E5%A4%9A%E6%95%B0%E6%96%87%E4%BB%B6%EF%BC%8C%E6%96%87%E6%A1%A3%E5%B0%91%E3%80%81%E5%8F%98%E5%8A%A8%E5%A4%9A%E3%80%82%3C/li%3E%0A%3C/ul%3E%0A%3Cp%3E%E5%BD%93%E9%9C%80%E8%A6%81%E6%9A%B4%E9%9C%B2%E4%B8%80%E4%B8%AA%E9%A9%B1%E5%8A%A8%E5%8F%82%E6%95%B0%E6%97%B6%EF%BC%8C%E6%AD%A3%E7%A1%AE%E5%81%9A%E6%B3%95%E6%98%AF%E5%9C%A8%20sysfs%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20%3Ccode%3EDEVICE_ATTR%3C/code%3E%20%E9%85%8D%E5%90%88%20%3Ccode%3Emode%3C/code%3E%20%E5%AD%97%E6%AE%B5%EF%BC%88%E5%A6%82%20%3Ccode%3E0644%3C/code%3E%EF%BC%89%EF%BC%8C%E8%80%8C%E9%9D%9E%E8%87%AA%E8%A1%8C%E5%88%9B%E5%BB%BA%20proc%20%E8%8A%82%E7%82%B9%E3%80%82%E8%BF%99%E7%A1%AE%E4%BF%9D%E4%BA%86%E6%96%B0%E5%86%85%E6%A0%B8%E5%8D%87%E7%BA%A7%E6%97%B6%E4%B8%8D%E4%BC%9A%E5%9B%A0%E6%A0%87%E5%87%86%E6%8E%A5%E5%8F%A3%E6%94%B9%E5%8F%98%E8%80%8C%E7%A0%B4%E5%9D%8F%E4%B8%8A%E5%B1%82%E8%87%AA%E5%8A%A8%E5%8C%96%E3%80%82%3C/p%3E%0A%3Chr/%3E%0A%3Ch2%3E%E5%8D%81%E4%B8%80%E3%80%81%E6%9C%AA%E6%9D%A5%E6%BC%94%E8%BF%9B%3C/h2%3E%0A%3Cp%3E%E5%86%85%E6%A0%B8%E7%A4%BE%E5%8C%BA%E6%AD%A3%E5%9C%A8%E6%8E%A8%E8%BF%9B%E7%9A%84%E7%90%86%E5%BF%B5%EF%BC%9A%3C/p%3E%0A%3Col%3E%0A%3Cli%3E%3Cstrong%3Eauxiliary%20%E8%AE%BE%E5%A4%87%3C/strong%3E%20%E2%80%94%E2%80%94%20%E8%A7%A3%E5%86%B3%E9%A9%B1%E5%8A%A8%E5%A4%9A%E5%AE%9E%E4%BE%8B%E5%9C%BA%E6%99%AF%E4%B8%AD%26quot%3B%E9%99%84%E5%B1%9E%E8%AE%BE%E5%A4%87%26quot%3B%E7%AE%A1%E7%90%86%E5%9B%B0%E5%A2%83%E3%80%82%E9%80%9A%E8%BF%87%20%3Ccode%3Eauxiliary_device_register%28%29%3C/code%3E%20%E5%88%9B%E5%BB%BA%EF%BC%8C%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E4%B8%8E%E4%B8%BB%E8%AE%BE%E5%A4%87%E7%BB%91%E5%AE%9A%E3%80%82%3C/li%3E%0A%3Cli%3E%3Cstrong%3ESoftware%20Node%3C/strong%3E%20%E2%80%94%E2%80%94%20%E6%8A%BD%E8%B1%A1%E7%A1%AC%E4%BB%B6%E6%8F%8F%E8%BF%B0%EF%BC%8C%E6%9B%BF%E4%BB%A3%E9%83%A8%E5%88%86%E5%B9%B3%E5%8F%B0%E6%95%B0%E6%8D%AE%E3%80%81ACPI%E3%80%81DT%20%E7%9A%84%E5%B7%A5%E4%BD%9C%EF%BC%9B%3C/li%3E%0A%3Cli%3E%3Cstrong%3EKUnit%20%E8%A6%86%E7%9B%96%3C/strong%3E%20%E2%80%94%E2%80%94%20%E8%AE%BE%E5%A4%87%E6%A8%A1%E5%9E%8B%E6%A0%B8%E5%BF%83%E4%BB%A3%E7%A0%81%E5%BC%80%E5%A7%8B%E9%80%90%E6%AD%A5%E5%BC%95%E5%85%A5%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%EF%BC%8C%3Ccode%3Ekobject%3C/code%3E%20%E7%B3%BB%E5%88%97%E5%B7%B2%E6%9C%89%20%3Ccode%3Elib/kobject_kunit.c%3C/code%3E%E3%80%82%3C/li%3E%0A%3C/ol%3E%0A%3Chr/%3E%0A%3Ch2%3E%E5%8D%81%E4%BA%8C%E3%80%81%E6%80%BB%E7%BB%93%3C/h2%3E%0A%3Cp%3ELinux%20%E8%AE%BE%E5%A4%87%E6%A8%A1%E5%9E%8B%E4%B8%8D%E6%98%AF%E4%B8%80%E4%B8%AA%E6%96%B0%E7%9A%84%26quot%3B%E5%8A%9F%E8%83%BD%26quot%3B%EF%BC%8C%E8%80%8C%E6%98%AF%E6%95%B4%E4%B8%AA%E5%86%85%E6%A0%B8%E5%AF%B9%E8%B1%A1%E5%8C%96%E7%9A%84%E9%AA%A8%E6%9E%B6%E3%80%82%E4%BB%8E%20%3Ccode%3Ekobject%3C/code%3E%20%E7%9A%84%E5%BC%95%E7%94%A8%E8%AE%A1%E6%95%B0%E5%92%8C%20sysfs%20%E7%9B%AE%E5%BD%95%EF%BC%8C%E5%88%B0%20%3Ccode%3Ebus_type%3C/code%3E%20%E7%9A%84%20match/probe%20%E6%B5%81%E7%A8%8B%EF%BC%8C%E5%86%8D%E5%88%B0%E7%94%A8%E6%88%B7%E6%80%81%E7%9A%84%20%3Ccode%3Eudev%3C/code%3E%20%E8%A7%84%E5%88%99%E9%93%BE%EF%BC%8C%E6%95%B4%E4%B8%AA%E4%BD%93%E7%B3%BB%E4%BD%93%E7%8E%B0%E4%BA%86%26quot%3B%E5%AF%B9%E8%B1%A1%E5%8C%96%20%2B%20%E4%BA%8B%E4%BB%B6%E9%A9%B1%E5%8A%A8%26quot%3B%E7%9A%84%E8%AE%BE%E8%AE%A1%E8%8C%83%E5%BC%8F%E3%80%82%3C/p%3E%0A%3Cp%3E%E7%90%86%E8%A7%A3%E8%BF%99%E5%A5%97%E6%9C%BA%E5%88%B6%E6%98%AF%E5%81%9A%E5%A5%BD%E9%A9%B1%E5%8A%A8%E3%80%81%E7%B3%BB%E7%BB%9F%E7%AE%A1%E7%90%86%E3%80%81%E4%BB%A5%E5%8F%8A%E7%A1%AC%E4%BB%B6%E9%80%82%E9%85%8D%E7%9A%84%E5%9F%BA%E7%A1%80%E3%80%82%E6%8E%A8%E8%8D%90%E7%9A%84%E7%BB%83%E4%B9%A0%E6%B8%85%E5%8D%95%EF%BC%9A%3C/p%3E%0A%3Col%3E%0A%3Cli%3E%E5%86%99%E4%B8%80%E4%B8%AA%20platform%20%E9%A9%B1%E5%8A%A8%EF%BC%8C%E9%80%9A%E8%BF%87%20sysfs%20%E6%9A%B4%E9%9C%B2%E8%B0%83%E8%AF%95%E4%BF%A1%E6%81%AF%EF%BC%9B%3C/li%3E%0A%3Cli%3E%E5%86%99%E4%B8%80%E6%9D%A1%20udev%20%E8%A7%84%E5%88%99%EF%BC%8C%E5%9C%A8%E6%8F%92%E5%85%A5%E7%89%B9%E6%AE%8A%20USB%20%E8%AE%BE%E5%A4%87%E6%97%B6%E8%87%AA%E5%8A%A8%E6%8C%82%E8%BD%BD%E5%B9%B6%E6%89%A7%E8%A1%8C%E8%84%9A%E6%9C%AC%EF%BC%9B%3C/li%3E%0A%3Cli%3E%E5%9C%A8%20QM/qemu%20%E4%B8%AD%E6%A8%A1%E6%8B%9F%E4%B8%80%E4%B8%AA%20PCIe%20%E7%83%AD%E6%8F%92%E6%8B%94%E5%9C%BA%E6%99%AF%EF%BC%8C%E8%A7%82%E5%AF%9F%20%3Ccode%3E/sys%3C/code%3E%20%E7%9B%AE%E5%BD%95%E6%A0%91%E5%8F%98%E5%8C%96%EF%BC%9B%3C/li%3E%0A%3Cli%3E%E4%BD%BF%E7%94%A8%20%3Ccode%3Eftrace%3C/code%3E%20%E8%B7%9F%E8%B8%AA%20%3Ccode%3Ekobject_uevent%3C/code%3E%20%E8%B0%83%E7%94%A8%E9%93%BE%EF%BC%8C%E7%90%86%E8%A7%A3%E5%BB%B6%E8%BF%9F%E5%9C%A8%E5%93%AA%E9%87%8C%E3%80%82%3C/li%3E%0A%3C/ol%3E
点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部