Nano Hash - криптовалюты, майнинг, программирование

Выполнение ioctl из пространства ядра

Я пишу драйвер ядра, которому нужно выполнить ioctl на другом устройстве. Я понимаю, что это не лучший способ обработки кода, но пока это временное решение. Я получаю код ошибки -22 (недопустимый аргумент) из моего вызова ioctl в функции, но я не вижу, что может быть не так с аргументами. Вот соответствующие разделы кода.

#define GPIO74 "/dev/gpio/74"

struct file* gpio74FD;
  .
  .
  .
gpio74FD = filp_open(GPIO74,O_RDWR,0)
  .
  .
  .
int device_ioctl(struct inode* inode,struct file *file, unsigned int ioctl_num,unsigned long ioctl_param)
{
  .
  .
  .
ret_val = gpio74FD->f_op->ioctl(inode, gpio74FD, GPIO_CONFIG_AS_INP, 0); //returns error code -22 (Invlaid Argument)
  .
  .
  .
return ret_val;
}

Я подозреваю, что это может быть как-то связано с передачей здесь неправильного индекса, но я даже не уверен, как получить правильный индекс, если он не тот, который передан в ioctl из пользовательского пространства.

17.03.2011

  • Извините, в заголовке указано пространство пользователя, но тело подразумевает пространство ядра. Это верно? 17.03.2011
  • Я совершенно уверен, что теперь это индексный дескриптор, так как мне удалось отследить его до оператора return в другом модуле. Я понимаю, что мне нужен индексный дескриптор модуля gpio, но я все еще не понимаю, как получить дескриптор этого индексного дескриптора. 17.03.2011
  • да, это была опечатка, здесь должно быть указано пространство ядра, я это исправлю 17.03.2011
  • нельзя ли найти индекс файла под gpio74FD->f_dentry->inode? или что-то близкое к этому, я считаю. 17.03.2011
  • хорошо, я не был уверен, как точно получить индекс, но gpio74FD->f_dentry->d_inode, похоже, работает нормально. Я не буду знать наверняка, решит ли это мою общую проблему, пока у меня не будет возможности перепрошить свое устройство с Linux. Спасибо, что указали мне правильное направление 17.03.2011

Ответы:


1

Поскольку вы сейчас очень глубоко погрузились в хакерскую территорию «не делайте этого», добавление нескольких printk в драйвер gpio может дать вам ценную информацию.

Другой вариант - избежать этого ужасного взлома и переключиться на менее опасный: добавить экспортированную функцию в драйвер gpio, которую вы можете вызывать из своего собственного модуля.

18.03.2011
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..