HOMEVIDEOSCOURSESSTUDENTSSPONSORSDONATIONSEVENTSTUTORIALSLINKSNEWSCONTACT


VIDEOS 》 Linux ioctl() API interface

Refer:
net-tools (ioctl APIs - user-space side):
net-tools sourceforge.net - http://net-tools.sourceforge.net
net-tools sourceforge.net Project - https://sourceforge.net/projects/net-tools
net-tools Linux Foundation Wiki - https://wiki.linuxfoundation.org/networking/net-tools
net-tools Git source - https://sourceforge.net/p/net-tools/code/ci/master/tree
ifconfig.c - https://sourceforge.net/p/net-tools/code/ci/master/tree/ifconfig.c

Refer:
Wiki:
Carrier grade - https://en.wikipedia.org/wiki/Carrier_grade
Carrier Grade Linux - https://en.wikipedia.org/wiki/Carrier_Grade_Linux
High Availability (HA) - https://en.wikipedia.org/wiki/High_availability
Redundancy(engineering) - https://en.wikipedia.org/wiki/Redundancy_(engineering)

Kernel Source (ioctl APIs - kernel-space side):
/net/core/dev_ioctl.c - http://elixir.free-electrons.com/linux/latest/source/net/core/dev_ioctl.c
/net/core/dev.c - http://elixir.free-electrons.com/linux/latest/source/net/core/dev.c
The Linux Channel video series:
Linux Kernel net_device data-structure - http://the-linux-channel.the-toffee-project.org/index.php?page=41-videos-linux-kernel-net-device-data-structure
Linux Kernel Networking Sub-system - http://the-linux-channel.the-toffee-project.org/index.php?page=45-videos-linux-kernel-networking-sub-system
Linux Kernel /proc Interface - http://the-linux-channel.the-toffee-project.org/index.php?page=106-videos-linux-kernel-proc-interface
Linux Kernel sk_buff data-structure - Episode-1 to Episode-10 - http://the-linux-channel.the-toffee-project.org/index.php?page=47-videos-linux-kernel-sk-buff-data-structure
Linux Kernel sk_buff data-structure - Episode-11 to Episode-18 - http://the-linux-channel.the-toffee-project.org/index.php?page=111-videos-linux-kernel-sk-buff-data-structure

Download this episode my entire kernel module sample code, make file, clean script HERE.

Refer:
Device Drivers, Part 9: I/O Control in Linux - by Anil Kumar Pugalia <email_at_sarika-pugs_dot_com> - http://opensourceforu.com/2011/08/io-control-in-linux/
The Linux Kernel Module Programming Guide - Chapter 7. Talking To Device Files - http://tldp.org/LDP/lkmpg/2.6/html/x892.html
(NOTE: Sample example source-code mentioned here will not work as it is in newer kernels. It needs porting.)

Refer:
/include/linux/uaccess.h - copy_from_user(), copy_to_user() - http://elixir.free-electrons.com/linux/latest/source/include/linux/uaccess.h
/arch/x86/include/asm/uaccess_32.h - raw_copy_from_user(), raw_copy_to_user() [x86 32-bit] http://elixir.free-electrons.com/linux/latest/source/arch/x86/include/asm/uaccess_32.h
/arch/x86/include/asm/uaccess_64.h - raw_copy_from_user(), raw_copy_to_user() [x86 64-bit] http://elixir.free-electrons.com/linux/latest/source/arch/x86/include/asm/uaccess_64.h
/arch/arm/include/asm/uaccess.h - raw_copy_from_user(), raw_copy_to_user() [arm] http://elixir.free-electrons.com/linux/latest/source/arch/arm/include/asm/uaccess.h
/arch/arm64/include/asm/uaccess.h- raw_copy_from_user(), raw_copy_to_user() [arm 64-bit] http://elixir.free-electrons.com/linux/latest/source/arch/arm64/include/asm/uaccess.h

As discussed in the video (Episode 4), we cannot use memcpy() to communicate between user-space applications (processes). Since each process has its own virtual memory space. Instead we need to use standard Linux predefined IPC (for example: sockets, message queues, pipes, signals and so on), which in turn built via APIs such as: copy_from_user() and copy_to_user().
copy_from_user() and copy_to_user()
Notice: copy_from_user() and copy_to_user() looks similar to memcpy() in terms of their function arguments.
copy_from_user() and copy_to_user() vs memcpy()
Here is the Kernel source API flow of the copy_from_user() and copy_to_user() APIs. As discussed in the video, eventually it transitions from architecture (or platform) independent code to the platform (or hardware/CPU) dependent code:
copy_from_user() and copy_to_user() Kernel Source API path



Suggested Topics:


Video Episodes :: Linux Kernel programming

Linux ioctl() API interface ↗
Saturday' 13-Mar-2021
Watch detailed videos and read topics on Linux Kernel Programming and Linux ioctl() API interface

Linux Operating System - User-space Processes ↗
Thursday' 19-Oct-2023

Linux Kernel /proc Interface ↗
Thursday' 19-Oct-2023
/proc is one of the most popular kernel to user-space interface which you can leverage to add an interface to your Kernel code such as Kernel modules, Kernel Device Drivers, etc. Personally I prefer /proc interface than other alternatives such as /sysfs, ioctl() and so on for my personal Kernel modules/stack. So here is my detailed multi-episode Youtube video series on /sysfs Interface. I also conduct sessions/classes on Systems and Network software programming and architecture.

Linux Kernel FileSystems Subsystem ↗
Sunday' 29-Oct-2023

Linux Kernel Compilation ↗
Thursday' 19-Oct-2023

Linux Kernel - Containers and Namespaces ↗
Saturday' 13-Mar-2021

Linux Kernel /sysfs Interface ↗
Saturday' 14-May-2022
/sysfs is one of the most popular kernel to user-space interface which you can leverage to add an interface to your Kernel code such as Kernel modules, Kernel Device Drivers, etc. Although personally I prefer /proc interface than other alternatives such as /sysfs, ioctl() and so on for my personal Kernel modules/stack. So here is my detailed multi-episode Youtube video series on /sysfs Interface.

Linux Kernel vs User-space - Library APIs - Linux Kernel Programming ↗
Friday' 27-Oct-2023
One of the important aspects a beginner who is into Linux Kernel space systems software development has to understand is that unlike user-space C/C++ programming, where you can freely include any library APIs via respective #include files (which are dynamically linked during run-time via those /lib .so files), in the case of Kernel space programming, these library APIs are written within the Kernel source itself. These are the fundamental APIs which we commonly use, such as memcpy(), memcmp(), strlen(), strcpy(), strcpy() and so on. So here is my detailed Youtube video episode on the same with live demo, walk-through and examples.

What is purpose of Kernel Development - Example SMOAD Networks SDWAN Orchestrator Firewall Kernel Engine ↗
Monday' 18-Jul-2022
Often aspiring students may have this question, that what is the purpose of Linux Kernel Development. Since Linux Kernel is very mature and it has almost everything one would need. Usually, we need custom kernel development in the case of any new driver development for new upcoming hardware. And this happens on and on. But at times we may also come across few features/modules/components which are already provided by the Linux Kernel which are not adequate or atleast not the way we exactly intended to use. So, this is the real-world example, sometimes no matter what Linux Kernel provides as a part of stock Kernel/OS features, sometimes we have to write our own custom kernel stack or module(s) which can specifically cater our exact needs.

Linux Kernel Programming ↗
Saturday' 13-Mar-2021

Linux Kernel Architecture ↗
Wednesday' 18-May-2022

Linux Kernel Programming - Device Drivers ↗
Saturday' 13-Mar-2021
Watch detailed videos and read topics on Linux Kernel Programming - Device Drivers

Join The Linux Channel :: Facebook Group ↗

Visit The Linux Channel :: on Youtube ↗


💗 Help shape the future: Sponsor/Donate


