Sie sind auf Seite 1von 5

Linux hacks

MARCH 30, 2014 4:23 PM

Platform Device and Platform Driver @ Linux


I was trying to learn Linux device driver and system programming. Two simple question i had was, how does the Linux
kernel know, which devices are present and what resources(bus channel, interrupts, power on switch, etc..) it is using
? what are the drivers for them ?
After going through Linux kernel source code and exploring couple of kernel documents I sum up that Platform
Device, Platform Driver and Platform Data is the solution of my questions. In this post i am trying to highlight the
concept of platform device and platform driver with the help of pseudo code.
Unified driver model has introduced in the Linux kernel 2.6 release.
There are several kind of devices are connected to CPU using different type of bus interfaces.
eg : PCI,ISA,I2C,USB,SPI, etc
According to working mechanism, these buses can be divided in to two categories.
1. Discover-able :
Now a days buses like PCI and USB, which have discover-ability built into them. When a device is connected to a bus, it
receives a unique identification which will be used for further communication with the CPU. Which menace that, device
sitting on a PCI/USB bus can tell the system what sort of device it is and where its resources are. So the kernel can,
enumerate the available device and driver to initialized device using the probe method normally. This kind of bus
mechanism usually found with x86 architecture(PC).
2 Non discover-able :
Embedded system usually dont have a sophisticated bus mechanism found in PC systems. we have buses like I2c or
SPI. Devices attached to these buses are not discoverable in the above sense as i tried to explain. The OS has to be
explicitly told that, for example, a EEPROM is connected on the I2C bus at an address of 0 DA. In this case, platform
device/driver comes in a picture.
So basically, Platform devices are inherently not discoverable, i.e. the hardware cannot say Hey! Im present! to the
software .
Unlike PCI or USB devices, I2C devices are not enumerated at the hardware level (at run time). Instead, the software
must know (at compile time) which devices are connected on each I2C bus segment. So USB and PCI are not platform
devices.
In the embedded and system-on-chip world, non discoverable devices are increasing rapidly. So basically all non
discoverable devices are connected to the virtual bus and declares its name. This virtual bus is known as platform
bus. On the other side, driver requests a device with the same name on the bus.
The whole story starts from board file. A board file is heart of each Linux kernel, which specifies all the information
about what and how peripherals are connected to processor. eg: devices present on buses such as SPI and I2c. In the
board file you can find all the devices are registered with the name and appropriate data. This data is known as the

platform data. This Platform data will pass to driver. Generally Platform data is the device specific data. Eg: Bus id,
interrupts ,etc ..
Here i have created pseudo device and driver to develop clear understanding of all these. In your board header file
declare a private data structure according to resources used by your device. Here, i am declaring test_platfrom_data.
The snippet 1 below will provide more information about members of test_platform_data.

Snippet 1

In my board c file i have created instance of this structure with appropriate data. This user defined structure will
passed to the driver w. Snippet 2 will provide you details about private data which is assigned to structure instance.

Snippet 2

Now its time to define platform device in board file. In Linux kernel struct platform_device is declared. Lets create a
instance of this structure. This will passed to kernel for registration of platform device. Snippet 3 will show you
definition of platform device.

Snippet 3

The main important point is the name of device. Here in my case name of my device is drivertest. From board init
function add line(shown by snippet 4) to register this platform device.
After this edition in board file, compile kernel using appropriate cross compiler and boot your board with this kernel.

Snippet 4

After success full booting of board, start making driver(.ko) file for your registered device. Structure platfrom_driver is
used to register platform driver. Here, snippet below shows the definition of platfrom_driver structure. Register
platform driver in init function using platfrom_driver_register.

Follow
Snippet 5

FollowLinuxhacks

Here, the impotent thing is the name of driver. Name of driver is as same as the name of device(in board file). On the
registration of new platform driver, linux kernel compare
Geteverynewpostdelivered
its name with the previously defined all platform device
name. If the match is found the probe function of thetoyourInbox.
driver is called with appropriate data which is responsible to
initialize the device. The whole device structure is passed through probe function. The snippet below shows the
subroutine for probe function.

Enteryouremailaddress
Sign me up

PoweredbyWordPress.com

Snippet 6

In the probe function of driver, i have extracted platform data from probe, which is assigned to the device at the
booting time. This platform_data contains all the low level information about device. On the basis of this data, probe
function initialize the device and irq using this data. Generally this data contains the information about module id, data
rate, interrupt etc..
I have compiled module and the output i is pasted below which shows the platform data is extracted from the probe.

output sdfdfas

This is how the whole initialization of non dicoverable devices works.

Abouttheseads

YouMayLike
1.

Share this:

LinkedIn

Twitter

Google

Email

StumbleUpon

Facebook

Like
Onebloggerlikesthis.

4 responses to Platform Device and Platform


Driver @ Linux
Harshil Makwana
May 14, 2014 at 12:33 am
Good Artical
Reply

shah.b
May 14, 2014 at 12:58 am
Thanks Harshil Makwana.
Reply

dat
May 28, 2014 at 4:37 am
Thank you so much. I understand cleary about it from your text. ^-^
Reply

Nilesh

May 28, 2014 at 6:39 am


Bhargavits a good article for driver beginner.nice atricle buddy
Reply

Das könnte Ihnen auch gefallen