TransWikia.com

Хедеры для модуля ядра

Stack Overflow на русском Asked by k-morozov on December 26, 2021

В Vim написал простой модуль для символьного устройства. Пробую перейти на VS code – не находит хедеры.

#include <linux/module.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/cdev.h>

Начиная с linux/uaccess.h ничего не видит. JSON VS code:

"includePath": [
                "${workspaceFolder}/**"
            ]

И вот мой makefile:

NAME = chrdev
obj-m += ${NAME}.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
load:
    sudo insmod ${NAME}.ko
    sudo dmesg -c
unload:
    sudo rmmod ${NAME}.ko
    sudo dmesg -c

Дело в том, что сборка отрабатывает. Но сам VS code не видит некоторые хедеры – что угнетает. Как это починить?

One Answer

Все хидеры, которые начинаются с "linux/..." - это хидеры для сборки ядра. Вы ведь написали модуль ядра ? Тогда он должен иметь доступ к символическим именам в ядре, которые определяются в ядерных хидерах.

На самом деле, существует целая технология (выражаясь современным языком - фреймворк) для сборки моlулей ядра - kbuild ). Но это отдельный разговор. В кратце - тут: http://dmilvdv.narod.ru/Translate/ELSDD/elsdd_building_kernel.html

Есть очень хорошая серия статей про разработку модулей ядра. Автор Олег Цилюрик. Посмотрите, там прямо в первой описывается, как собрать модуль в простейшем случае:

https://www.ibm.com/developerworks/ru/library/l-linux_kernel_01/index.html

Более подробно этот процесс описан здесь:

https://help.ubuntu.ru/wiki/%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_%D1%8F%D0%B4%D1%80%D0%B0

Answered by Sergey on December 26, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP