Форум программистов, компьютерный форум, киберфорум
Наши страницы
С под Linux
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Allius25
14 / 14 / 8
Регистрация: 17.06.2013
Сообщений: 209
1

Модуль hello_world и ошибка "Device or resource busy"

06.08.2014, 04:08. Просмотров 1069. Ответов 12
Метки нет (Все метки)

Здравствуйте многоуважаемые знатоки. Нуждаюсь в вашей помощи.

Этот вариант Hello_world работает исправно
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
 
void sayHello()
{
        printk(KERN_INFO"Hello mad  world\n");
}
EXPORT_SYMBOL(sayHello);
 
static int __init hello_init(void)
{
        sayHello();
        return 0;
}
 
static void __exit hello_exit(void)
{
        printk(KERN_INFO"Goodbye mad world\n");
}
 
module_init(hello_init);
module_exit(hello_exit);
 
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Copyright (c) 2006 by xxxx xxxxx, Inc.");
MODULE_DESCRIPTION("1");

Когда разобрался с ним, решил усложнить задачу, и собрать тот же код из 2х половинок.

"hello2.c"
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include "say.c"
 
static int __init hello_init(void)
{
        sayHello();
        return 0;
}
 
static void __init hello_exit(void)
{
        sayGoodbye();
}
 
module_init(hello_init);
module_exit(hello_exit);
 
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Copyright (c) 2006 by xxxx xxxxx, Inc.");
MODULE_DESCRIPTION("1");

"say.c"
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
 
void sayHello()
{
        printk(KERN_INFO"Hello mad  world\n");
}
 
void sayGoodbye()
{
        printk(KERN_INFO"Goodbye mad  world\n");
}


Второй модуль(hello2.ko) прекрасно встает на место, выводит в dmesg заветное(Hello mad world), но убираться не хочет.
Выдает
C
1
2
sudo rmmod hello2 
ERROR: Removing 'hello2': Device or resource busy
Поностью убрать проблему помогает перезагрузка виртуалки