Recommended Topics:
Featured Video:
Watch on Youtube - [103//0] x271 IP Multi-homing | whatever happened to SCTP and now MPTCP - Part 2 ↗

libpcap Library | Linux User-space Network Stack Development ↗
Sunday' 06-Aug-2023
libpcap is a very popular user-space networking library, with which you can capture and or generate packets. libpcap is the underlying framework for many popular packet capture tools such as tcpdump, Wireshark and so on. In fact libpcap is a part of tcpdump project. But besides just using it as a packet capture tool, you can use libpcap in various applications, such as user-space based networking stack development, etc. In some cases libpcap is yet another alternative to raw-sockets and tun/tap interfaces.

The Linux Channel :: Sponsors ↗
Monday' 30-May-2022
Here is a list of all The Linux Channel sponsors/donors (individual/companies).

Inline Programming | Assembly | Scripts | php, python, shell, etc | Rust in Linux Kernel ↗
Friday' 12-May-2023
Inline programming is a technique where code statements are included directly in the text of a program, instead of being contained in separate files or modules. Inline programming can be useful for small or simple tasks, as it can eliminate the need for a separate script or function. One common example of inline programming is using JavaScripts, Php, etc in HTML documents to create dynamic content. Similarly in Linux Kernel we can find lot of instances where we can find inline programming such as inline assembly and now Rust within the Kernel source.

Linux Kernel /sysfs Interface ↗
Saturday' 14-May-2022
/sysfs is one of the most popular kernel to user-space interface which you can leverage to add an interface to your Kernel code such as Kernel modules, Kernel Device Drivers, etc. Although personally I prefer /proc interface than other alternatives such as /sysfs, ioctl() and so on for my personal Kernel modules/stack. So here is my detailed multi-episode Youtube video series on /sysfs Interface.

Rockchip ROC-RK3566-PC from Firefly | OpenWRT ↗
Thursday' 19-Oct-2023
Here is my multi-episode video series on evaluation of Rockchip ROC-RK3566-PC from Firefly with stock OpenWRT firmware.

What is purpose of Kernel Development - Example SMOAD Networks SDWAN Orchestrator Firewall Kernel Engine ↗
Monday' 18-Jul-2022
Often aspiring students may have this question, that what is the purpose of Linux Kernel Development. Since Linux Kernel is very mature and it has almost everything one would need. Usually, we need custom kernel development in the case of any new driver development for new upcoming hardware. And this happens on and on. But at times we may also come across few features/modules/components which are already provided by the Linux Kernel which are not adequate or atleast not the way we exactly intended to use. So, this is the real-world example, sometimes no matter what Linux Kernel provides as a part of stock Kernel/OS features, sometimes we have to write our own custom kernel stack or module(s) which can specifically cater our exact needs.

Linux Kernel Driver Device Trees ↗
Tuesday' 17-Jan-2023
The Linux kernel is the backbone of the Linux operating system. A device tree is a hierarchical tree structure that describes the various devices that are present in a system, including their properties and relationships to one another. The device tree is used by the Linux kernel to identify and initialize the different devices on a system, and to provide a consistent interface for interacting with them.

Linux Kernel vs User-space - Library APIs - Linux Kernel Programming ↗
Friday' 27-Oct-2023
One of the important aspects a beginner who is into Linux Kernel space systems software development has to understand is that unlike user-space C/C++ programming, where you can freely include any library APIs via respective #include files (which are dynamically linked during run-time via those /lib .so files), in the case of Kernel space programming, these library APIs are written within the Kernel source itself. These are the fundamental APIs which we commonly use, such as memcpy(), memcmp(), strlen(), strcpy(), strcpy() and so on. So here is my detailed Youtube video episode on the same with live demo, walk-through and examples.

Porting Sample libpcap C code to Raw Sockets | User-space Network Stack Framework ↗
Monday' 04-Sep-2023
Here is my multi-episode video series where I demonstrate how you can port the my libpcap sample code, discussed in the earlier episode to raw-socket. This code should further help you to design and architect your own user-space Network stack on top of this fundamental framework.

Roadmap - How to become Systems Software Developer ↗
Friday' 13-May-2022
When you are at the beginning of your career or a student, and aspire to become a software developer, one of the avenues to choose is to become a hard-core Systems Software Developer. However it is easier said than done, since there are many aspects to it as you explore further. As a part of systems developer, you can get into core kernel space developer, kernel device drivers developer, embedded developer and get into things like board bring-up, porting, etc, or can become a user-space systems programmer, and so on. So here is my detailed multi-episode Youtube video series on Roadmap - How to become Systems Software Developer.


Trending Video:
Watch on Youtube - [387//0] x263 Inline Programming | Assembly | Scripts | php, python, shell, etc | Rust in Linux Kernel ↗

Linux Kernel Tasklets | Big-Picture | vs User-Space pthreads ↗
Saturday' 01-Jan-2022
Linux Kernel Tasklets and Work queues are somewhat similar to user-space process threads in terms of the functionality and of course not in terms of its operation or its internal architecture. You can schedule Tasklet(s) for a registered function to run later. So typically the Interrupt top half (of the interrupt handler) performs a small amount of critical work (not to be confused with critical section), and then schedules such as a tasklet to execute later at the bottom half.



Recommended Video:
Watch on Youtube - [4501//0] Linux RAW Sockets - Generate Layer-2 STP Packets ↗