<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://script.spoken-tutorial.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://script.spoken-tutorial.org/index.php?action=history&amp;feed=atom&amp;title=Embedded-Linux-Device-Driver%2FC3%2FInput-and-Output-Control%2FEnglish</id>
		<title>Embedded-Linux-Device-Driver/C3/Input-and-Output-Control/English - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://script.spoken-tutorial.org/index.php?action=history&amp;feed=atom&amp;title=Embedded-Linux-Device-Driver%2FC3%2FInput-and-Output-Control%2FEnglish"/>
		<link rel="alternate" type="text/html" href="https://script.spoken-tutorial.org/index.php?title=Embedded-Linux-Device-Driver/C3/Input-and-Output-Control/English&amp;action=history"/>
		<updated>2026-05-13T15:46:31Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.23.17</generator>

	<entry>
		<id>https://script.spoken-tutorial.org/index.php?title=Embedded-Linux-Device-Driver/C3/Input-and-Output-Control/English&amp;diff=54590&amp;oldid=prev</id>
		<title>Nancyvarkey at 11:06, 15 December 2020</title>
		<link rel="alternate" type="text/html" href="https://script.spoken-tutorial.org/index.php?title=Embedded-Linux-Device-Driver/C3/Input-and-Output-Control/English&amp;diff=54590&amp;oldid=prev"/>
				<updated>2020-12-15T11:06:01Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://script.spoken-tutorial.org/index.php?title=Embedded-Linux-Device-Driver/C3/Input-and-Output-Control/English&amp;amp;diff=54590&amp;amp;oldid=54578&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Nancyvarkey</name></author>	</entry>

	<entry>
		<id>https://script.spoken-tutorial.org/index.php?title=Embedded-Linux-Device-Driver/C3/Input-and-Output-Control/English&amp;diff=54578&amp;oldid=prev</id>
		<title>Nirmala Venkat: Created page with &quot; {| border=&quot;1&quot; |-  | align=center| '''Visual Cue''' | align=center| '''Narration''' |-  || Slide 1: Welcome slide: | | Welcome to the spoken tutorial on''' Input and Output Co...&quot;</title>
		<link rel="alternate" type="text/html" href="https://script.spoken-tutorial.org/index.php?title=Embedded-Linux-Device-Driver/C3/Input-and-Output-Control/English&amp;diff=54578&amp;oldid=prev"/>
				<updated>2020-12-10T10:18:28Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot; {| border=&amp;quot;1&amp;quot; |-  | align=center| &amp;#039;&amp;#039;&amp;#039;Visual Cue&amp;#039;&amp;#039;&amp;#039; | align=center| &amp;#039;&amp;#039;&amp;#039;Narration&amp;#039;&amp;#039;&amp;#039; |-  || Slide 1: Welcome slide: | | Welcome to the spoken tutorial on&amp;#039;&amp;#039;&amp;#039; Input and Output Co...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| align=center| '''Visual Cue'''&lt;br /&gt;
| align=center| '''Narration'''&lt;br /&gt;
|- &lt;br /&gt;
|| Slide 1:&lt;br /&gt;
Welcome slide:&lt;br /&gt;
| | Welcome to the spoken tutorial on''' Input and Output Control'''&lt;br /&gt;
|- &lt;br /&gt;
|| Slide 2:&lt;br /&gt;
&lt;br /&gt;
Learning objectives:&lt;br /&gt;
|| In this tutorial, we will learn about* '''Ioctl''' function''' '''and&lt;br /&gt;
* Data transfer between userspace and kernel space using '''ioctl''' function&lt;br /&gt;
|- &lt;br /&gt;
|| Slide 3 :&lt;br /&gt;
&lt;br /&gt;
System Requirements:&lt;br /&gt;
|| To record this tutorial, I am using,* VirtualBox 5.2.&lt;br /&gt;
* Ubuntu Linux 18.04 LTS operating system.&lt;br /&gt;
* Linux kernel version 5.0.0-31 generic.&lt;br /&gt;
* gedit text editor.&lt;br /&gt;
|- &lt;br /&gt;
|| Slide 4:&lt;br /&gt;
&lt;br /&gt;
Prerequisites:&lt;br /&gt;
|| To follow this tutorial, you should be familiar with:* C programming language &lt;br /&gt;
* Basics of Linux kernel&lt;br /&gt;
&lt;br /&gt;
If not, then go through the''' C/C++''' and '''Linux''' spoken tutorials on this website.&lt;br /&gt;
|- &lt;br /&gt;
|| Slide 5:&lt;br /&gt;
&lt;br /&gt;
Ioctl (input/output control)&lt;br /&gt;
|| * It is mainly used to handle some specific operations of a device.&lt;br /&gt;
&lt;br /&gt;
* For example, '''ioctl '''function''' '''can be used to rewind a tape drive.&lt;br /&gt;
* By default, the '''kernel''' does not have a '''system call''' for such '''device operations.'''&lt;br /&gt;
|- &lt;br /&gt;
|| Slide 6:&lt;br /&gt;
&lt;br /&gt;
'''IOCTl() - Example'''&lt;br /&gt;
&lt;br /&gt;
|| In this tutorial, we will learn to transfer data to the driver using the '''ioctl '''function'''.'''&lt;br /&gt;
The user program''' test.c''' will send and receive integer data to and from the driver.&lt;br /&gt;
|- &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
Point to the folder and file in '''desktop'''&lt;br /&gt;
Point to the '''files.'''&lt;br /&gt;
|| Go to the''' DeviceDriver folder''' in the '''desktop''' which we have created earlier.&lt;br /&gt;
I have created a directory named '''Ioctl.'''&lt;br /&gt;
I have saved '''simple_driver dot c, Makefile '''and''' test dot c files.'''&lt;br /&gt;
&lt;br /&gt;
I’ll use these files for demonstration.&lt;br /&gt;
|- &lt;br /&gt;
|| Slide 7 :&lt;br /&gt;
&lt;br /&gt;
'''Code files:'''&lt;br /&gt;
|| The files used in this tutorial are available in the '''Code Files '''link on this tutorial page.&lt;br /&gt;
* Please download and extract them&lt;br /&gt;
* Make a copy and then use them while practising&lt;br /&gt;
|- &lt;br /&gt;
|| Open the''' terminal'''&lt;br /&gt;
&lt;br /&gt;
Type &amp;gt;&amp;gt; '''cd Desktop/DeviceDriver/Ioctl'''&lt;br /&gt;
|| Open the terminal by pressing '''ALT+Ctrl+T keys '''simultaneously.&lt;br /&gt;
&lt;br /&gt;
Go to the directory where '''Ioctl '''is saved on your system.&lt;br /&gt;
&lt;br /&gt;
Press '''Enter''' key after every command.&lt;br /&gt;
|- &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
Type &amp;gt;&amp;gt; '''gedit simple_driver.c'''&lt;br /&gt;
|| Type '''gedit space simple_driver dot c.'''&lt;br /&gt;
&lt;br /&gt;
We have already learned the''' open, close, read '''and''' write''' operations on a device'''.'''&lt;br /&gt;
|- &lt;br /&gt;
| | &lt;br /&gt;
| | I have defined the required code to implement the '''ioctl''' functions.&lt;br /&gt;
|- &lt;br /&gt;
|| HIghlight :&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;linux/ioctl.h&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''#define MAGIC 'M'#defineSET_DATA_IOW(MAGIC,1u,int)'''&lt;br /&gt;
&lt;br /&gt;
'''#defineGET_DATA_IOR(MAGIC,2u,int)'''&lt;br /&gt;
|| We have to include the '''ioctl dot h header file.'''&lt;br /&gt;
&lt;br /&gt;
The '''macros''' used in the '''ioctl''' '''functions''' are defined in this '''header file.'''&lt;br /&gt;
'''Write''' and '''Read''' commands are defined with the macros as shown here.&lt;br /&gt;
|- &lt;br /&gt;
|| Highlight&lt;br /&gt;
&lt;br /&gt;
'''#define SET_DATA_IOW(MAGIC,1u,int)'''&lt;br /&gt;
&lt;br /&gt;
'''MAGIC'''&lt;br /&gt;
'''1u'''&lt;br /&gt;
'''Int'''&lt;br /&gt;
|| '''IOW''' specifies the '''write''' command operation.&lt;br /&gt;
&lt;br /&gt;
'''MAGIC''' is an 8-bit '''magic''' number which is unique to this driver.&lt;br /&gt;
&lt;br /&gt;
'''1u '''specifies the unique command number.&lt;br /&gt;
&lt;br /&gt;
It should not be used by any other driver.&lt;br /&gt;
&lt;br /&gt;
'''Int''' represents the data type of the command argument.&lt;br /&gt;
|- &lt;br /&gt;
|| Highlight : '''#define MAGIC 'M''''&lt;br /&gt;
&lt;br /&gt;
'''M'''&lt;br /&gt;
&lt;br /&gt;
https://www.kernel.org/doc/Documentation/ioctl/ioctl-number.txt&lt;br /&gt;
&lt;br /&gt;
|| I have used '''M''' as the '''magic''' number in our driver.&lt;br /&gt;
&lt;br /&gt;
For other '''MAGIC''' numbers, refer to this website.&lt;br /&gt;
|- &lt;br /&gt;
|| Highlight:&lt;br /&gt;
&lt;br /&gt;
static int x = 0;&lt;br /&gt;
&lt;br /&gt;
static int y= 100;&lt;br /&gt;
&lt;br /&gt;
|| I have declared two variables '''x''' and '''y'''.&lt;br /&gt;
&lt;br /&gt;
Data from the user space will be stored in the variable''' x'''.&lt;br /&gt;
&lt;br /&gt;
Similarly, data stored in''' y''' variable is passed to the user space.&lt;br /&gt;
|- &lt;br /&gt;
|| Highlight&lt;br /&gt;
&lt;br /&gt;
static long mydevice_ioctl(struct file *f,unsigned int ioctl_num,unsigned long ioctl_param);&lt;br /&gt;
&lt;br /&gt;
'''.unlocked_ioctl = mydevice_ioctl'''&lt;br /&gt;
&lt;br /&gt;
|| We have to write the''' ioctl function protocol''' at the start of the program.&lt;br /&gt;
&lt;br /&gt;
Add an '''ioctl''' function pointer '''mydevice_ioctl, '''in the '''file operations structure. '''&lt;br /&gt;
|- &lt;br /&gt;
|| Highlight &lt;br /&gt;
&lt;br /&gt;
'''static long mydevice_ioctl(struct file *f,unsigned int ioctl_num,unsigned long ioctl_param)'''&lt;br /&gt;
&lt;br /&gt;
'''f'''&lt;br /&gt;
'''Ioctl_num'''&lt;br /&gt;
'''ioctl_param'''&lt;br /&gt;
|| Let us see the '''ioctl function '''now. &lt;br /&gt;
&lt;br /&gt;
It has three parameters as shown here.&lt;br /&gt;
'''f '''is the '''file descriptor''' of the appropriate''' device file'''.&lt;br /&gt;
'''ioctl_num''' is the '''ioctl command''' that is called from the''' userspace'''.&lt;br /&gt;
'''ioctl_param''' is the argument passed from the '''userspace'''.&lt;br /&gt;
|- &lt;br /&gt;
| | &lt;br /&gt;
| | According to the user''' ioctl function''' commands, the '''switch case''' will be executed.&lt;br /&gt;
|- &lt;br /&gt;
|| HIghlight :&lt;br /&gt;
'''SET_DATA'''&lt;br /&gt;
'''copy_from_user()'''&lt;br /&gt;
| | '''copy_from_user '''will copy the user '''ioctl''' parameter to the '''kernel''' space variable''' x.'''&lt;br /&gt;
|- &lt;br /&gt;
|| HIghlight :&lt;br /&gt;
&lt;br /&gt;
'''GET_DATA'''&lt;br /&gt;
'''copy_to_user()'''&lt;br /&gt;
|| '''Copy_to_user function '''will copy the value of variable y from the '''kernel''' space to the user space.&lt;br /&gt;
Our program is ready with '''ioctl''' function definitions.&lt;br /&gt;
|- &lt;br /&gt;
| | Open the''' terminal.'''&lt;br /&gt;
|| Save and close the file.&lt;br /&gt;
&lt;br /&gt;
Switch back to the terminal.&lt;br /&gt;
|- &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
Type &amp;gt;&amp;gt; gedit '''test.c'''&lt;br /&gt;
|| Let’s open the '''user program.'''&lt;br /&gt;
&lt;br /&gt;
Type''' gedit space test dot c.'''&lt;br /&gt;
|- &lt;br /&gt;
|| Highlight &lt;br /&gt;
&lt;br /&gt;
'''#define MAGIC 'M''''&lt;br /&gt;
&lt;br /&gt;
'''#define SET_DATA _IOW(MAGIC,1u,int)'''&lt;br /&gt;
&lt;br /&gt;
'''#define GET_DATA _IOR(MAGIC,2u,int)'''&lt;br /&gt;
|| This program will pass the arguments and commands to the driver.&lt;br /&gt;
&lt;br /&gt;
We have to define these commands similar to the '''driver commands. '''&lt;br /&gt;
&lt;br /&gt;
We will use them in the '''ioctl '''function'''.'''&lt;br /&gt;
|- &lt;br /&gt;
|| Highlight&lt;br /&gt;
&lt;br /&gt;
'''Static unsigned int g = 0;'''&lt;br /&gt;
&lt;br /&gt;
'''Static unsigned int h = 0;'''&lt;br /&gt;
|| The integer type variables '''g '''and''' h''' are defined as shown here.&lt;br /&gt;
&lt;br /&gt;
We will use them later on in this code.&lt;br /&gt;
|- &lt;br /&gt;
|| Highlight : '''open()'''&lt;br /&gt;
&lt;br /&gt;
'''if(fd &amp;lt; 0)'''&lt;br /&gt;
&lt;br /&gt;
'''File open operation failed.'''&lt;br /&gt;
|| '''open '''function opens the '''new_device'''.&lt;br /&gt;
&lt;br /&gt;
If it fails then it will display the failure message and terminate the program.&lt;br /&gt;
|- &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
Highlight &lt;br /&gt;
&lt;br /&gt;
ioctl(fd, SET_DATA,&amp;amp;g)&amp;lt;0)&lt;br /&gt;
&lt;br /&gt;
'''ioctl() function.'''&lt;br /&gt;
|| The user''' ioctl function''' will internally call the '''driver’s ioctl function.'''&lt;br /&gt;
&lt;br /&gt;
You can use the''' ioctl system call '''only after opening the '''device file.'''&lt;br /&gt;
|- &lt;br /&gt;
|| HIghlight:&lt;br /&gt;
&lt;br /&gt;
'''fd'''&lt;br /&gt;
'''SET_DATA'''&lt;br /&gt;
'''g'''&lt;br /&gt;
|| The first parameter is the device '''file descriptor number.'''&lt;br /&gt;
&lt;br /&gt;
And the second parameter is the command''' '''that needs to be executed.&lt;br /&gt;
&lt;br /&gt;
The third parameter is the argument to the driver'''.'''&lt;br /&gt;
&lt;br /&gt;
It will display the negative value on failure.&lt;br /&gt;
|- &lt;br /&gt;
|| Highlight&lt;br /&gt;
&lt;br /&gt;
'''scanf()'''&lt;br /&gt;
'''GET_DATA, h'''&lt;br /&gt;
'''ioctl()'''&lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
We will pass any integer value at runtime to a '''driver''' using the argument''' g.'''&lt;br /&gt;
Similarly, we pass the '''GET_DATA''' command to '''ioctl '''function'''.'''&lt;br /&gt;
&lt;br /&gt;
After execution of this''' '''function, we will get the data from the '''driver''' in '''h '''variable.&lt;br /&gt;
|- &lt;br /&gt;
| | HIghlight '''close()'''&lt;br /&gt;
| | The '''close system call '''will close the''' new_device '''file.&lt;br /&gt;
|- &lt;br /&gt;
|| Highlight &lt;br /&gt;
&lt;br /&gt;
the '''printf messages.'''&lt;br /&gt;
| | The printf messages will display the respective information on the terminal.&lt;br /&gt;
|- &lt;br /&gt;
|| Save the program.&lt;br /&gt;
&lt;br /&gt;
Open the '''terminal'''&lt;br /&gt;
&lt;br /&gt;
Type &amp;gt;&amp;gt; '''clear'''&lt;br /&gt;
|| Save and close the file.&lt;br /&gt;
&lt;br /&gt;
Switch back to the terminal. &lt;br /&gt;
&lt;br /&gt;
Clear the screen.&lt;br /&gt;
|- &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
Type &amp;gt;&amp;gt; gedit '''Makefile'''&lt;br /&gt;
Save a '''file'''.&lt;br /&gt;
Click on the '''close button.'''&lt;br /&gt;
|| Let us create a '''Makefile''' to compile our '''driver'''.&lt;br /&gt;
&lt;br /&gt;
Type '''gedit space Makefile.'''&lt;br /&gt;
&lt;br /&gt;
Copy the code as shown or you can use downloaded '''Makefile'''.&lt;br /&gt;
&lt;br /&gt;
Close the file and switch back to the terminal.&lt;br /&gt;
|- &lt;br /&gt;
|| Type &amp;gt;&amp;gt; '''make all'''&lt;br /&gt;
&lt;br /&gt;
|| Now, let us '''compile''' the '''driver'''. &lt;br /&gt;
&lt;br /&gt;
Type''' make space all.'''&lt;br /&gt;
|- &lt;br /&gt;
| | Type &amp;gt;&amp;gt; '''clear'''&lt;br /&gt;
| | Clear the screen.&lt;br /&gt;
|- &lt;br /&gt;
|| Type &amp;gt;&amp;gt; '''sudo su '''&lt;br /&gt;
&lt;br /&gt;
Type &amp;gt;&amp;gt;''' clear'''&lt;br /&gt;
| | Type '''sudo space su '''to be a '''superuser''' and type the system '''password'''.&lt;br /&gt;
|- &lt;br /&gt;
|| Type &amp;gt;&amp;gt; '''insmod simple_driver.ko '''&lt;br /&gt;
&lt;br /&gt;
|| Let’s now load the driver'''.'''&lt;br /&gt;
&lt;br /&gt;
Type '''insmod space simple_driver dot ko '''&lt;br /&gt;
|- &lt;br /&gt;
| | Type &amp;gt;&amp;gt; '''clear'''&lt;br /&gt;
| | Clear the screen.&lt;br /&gt;
|- &lt;br /&gt;
|| &lt;br /&gt;
&lt;br /&gt;
Type &amp;gt;&amp;gt;''' gcc -c test.c'''&lt;br /&gt;
&lt;br /&gt;
Type &amp;gt;&amp;gt; '''gcc -o test.out test.o'''&lt;br /&gt;
&lt;br /&gt;
Type &amp;gt;&amp;gt; '''./test.out'''&lt;br /&gt;
&lt;br /&gt;
|| Let’s '''compile''' and execute the '''user program.'''&lt;br /&gt;
&lt;br /&gt;
Type '''gcc space hyphen c space test dot c.'''&lt;br /&gt;
&lt;br /&gt;
Type '''gcc space hyphen o space test dot out space test dot o.'''&lt;br /&gt;
&lt;br /&gt;
Type '''dot slash test dot out. '''&lt;br /&gt;
|- &lt;br /&gt;
|| Highlight &lt;br /&gt;
the respective '''printk''' message&lt;br /&gt;
&lt;br /&gt;
Type the '''integer value '''&lt;br /&gt;
&lt;br /&gt;
The '''printk messages.'''&lt;br /&gt;
|| The output message shows that the device is opened successfully.&lt;br /&gt;
&lt;br /&gt;
Now, type the integer value that you want to pass to the driver.&lt;br /&gt;
&lt;br /&gt;
I’ll type 500.&lt;br /&gt;
&lt;br /&gt;
The output shows the data copied from the '''driver''' to '''user space '''variable''' h'''.&lt;br /&gt;
The print message shows that the device is closed by '''close '''system call.''' '''&lt;br /&gt;
|- &lt;br /&gt;
| | Type &amp;gt;&amp;gt;''' clear'''&lt;br /&gt;
| | Clear the screen.&lt;br /&gt;
|- &lt;br /&gt;
|| Highlight&lt;br /&gt;
&lt;br /&gt;
Type &amp;gt;&amp;gt;''' dmesg | grep simple_driver'''&lt;br /&gt;
Highlight :&lt;br /&gt;
Respective''' printk messages.'''&lt;br /&gt;
Type &amp;gt;&amp;gt;''' clear'''&lt;br /&gt;
|| Type the '''dmesg command '''as shown here.&lt;br /&gt;
&lt;br /&gt;
The output shows that the''' ioctl function''' of the '''driver''' is executed.&lt;br /&gt;
&lt;br /&gt;
It shows the data from the '''user space '''is copied to the''' kernel space driver variable x.'''&lt;br /&gt;
&lt;br /&gt;
Clear the screen.&lt;br /&gt;
|- &lt;br /&gt;
|| Type '''rmmod simple_driver.ko'''&lt;br /&gt;
&lt;br /&gt;
Type &amp;gt;&amp;gt;''' clear'''&lt;br /&gt;
|| Let us unload the '''driver'''.&lt;br /&gt;
&lt;br /&gt;
Type '''rmmod simple_driver.ko'''&lt;br /&gt;
&lt;br /&gt;
Clear the screen. Type exit.&lt;br /&gt;
|- &lt;br /&gt;
|| Type:&lt;br /&gt;
&lt;br /&gt;
'''cd /usr/include/asm-generic/'''&lt;br /&gt;
&lt;br /&gt;
'''Cat ioctl.h'''&lt;br /&gt;
&lt;br /&gt;
'''Highlight'''&lt;br /&gt;
|| In this tutorial, we have discussed IOW and IOR macros.&lt;br /&gt;
&lt;br /&gt;
To know more about other commands, go to the directory '''asm hyphen generic '''as shown:&lt;br /&gt;
&lt;br /&gt;
Let us open the '''ioctl.h''' file.&lt;br /&gt;
&lt;br /&gt;
Type '''cat ioctl.h'''&lt;br /&gt;
&lt;br /&gt;
You can get more details about other commands from the '''ioctl.h file '''&lt;br /&gt;
|- &lt;br /&gt;
| | &lt;br /&gt;
| | With this we come to the end of this tutorial. Let us summarize.&lt;br /&gt;
|- &lt;br /&gt;
|| Slide 8 :&lt;br /&gt;
&lt;br /&gt;
Summary:&lt;br /&gt;
|| In this tutorial, we learnt* Ioctl function()&lt;br /&gt;
* Data transfer between user space and kernel space using '''ioctl''' function&lt;br /&gt;
|- &lt;br /&gt;
|| Slide 9 :&lt;br /&gt;
&lt;br /&gt;
Assignment :&lt;br /&gt;
|| As an assignment.# Compile and load '''simple_driver dot c'''&lt;br /&gt;
# Compile and execute '''test.c'''&lt;br /&gt;
# Pass a different integer value as per your choice&lt;br /&gt;
# See the output using '''dmesg command.'''&lt;br /&gt;
|- &lt;br /&gt;
|| Slide 10:&lt;br /&gt;
&lt;br /&gt;
About Spoken Tutorial Project:&lt;br /&gt;
|| * The video at the following link summarizes the Spoken Tutorial project.&lt;br /&gt;
* Please download and watch it.&lt;br /&gt;
|- &lt;br /&gt;
|| Slide 11:&lt;br /&gt;
&lt;br /&gt;
Spoken Tutorial workshops :&lt;br /&gt;
|| The Spoken Tutorial Project Team:* conducts workshops and&lt;br /&gt;
* gives certificates.&lt;br /&gt;
&lt;br /&gt;
For more details, please write to us.&lt;br /&gt;
|- &lt;br /&gt;
|| Slide 12:&lt;br /&gt;
&lt;br /&gt;
Forum questions :&lt;br /&gt;
|| * Please post your timed queries in this forum&lt;br /&gt;
|- &lt;br /&gt;
|| Slide 13:&lt;br /&gt;
&lt;br /&gt;
Forum for specific questions :&lt;br /&gt;
|| * Do you have any general or technical questions on Embedded Linux Device Driver?&lt;br /&gt;
* Please visit the FOSSEE forum and post your question.&lt;br /&gt;
|- &lt;br /&gt;
|| Slide 14:&lt;br /&gt;
&lt;br /&gt;
Acknowledgment:&lt;br /&gt;
| | The Spoken Tutorial Project is funded by MHRD, Government of India.&lt;br /&gt;
|- &lt;br /&gt;
|| Slide 15:&lt;br /&gt;
&lt;br /&gt;
Thank you slide:&lt;br /&gt;
|| This tutorial has been contributed by FOSSEE and Spoken Tutorial Project, IIT Bombay. &lt;br /&gt;
&lt;br /&gt;
This is usha signing off.&lt;br /&gt;
&lt;br /&gt;
Thanks for watching.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nirmala Venkat</name></author>	</entry>

	</feed>