mod.rs 1.1 KB

12345678910111213141516171819202122232425262728293031
  1. use crate::driver::base::device::bus::Bus;
  2. use crate::driver::base::device::{device_manager, device_register, sys_devices_kset, Device};
  3. use crate::driver::base::kobject::KObject;
  4. use crate::init::initcall::INITCALL_DEVICE;
  5. use crate::misc::events::get_event_source_bus;
  6. use crate::misc::events::kprobe::device::{KprobeAttr, KprobeDevice};
  7. use alloc::sync::Arc;
  8. use system_error::SystemError;
  9. use unified_init::macros::unified_init;
  10. pub mod device;
  11. static mut KPROBE_DEVICE: Option<Arc<KprobeDevice>> = None;
  12. #[unified_init(INITCALL_DEVICE)]
  13. pub fn kprobe_subsys_init() -> Result<(), SystemError> {
  14. let kprobe_device = KprobeDevice::new(Some(Arc::downgrade(
  15. &(sys_devices_kset() as Arc<dyn KObject>),
  16. )));
  17. let event_source_bus = get_event_source_bus().ok_or(SystemError::EINVAL)?;
  18. kprobe_device.set_bus(Some(Arc::downgrade(&(event_source_bus as Arc<dyn Bus>))));
  19. // 注册到/sys/devices下
  20. device_register(kprobe_device.clone())?;
  21. unsafe {
  22. KPROBE_DEVICE = Some(kprobe_device.clone());
  23. }
  24. device_manager().create_file(&(kprobe_device as Arc<dyn Device>), &KprobeAttr)?;
  25. Ok(())
  26. }