I have a Linux kernel module that implements a character device driver. I've read through Linux Device Drivers and followed several tutorials. At this point, I have a simple module that provides open
, release
, and write
file operations.
I'm trying to use the Generic DMA Layer to create a streaming DMA mapping. I'm confused by the following excerpt from LDD:
Many of the functions below require a
struct device
. This structure is the low-level representation of a device within the Linux device model. It is not something that drivers often have to work with directly, but you do need ot when using the generic DMA layer. Usually, you can find this structure buried inside the bus specific that describes your device. For example, it can be found as thedev
field instruct pci_device
orstruct usb_device
.
I read further into the Linux device model, and encountered the following:
At the lowest level, every device in a Linux system is represented by an instance of struct device.
How can I get the struct device
for my character device? Is there one being created for me behind the scenes, or do I need to create it?
I tried manually creating a class with class_create()
and then using that to create a device with device_create()
, but when I used that device to set up DMA mappings I think I just got a bogus address. Is this the correct approach?
For a little bit more information about my platform, I'm working on the Altera SoCFPGA platform (ARM), so my device isn't a true hardware device like a USB or PCI device, but rather logic implemented in an FPGA.
I found a lot of info in Chapter 14 of LDD that I think may be relevant (buses, devices, drivers, etc.), but I'm just not sure when or how to use it. To me, it seems like that chapter is discussing a lot of data structures that all devices and drivers use, but I'm confused because I haven't had to make use of any of it.