Merge branch 'add-kernel-functions' into 'master'

Add kernel functions and the example driver on README

See merge request redox-os/drivers!99
This commit is contained in:
Ron Williams
2023-07-17 06:08:09 +00:00
+12
View File
@@ -56,6 +56,16 @@ Missing class drivers for various classes.
- virtio-netd - VirtIO net device (incomplete).
- xhcid - xHCI (incomplete).
## Kernel Functions
These are the most used kernel functions by Redox drivers.
- `iopl` - syscall that sets the I/O privilege level. x86 has four privilege rings (0/1/2/3), of which the kernel runs in ring 0 and userspace in ring 3. IOPL can only be changed by the kernel, for obvious security reasons, and therefore the Redox kernel needs root to set it. It is unique for each process. Processes with IOPL=3 can access I/O ports, and the kernel can access them as well.
- `physalloc` - allocates physical memory frames.
- `physfree` - frees memory frames.
- `physmap` - maps physical memory frames to driver-accessible virtual memory pages.
- `irq:` - allows getting events from interrupts. It is used primarily by listening for its file descriptors using the `event:` scheme.
## Contributing to Drivers
If you want to write drivers for Redox, datasheets are preferable, when they are freely available. Be aware that datasheets are often provided under a [Non-Disclosure Agreement](https://en.wikipedia.org/wiki/Non-disclosure_agreement) from hardware vendors, which can affect the ability to create an MIT-licensed driver.
@@ -63,3 +73,5 @@ If you want to write drivers for Redox, datasheets are preferable, when they are
If you don't have datasheets, we recommend you to do reverse-engineering of available C code of BSD drivers.
We recommend BSDs drivers because BSD license is compatible with MIT (permissive), that way we can reuse the code in other drivers.
You can see this [example](https://gitlab.redox-os.org/redox-os/exampled) driver, read the code of the existent ones or the most close driver type for your device.