А вот эту лабуду он выводит в dmesg при попытке его удалить
Кликните здесь для просмотра всего текста
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
sudo rmmod hello2
BUG: unable to handle kernel paging request at 00224000
[  370.948050] IP: [<f822488d>] 0xf822488d
[  370.948050] *pdpt = 000000003680c001 *pde = 000000003f4a8067 
[  370.948050] Oops: 0002 [#1] SMP 
[  370.948050] last sysfs file: /sys/module/vboxguest/initstate
[  370.948050] Modules linked in: hello2(-) vboxvfs joydev ppdev fbcon tileblit font bitblit softcursor parport_pc vboxguest lp parport psmouse serio_raw i2c_piix4 vga16fb vgastate usbhid ahci hid e1000
[  370.948050] 
[  370.948050] Pid: 1285, comm: rmmod Not tainted (2.6.32-30-generic-pae #59-Ubuntu) VirtualBox
[  370.948050] EIP: 0060:[<f822488d>] EFLAGS: 00010206 CPU: 0
[  370.948050] EIP is at 0xf822488d
[  370.948050] EAX: 00224000 EBX: 00000000 ECX: 00000018 EDX: 00000008
[  370.948050] ESI: f82210c0 EDI: 00000880 EBP: f6ccbfac ESP: f6ccbf4c
[  370.948050]  DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0069
[  370.948050] Process rmmod (pid: 1285, ti=f6cca000 task=f6b75940 task.ti=f6cca000)
[  370.948050] Stack:
[  370.948050]  c0188f59 f82210c0 00000880 f6ccbf5c 00000000 6c6c6568 0000326f fffb2ef8
[  370.948050] <0> f688c1e0 f6ccbfb4 007df160 f6ccbfac c05b7cf0 00000000 b7722000 f688c8a0
[  370.948050] <0> 0000007b f68e3738 f6b75940 008e3700 7769a31b bfcc1f40 00000001 bfcc1f40
[  370.948050] Call Trace:
[  370.948050]  [<c0188f59>] ? sys_delete_module+0x169/0x200
[  370.948050]  [<c05b7cf0>] ? do_page_fault+0x160/0x3a0
[  370.948050]  [<c01097ac>] ? syscall_call+0x7/0xb
[  370.948050] Code: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 25 40 ce 3f 00 <00> 00 00 25 70 cd 3f 00 00 00 00 25 60 cd 3f 00 00 00 00 25 50 
[  370.948050] EIP: [<f822488d>] 0xf822488d SS:ESP 0069:f6ccbf4c
[  370.948050] CR2: 0000000000224000
[  371.489228] ---[ end trace a1e105a36f52c753 ]---


Если есть тот, кто понимает strace, то таким еще один бонус
Кликните здесь для просмотра всего текста
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
sudo strace rmmod hello2 
execve("/sbin/rmmod", ["rmmod", "hello2"], [/* 23 vars */]) = 0
brk(0)                                  = 0x8fb2000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb77c6000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=27304, ...}) = 0
mmap2(NULL, 27304, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb77bf000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/tls/i686/cmov/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0000m\1\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1405508, ...}) = 0
mmap2(NULL, 1415592, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xbc3000
mprotect(0xd16000, 4096, PROT_NONE)     = 0
mmap2(0xd17000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x153) = 0xd17000
mmap2(0xd1a000, 10664, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xd1a000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb77be000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb77be8d0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
mprotect(0xd17000, 8192, PROT_READ)     = 0
mprotect(0x804a000, 4096, PROT_READ)    = 0
mprotect(0x6af000, 4096, PROT_READ)     = 0
munmap(0xb77bf000, 27304)               = 0
brk(0)                                  = 0x8fb2000
brk(0x8fd3000)                          = 0x8fd3000
open("/proc/modules", O_RDONLY)         = 3
fstat64(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb77c5000
read(3, "hello2 840 0 - Unloading 0xf8221"..., 1024) = 794
close(3)                                = 0
munmap(0xb77c5000, 4096)                = 0
delete_module("hello2", O_RDONLY|O_EXCL|O_NONBLOCK) = -1 EBUSY (Device or resource busy)
write(2, "ERROR: Removing 'hello2': Device"..., 50ERROR: Removing 'hello2': Device or resource busy
) = 50
exit_group(1)                           = ?


Очень надеюсь на вас. Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2014, 04:08
Ответы с готовыми решениями:

FTP клиент и ошибка "Ошибка 530"
Пишу приложение для подключение к ftp серверу, в основы вроде бы вник. Сокет...

Напишите функцию expand(s1), заменяющую строку на сокращенную запись. Например, "Иванов" будет заменена на "И-в"
Нуждаюсь в вашей помощи

Для заданного массива из 10 чисел проверить, есть ли в нем два числа, отличающихся ровно на 1, напечатать "да" или "нет"
Для заданного массива из 10 чисел проверить, есть ли в нем два числа,...

При получения пакета возникает ошибка "Segmentation Fault"
Добрый день! Учился отправлять структуру по сети, натолкнулся на глюк. Если...

Подобие команды ls. Ошибка: Syntax error: "(" unexpected
Здравствуйте! Пытаюсь написать на C подобие команды ls, но постоянно вылезает...

12
drfaust
318 / 206 / 79
Регистрация: 02.10.2008
Сообщений: 811
Записей в блоге: 1
Завершенные тесты: 1
11.08.2014, 12:22 2
А можно посмотреть выхлоп
Bash
1
modinfo имя_твоего_модуля
для первого и второго случаев?
0
Allius25
14 / 14 / 8
Регистрация: 17.06.2013
Сообщений: 209
12.08.2014, 02:20  [ТС] 3
drfaust,
Цитата Сообщение от drfaust Посмотреть сообщение
А можно посмотреть выхлоп
Первый вариант.
Bash
1
2
3
4
5
6
7
8
modinfo hello.ko
filename:       hello.ko
description:    1
author:         Copyright (c) 2006 by xxxx xxxxx, Inc.
license:        GPL
srcversion:     BABF59DDB068F0060B69995
depends:        
vermagic:       2.6.32-30-generic-pae SMP mod_unload modversions 586TSC
Второй вариант.
Bash
1
2
3
4
5
6
7
8
modinfo hello2.ko
filename:       hello2.ko
description:    1
author:         Copyright (c) 2006 by xxxx xxxxx, Inc.
license:        GPL
srcversion:     D94CBD7661317B217EBC6B2
depends:        
vermagic:       2.6.32-30-generic-pae SMP mod_unload modversions 586TSC
0
drfaust
318 / 206 / 79
Регистрация: 02.10.2008
Сообщений: 811
Записей в блоге: 1
Завершенные тесты: 1
12.08.2014, 13:11 4
ОК, тут всё хорошо. А выхлоп
Bash
1
lsmod | grep hello2.ko
И в четвёртом поле посмотреть кто использует модуль (третье поле - кол-во ссылок_использования, второе - размер модуля, а первое имя самого модуля).
Например, тут я вижу,
Bash
1
2
i8042                  13666  1 libps2
serio                  11018  6 serio_raw,atkbd,i8042,psmouse
что драйвер клавы использует какая-то либа libps2 и пока она его использует выгрузить i8042 я не смогу - будет "Device or resource busy"
0
Allius25
14 / 14 / 8
Регистрация: 17.06.2013
Сообщений: 209
12.08.2014, 15:12  [ТС] 5
drfaust,
Bash
1
2
3
lsmod 
Module                  Size  Used by
hello2                   840   0
При выгрузке пишет killed, хотя обычно в shell ничего не выводит
Bash
1
2
sudo rmmod hello2 
Killed
И остается активным(это после rmmod)
Bash
1
2
3
lsmod 
Module                  Size  Used by
hello2                   840   0
0
drfaust
318 / 206 / 79
Регистрация: 02.10.2008
Сообщений: 811
Записей в блоге: 1
Завершенные тесты: 1
13.08.2014, 09:49 6
А если выгрузить так:
Bash
1
modprobe -r -v hello2
0
Allius25
14 / 14 / 8
Регистрация: 17.06.2013
Сообщений: 209
13.08.2014, 14:37  [ТС] 7
drfaust,
Bash
1
2
sudo modprobe -r -v hello2
FATAL: Module hello2 not found.
Это при том, чтоя его подклчил, он вывел сообщение в dmesg, и прописан как существующий в lsmod
0
drfaust
318 / 206 / 79
Регистрация: 02.10.2008
Сообщений: 811
Записей в блоге: 1
Завершенные тесты: 1
13.08.2014, 15:35 8
https://www.google.ru/webhp?sourceid...dule+not+found
Первая же ссылка - ответ в предпоследнем посте:
в мане на modprobe проглядел.
0
Allius25
14 / 14 / 8
Регистрация: 17.06.2013
Сообщений: 209
13.08.2014, 19:12  [ТС] 9
drfaust, Ничего.
Только при первом rmmod начал выдавать "segmentation fault", а при последующих "ERROR: Removing 'hello2': Device or resource busy"
0
drfaust
318 / 206 / 79
Регистрация: 02.10.2008
Сообщений: 811
Записей в блоге: 1
Завершенные тесты: 1
14.08.2014, 09:39 10
Я имел ввиду depmod -a . Тогда modprobe должен будет увидеть модуль.

А вот про "seg. fault" думаю надо сначала с hello v.1 разобраться, почему rmmod сегфолтится.
0
Allius25
14 / 14 / 8
Регистрация: 17.06.2013
Сообщений: 209
14.08.2014, 13:38  [ТС] 11
drfaust,
Так нужно сделать?
Bash
1
2
sudo depmod -a
sudo modprobe hello2.ko
Если да, то вот ответ
Bash
1
FATAL: Module hello2.ko not found.
0
_1_
deleted
177 / 50 / 5
Регистрация: 29.03.2013
Сообщений: 366
17.08.2014, 19:34 12
Знатно ты сам себя [cut], перед hello_exit сотри __init и будет тебе счастье
2
drfaust
318 / 206 / 79
Регистрация: 02.10.2008
Сообщений: 811
Записей в блоге: 1
Завершенные тесты: 1
18.08.2014, 11:51 13
Цитата Сообщение от _1_ Посмотреть сообщение
сотри __init и будет тебе счастье
Замени на __exit.
Блин, за что я люблю С и С++ из-за мелкой опечатки можно попасть в хорошую опу. И самое главное я тоже этот код "под лупой" разглядывал, искал, и фиг что нашёл
1
18.08.2014, 11:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2014, 11:51

Ошибка при компиляции "Incompatible implicit declaration of built-in function ‘exit’"
ОС Linux Home 2.6.25-std-def-alt8.M41.4 #1 SMP Sat Dec 6 14:42:12 MSK 2008 i686...

Ошибка синтаксиса около неожиданный лексемы ")"
Господа, gcc в данном коде ругается на &quot;ошибку синтаксиса около неожиданный...

При запуске "Ошибка сегментирования"
#include &lt;sys/types.h&gt; #include &lt;sys/socket.h&gt; #include &lt;netinet/in.h&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru