#kernel-module #freebsd #kmod #api-bindings

nightly no-std freebsd-kmi-rs

FreeBSD Kernel Module Programming Interface

3 unstable releases

0.3.0 Feb 8, 2024
0.2.2 Dec 7, 2023
0.2.1 Nov 25, 2023

#624 in Operating systems

Download history 1/week @ 2024-02-05 24/week @ 2024-02-19 19/week @ 2024-02-26 27/week @ 2024-03-11 51/week @ 2024-04-01

78 downloads per month

Custom license

77KB
2K SLoC

FreeBSD Kernel Module Interface Rust Crate

This repository contains everything which is needed to build a kernel module and safe realizations! A bindings to FreeBSD Kernel is provided by FreeBSD-KPI-RS crate.

Supportes FreeBSD versions:

  • 13.1 RELENG (RELEASE) !!! no longer maintained.
  • 14.0 RELENG (RELEASE) <-- current

Releases

!!! Only latest (major) versions of FreeBSD will be actively supported. As soon as new major version is released, the previous are automatically moved to legacy.

For example: current 13.1. When 14.0 will be released, the current will become 14.0

At the moment it is not possible to have available an KPI or KMI for x.x-CURRENT or x.x-STABLE.

Feature

MALLOC

GLOBAL_ALLOC_DISABLED - disables the build-in implementation of the kernel allocator.

Either: GLOBAL_ALLOC_FLAG_WAITOK - tells the malloc that your kernel module is ok to wait for heap space. Or: GLOBAL_ALLOC_FLAG_NOWAIT - tells the malloc that your kernel module should not wait for heap space. GLOBAL_ALLOC_FLAG_USERESERVE - additional feature which alters the behaviour of NOWAIT.

One of the above should be declared.

GLOBAL_ALLOC_EXCLUDE_PANICHANDLER - excludes the default \#\[panic_handler\] GLOBAL_ALLOC_EXCLUDE_ALLOC_ERROR_HNDL- excludes the \#\[alloc_error_handler\]

Programming guide

HEAP

By default, this crate implements the common GlobalAllocator``. It is recomended not to use it and call a macro from global_alloc.rsto implement your own. Also, this crate should be compiled setting featureGLOBAL_ALLOC_DISABLED`.

Unfortunatelly, a GlobalAllocator is required by default.

A default panic_handler and alloc_error_handler are included as part of the GlobalAllocator. Bothe can be overrided by including features: GLOBAL_ALLOC_EXCLUDE_PANICHANDLER GLOBAL_ALLOC_EXCLUDE_ALLOC_ERROR_HNDL.

A custom instances of malloc can be declared using macro in the heap_alloc/alloc.rs.

Requests

todo

Dependencies

~3.5MB
~65K SLoC