Использование linux / types.h в пользовательских программах или stdint.h в коде модуля драйвера ... это имеет значение?

m разработка модуля драйвера устройства и связанных пользовательских библиотек для обработки вызовов ioctl (). Библиотека берет соответствующую информацию и помещает ее в структуру, которая передается в модуль драйвера и распаковывается там, а затем обрабатывается (I 'Я пропускаю много шагов, но этоОбщая идея).

Некоторые данные, передаваемые через структуру через ioctl (), имеют тип uint32_t. Я'Мы обнаружили, что этот тип определен в stdint.h И linux / types.h. Пока ямы использовали linux / types.h для определения этого значения, в том числе в пользовательских библиотеках. Но я понимаю, что неправильно использовать библиотеки linux / *. H в пространстве пользователя, поэтому, если я удаляю их и вместо этого использую stdint.h, тогда, когда мой модуль драйвера включает определение структуры, он должен будет включать stdint.h также.

Мне кажется, что цель linux / types.h - определить типы в файлах ядра, поэтому яЯ не уверен, означает ли это, что использование stdint.h - плохая идея. Я также обнаружил, что когда TRYING использует stdint.h в моем модуле драйвера, я получаю ошибки компиляции о переопределениях, которые выиграли 'Я не могу уйти, даже если я заменю все экземпляры linux / types.h на stdint.h (и поставлю его поверх порядка включения).

Soo ....

Плохо ли использовать linux / *. H, включенный в код пользовательского пространства?Это плохая идея использовать stdint.h в коде пространства ядра?Если ответы на оба вопроса - «да», то как мне справиться с ситуацией, когда структура, содержащая uint32_t, совместно используется как пользовательской библиотекой, так и модулем драйвера?

Благодарю.

Ответы на вопрос(2)

Ваш ответ на вопрос