As I discussed in various episodes and articles in the past there are various ways via which you can communicate from Kernel space to User space and vice-versa. Some of the most popular ways are /procfs, /sysfs, ioctl(), netlink sockets, character driver and so on. Each have their own distinctive advantages and limitations. While /procfs is highly handy to get/set (or read/write) Kernel module configuration parameters, its not suited for any continuous stream like data for example such as network packet capture.
Similarly ioctl() is suited for programmatic way of reading/writing configuration parameters and it lacks the advantage which /procfs provides and so on.
Refer my other video series on:
Linux Kernel /proc Interface category articles ↗
Linux Kernel /sysfs Interface category articles ↗
So here is my detailed YouTube video on the same and overall various aspects of Kernel development and software architecture.
I also conduct sessions/classes on Systems and Network Software Programming, Linux Kernel Programming and Architecture. If you are interested, click HERE for more details.
If you have any queries or anything to discuss further kindly feel free to contact me.