Как я называю Linux syscall от пространства ядра?

Я портирую модуль ядра Linux, записанный, чтобы Linux 2.4 работал с Linux 2.6. Некоторый syscalls, объявленный через syscallN() макросы и перенесенный в set_fs() вызовы использовались в коде. Как я могу все еще использовать sycalls в Linux 2.6, где они макросы отсутствуют?

Я знаю, что это - дурной тон для использования syscalls от пространства ядра и syscallN() макросы повреждаются на большинстве платформ. Любой разумный способ заменить getuid, geteuid, mknod, chown, unlink, sched_yield syscalls в пространстве ядра ценится.

5
задан Svetlozar Angelov 15 January 2010 в 09:28
поделиться

1 ответ

Также имейте в виду, что внедрение приложения с несколькими действиями даст пользователю более согласованный опыт работы с платформой в целом. Часть опыта будет формироваться с помощью встроенных приложений Google, поэтому пользователям, вероятно, будет легче использовать ваше приложение, если оно будет вести себя аналогично тем, которые уже установлены на телефоне.

-121--693095-

Фраза - это подстановочный символ, означающий, что класс BineySeeyTree может принимать:
a. параметр типа (Т), который расширяет Сопоставимый
b. , а также может принимать подтип (S), чей родительский элемент расширяет Сопоставимый

Конструкция расширяет утилиту класса BineySeeyTree до тип (ы), реализующий Сопоставимый и его подтипы.

Ниже приведен фрагмент кода, демонстрирующий следующее:

// Below declaration of Helper class doesn't uses the wildcard super
class Helper<T extends Comparable<T>> {
     // some helper methods
}

abstract class Animal implements Comparable<Animal> {
    public int compareTo(final Animal o) {
       // implementation ...           
    }
    // other abstract methods
}

class Mammal extends Animal {
    // implement abstract methods
}

При приведенном выше объявлении оператор Helper < Животное > x = new Helper < Животное > () работает нормально.
Но утверждение: Helper < Mammal > x = new Helper < Mammal > () дает параметр типа ошибки компиляции
Mammal не находится в пределах его границы
(версия компилятора javac 1.5.0_06)

Когда объявление класса Helper изменяется на следующую форму:

class Helper<T extends Comparable<? super T>> {
     // some helper methods
}

тогда оператор Helper < Mammal > x = new Helper < Mammal > () не дает ошибки компилятора.

Таким образом, использование подстановочных знаков максимизирует полезность класса.

-121--4132689-

тока- > uid и current- > euid могут заменить первые два.

расписание () должно работать для последнего.

Операции файловой системы выглядят сложнее: можно попытаться проверить, экспортированы ли sys _ chown () , sys _ mknod () и sys _ unlink () (доступны для использования любым модулем). Если они работают, отлично. Здесь есть несколько полезных советов . В противном случае придется копать немного глубже:

chown syscall определен в fs/open.c . На первый взгляд я не понимаю, почему вы не смогли скопировать этот код в свою собственную функцию «kernel_chown» и попробовать.

мнодат и разорвать связь syscalls в fs/namei.c ; в конечном итоге они вызывают vfs _ mknod () и vfs _ unlink () соответственно. Возможно, вы можете продублировать этот код или выяснить, как это делается оттуда.

3
ответ дан 15 December 2019 в 06:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: