您的位置:首页 > 其它

开发板上rmmod卸载模块必须创建/lib /modules/2.6.30.4这样一个空目录

2010-05-03 16:47 316 查看
必须创建/lib/modules/2.6.30.4这样一个空目录
,否则不能卸载ko模块.

# rmmod nls_cp936

rmmod: chdir(/lib/modules): No such file or
directory

但是这样倒是可以卸载nls_cp936,不过会一直有这样一个提示:

rmmod: module 'nls_cp936' not found


来知道,原来这是编译kernel时使用make modules_install生成的一个目录,

luther@gliethttp:/vobs/works/linux-2.6.30.4$
make modules_install INSTALL_MOD_PATH=/vobs/gliethttp

luther@gliethttp:/vobs/works/linux-2.6.30.4$
tree /vobs/gliethttp/

/vobs/gliethttp/

`-- lib

`-- modules

`-- 2.6.30.4

|-- build -> /vobs/works/linux-2.6.30.4

|-- kernel

| |-- drivers

| | `--
scsi

| | `-- scsi_wait_scan.ko

|
`-- fs

| `-- nls

| `--
nls_cp936.ko

|-- modules.alias

|--
modules.ccwmap

|-- modules.dep

|--
modules.ieee1394map

|-- modules.inputmap

|-- modules.isapnpmap

|-- modules.ofmap

|-- modules.order

|-- modules.pcimap

|--
modules.seriomap

|-- modules.symbols

|--
modules.usbmap

`-- source ->
/vobs/works/linux-2.6.30.4

10 directories, 14 files

然后将上面生成的
modules目录拷贝到开发板的/lib下即可.

也可以直接释放到initramfs中

luther@gliethttp:/vobs/works/linux-2.6.30.4$
make modules_install INSTALL_MOD_PATH

=/vobs/initramfs


是kernel目录下的包含了所有.ko,这是我所不期望的,因为我把.ko放在一个我们独立的存储区,

但是将kernel目录删除之后,就又会
提示:rmmod: module 'nls_cp936' not found
,
当然模块是已经卸载了,但有这种提示总让人感觉怪怪的,

所以上面的拷贝就没有了意义,

luther@gliethttp:/vobs/initramfs/lib/modules/2.6.30.4$
rm -rf build kernel source

后来发现提示:rmmod:
module 'nls_cp936' not found来自于busybox,
并不是来自kernel,

所以使用如下源码生成rmmod命
令,就可以没有任何提示的卸载ko模块了[luther.gliethttp]

#
include
<
stdio.
h>

#
include
<
stdlib.
h>

#
include
<
unistd.
h>

#
include
<
fcntl.
h>

#
include
<
string
.
h>

#
include
<
errno
.
h>

int
main(
int
argc,
char
*
argv[
]
)

{

const
char
*
modname =

argv[
1]
;

int
ret =
-
1;

int
maxtry =
10;

while
(
maxtry-
-
>
0)
{

ret =
delete_module(
modname,
O_NONBLOCK |
O_EXCL)
;
//系统调用sys_delete_module

if
(
ret <
0 &
&
errno
=
=
EAGAIN)

usleep
(
500000)
;

else

break
;

}

if
(
ret !
=
0)

printf
(
"Unable to unload driver module /"%s/": %s/n"
,

modname,
strerror
(
errno
)
)
;

}


luther@gliethttp:/vobs/tmp$
arm-linux-gcc -o rmmod rmmod.c

luther@gliethttp:/vobs/tmp$
arm-linux-strip -s rmmod

luther@gliethttp:/vobs/tmp$ cp rmmod
/vobs/nfs/

这样只需要创建/lib/modules/2.6.30.4空目录就完全可以了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