Difference between revisions of "Embedded-Linux-Device-Driver/C2/Simple-Loadable-Module/English"
Nancyvarkey (Talk | contribs) |
|||
Line 102: | Line 102: | ||
| style="border:1pt solid #000000;padding:0.176cm;"|Press '''Alt+Ctrl+T''' keys | | style="border:1pt solid #000000;padding:0.176cm;"|Press '''Alt+Ctrl+T''' keys | ||
| style="border:1pt solid #000000;padding:0.176cm;"| Open the''' terminal''' by pressing '''Alt+Ctrl+T''' keys simultaneously. | | style="border:1pt solid #000000;padding:0.176cm;"| Open the''' terminal''' by pressing '''Alt+Ctrl+T''' keys simultaneously. | ||
+ | |||
+ | Go to the folder where ''' simple_module dot c ''' is saved. | ||
+ | |||
Press the '''Enter''' key after every '''command'''. | Press the '''Enter''' key after every '''command'''. | ||
+ | |||
|- | |- |
Revision as of 17:39, 17 March 2020
Visual cue | Narration |
Slide 1:
Welcome slide: |
Welcome to the spoken tutorial on Simple Loadable Module. |
Slide 2:
Learning objectives:
|
In this tutorial, we will learn how to,
|
Slide 3:
System Requirements:
|
To record this tutorial, I am using,
|
Slide 4:
Prerequisites: To follow this tutorial, you should be familiar with:
|
To follow this tutorial, you should be familiar with:
|
Slide 5:
Gedit Installation:
|
gedit Installation:
|
Slide 6:
What is a kernel module? |
What is a kernel module?
|
Narration only | I’ll start with a simple example to explain how to create a module. |
Point to the folder and file in desktop | I have saved a file simple_module dot c in a folder DeviceDriver in Desktop. |
Slide |
Please download the file simple_module dot c from the Code files link of this tutorial. Make use of this file while practising. Remember the file path. Let us open this file. |
Press Alt+Ctrl+T keys | Open the terminal by pressing Alt+Ctrl+T keys simultaneously.
Go to the folder where simple_module dot c is saved.
|
Type gedit simple_module dot c and press Enter. | Type gedit simple_module dot c |
Let us understand the code now. | |
Show the program
Highlight <linux/init.h> |
At the start of the program, there are some header files.
Init dot h file used to start the init process. |
Highlight <linux/module.h> | The module dot h file contains functions related to the modules. |
Highlight <linux/kernel.h> | The kernel dot h file contains functions such as printk. |
Highlight MODULE_LICENSE(“GPL”)
Highlight GPL |
Next line of the code is about GPL.
GPL means GNU Public License. It is otherwise called as GNU, which is a free and open-source license. |
Highlight MODULE_AUTHOR | You can give the author name for your module using this macro as shown here. |
Highlight MODULE_DESCRIPTION | You can simply describe your module using this macro.
I have given the description as “First Linux kernel module”. |
Highlight static int init_func(void) | The init function will execute when a module is loaded into the kernel.
So it is called as an initialization function of a module. If this function fails then the error will be returned. |
Highlight return(0) | It will return 0 to the kernel on successful execution.
Initialization function prints a simple message and return zero. |
Highlight module_init() | The module init macro is used to register the init function. |
Highlight void exit_func (void) | The exit function will execute when the module is unloaded from the kernel.
It is mostly used to cleanup the resources acquired by the module The exit function will undo whatever the init function did. |
Highlight module_exit() | The module underscore exit macro is used to register the exit function. |
Highlight printk | In kernel programming, printk is used as a printing function.
It is similar to printf function in C programming. Using this function, string data will get loaded in the kernel log buffer. |
Highlight KERN_INFO | printk has an optional prefix string, Loglevel such as KERN underscore INFO.
Loglevel specifies the type of message being sent to the kernel message log. KERN underscore INFO is used for informational messages. For more log levels, go through the Additional reading material link of this tutorial. |
Press >> Ctrl + S
Click on close option. |
Press Ctrl + S keys to save the program .
Close the file. |
Switch back to the terminal. | Switch back to the terminal. |
Let us compile the code. | |
Type >> gedit Makefile
Highlight the makefile Press Enter |
For that, we have to create a Makefile.
Type gedit Makefile The Makefile is a special file containing shell commands. Press Enter. |
narration | Create a Makefile where you have saved the simple_module dot c. |
Copy paste the makefile content | Type the code as shown. |
Highlight obj-m
Highlight simple_module.o |
The obj hyphen m variable tells the kernel Makefile that this module needs to be compiled. |
Highlight all: | When you run the make all command, then commands under all section will be executed. |
Highlight clean: | If you run the make clean command, it executes commands under the clean section. |
Highlight -C | Using hyphen C, we are running make command inside the kernel source directory. |
Highlight uname -r | As you know, uname hyphen r finds the current Linux kernel version of a system. |
Highlight (PWD)
Highlight M=$(PWD) |
PWD means the present working directory.
This option tells the kernel makefile that the source code for the driver is in PWD. |
Highlight modules | The word modules tell the kernel makefile to build the modules.
But it will not build the complete kernel source code. |
Highlight clean | The word clean tells the kernel makefile to clean the generated object files. |
Press >> Ctrl + S
Click on the close. |
Save the file and close the editor. |
Open the terminal | Switch back to the terminal. |
Type >> make all | Let us compile the program.
Type make space all. |
Type ls and Press Enter
Highlight ls Show the output |
Now type ls.
This command lists the files in the current directory. Here, you can see the number of files created in this directory. |
Highlight module.symvers | The module.symvers file contains a list of all symbols
These symbols are exported from the kernel build. |
Highlight mod.c | The mod.c file contains information about the module. |
Highlight mod.o | Mod.o file is the object file resulting from the compilation of the mod.c file. |
Highlight .o | This object file is created from the compilation of the module source file. |
Highlight modules.order | It will list out the order in which the compilation and creation of the .ko file takes place. |
Highlight .ko | This is the final kernel module binary that is loaded into the kernel. |
Type >> clear | Clear the screen |
Type >> modinfo simple_module.ko
Press Enter Highlight modinfo |
Let us see the details of a module.
Type modinfo space simple_module dot ko. This command displays the information about the Linux kernel module. |
Highlight filename | The filename field contains an absolute path to the .ko kernel object file. |
Highlight description | This field displays a short description of a module. |
Highlight author, license | Author field shows author and license field shows the license of the module. |
Highlight srcversion | The srcversion field contains the source code version used to compile a module.
It is calculated automatically at build time. |
Highlight depends | The depends field contains all modules on which this module depends.
It is shown empty here as this module does not depend on any other module. |
Highlight retpoline | Retpoline field indicates that the module is compiled with retpoline method.
Modules must also be compiled with a retpoline-aware compiler. Otherwise the kernel can be vulnerable. Retpoline technique protects the kernel from hackers' attacks. |
Highlight name | The name field contains the name of a module. |
Highlight vermagic | This field shows the version magic number of a module.
This version magic number is used while loading the kernel module. The version magic number of module and current kernel version should be the same. Otherwise it will fail to load in the current kernel. |
Type >> make clean
Press Enter |
Type make space clean.
This command removes all object files that are created after the compilation. |
Type >> ls | Type ls.
Now there are no object files. |
Type >> clear
Press Enter. |
Clear the screen. |
Type >> exit
Press Enter |
Close the terminal. |
Slide 6:
Summary: |
In this tutorial, we learned how to
|
Slide 7:
Assignment: |
As an assignment,
|
Slide 8:
About Spoken Tutorial Project: |
The video at the following link summarizes the Spoken Tutorial project.
Please download and watch it. |
Slide 9:
Spoken Tutorial workshops: |
The Spoken Tutorial Project Team conducts workshops and gives certificates.
For more details, please write to us. |
Slide 10:
Forum questions: |
|
Slide 11:
Forum for specific questions: |
|
Slide 12:
Forum for specific questions: |
|
Slide 13:
Acknowledgment: |
Spoken Tutorial project is funded by MHRD, Government of India. |
Slide 14:
Thank you slide: |
This tutorial has been contributed by FOSSEE and Spoken Tutorial Project, IIT Bombay.
This is Mayuri Panchakshari signing off. Thanks for watching. |