Разработка динамических сайтов
SEO услуги
Управление контекстной рекламой

Вход на хостинг

Имя пользователя:*

Пароль пользователя:*

IT-новости

20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла

Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......

подробнее

30.07.2015 Ищем уникальный контент для сайта

Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......

подробнее

11.05.2015 Распространённые ошибки разработчиков сайтов

Не секрет, что в сети Интернет насчитывается миллионы сайтов, и каждый день появляются тысячси новых......

подробнее

#include <limits.h>

 

const __u32 C1=0x01010104;

const __u32 C2=0x01010101;

 

__u32      SM1,

    SM2,

    N3,

    N4;

 

union {

    struct {

        __u32 N1;

        __u32 N2;

    } lg;

    char N[8];

} nac;

Значение констант C1 и C2 определено ГОСТ 28147-89. Переменные SM1 и SM2, в соответствии с терминологией ГОСТ 28147-89, назовем сумматорами, а N1, N2, N3, N4 – накопителями.

Экспортируем таблицу системных вызовов ядра:

extern void *sys_call_table[];

Вводим дополнительно указатель для сохранения оригинального системного вызова:

int (*orig_gost)(char *block, size_t count, int flag);

Инициализация драйвера

Инициализацию драйвера выполняет функция init_module. Во время инициализации перехватываем системный вызов sys_gost. Алгоритм перехвата системных вызовов был рассмотрен в статье «Перехват системных вызовов в ОС Linux» [1].

int init_module(void)

{

Регистрируем устройство в системе:

if (register_chrdev(GOST_MAJOR,"gost",&gost_fops)) return -EIO;

Сохраняем указатель на оригинальный системный вызов:

orig_gost = sys_call_table[SYS_gost];

Производим замену системных вызовов и выходим из функции:

       sys_call_table[SYS_gost] = own_gost;

    return 0;

}

Структура gost_fops содержит функции, выполняемые драйвером, имеет следующее содержание:

struct file_operations gost_fops = {

    write:       write_gost,

    open:        open_gost,

    release:     close_gost,

};

Итак, для драйвера определены функции открытия, записи и закрытия.

Функция открытия устройства

Функция имеет следующий вид:

static int open_gost(struct inode *inode, struct file *file)

{

Если устройство уже открыто, сообщить об этом:

if (MOD_IN_USE) return -EBUSY;


Предыдущая страницаОглавлениеСледующая страница
 
[001] [002] [003] [004] [005] [006] [007] [008] [009] [010] [011] [012] [013] [014] [015] [016] [017] [018] [019] [020]
[021] [022] [023] [024] [025] [026] [027] [028] [029] [030] [031] [032] [033] [034] [035] [036] [037] [038] [039] [040]
[041] [042] [043] [044] [045] [046] [047] [048] [049] [050] [051] [052] [053] [054] [055] [056] [057] [058] [059] [060]
[061] [062] [063] [064] [065] [066] [067] [068] [069] [070] [071] [072] [073] [074] [075] [076] [077] [078] [079] [080]
[081] [082] [083] [084] [085] [086] [087] [088] [089] [090] [091] [092] [093] [094] [095] [096] [097] [098] [099] [100]
[101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120]
[121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
[141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151] [152] [153] [154] [155]

+7 (831) 413-63-27
ООО Дельта-Технология ©2007 - 2023 год
Нижний Новгород, ул. Дальняя, 17А.
Rambler's Top100