如果一直连续用malloc申请内存,而不真正使用,所申请的内存总数可以超过真正可以使用的内存数。但是当真正使用这块内存,比如用memset或bzero函数一次性把所申请到的大块内存“使用掉”,Linux系统就会Out Of Memory,这个时候OOM Killer就会kill掉用户空间的其他进程来腾出更多可使用内存。
** Loadable module support**
Enable loadable module support (CONFIG_MODULES) [Y/n/?]
Set versioninformation on all symbols for modules (CONFIG_MODVERSIONS) [N/y/?]
Kernel daemon support (e.g.autoload of modules) (CONFIG_KERNELD) [Y/n/?]
分别回答 Y,N,Y 。其中 CONFIG_KERNELD 的 default 值是 N, 所以要注意选择Y。
make config 完后,仍旧是 make dep; make clean。接下来要 make zlilo 或 make zImage。然后 make modules ; make modules_install 。完成之后, 就编译出一个没有调入多余模块的一个“干净的”内核映像文件了。
/lib/modules/2.2.10/net/ppp.o: unresolved symbol slhc_init_Rsmp_1ca65fca
/lib/modules/2.2.10/net/ppp.o: unresolved symbol slhc_compress_Rsmp_cfd3a418
/lib/modules/2.2.10/net/ppp.o: unresolved symbol slhc_free_Rsmp_b99033d9
/lib/modules/2.2.10/net/ppp.o: unresolved symbol slhc_toss_Rsmp_a152cec0
/lib/modules/2.2.10/net/ppp.o: unresolved symbol slhc_remember_Rsmp_07972313
/lib/modules/2.2.10/net/ppp.o: unresolved symbol slhc_uncompress_Rsmp_3bb36b01
[root /root]#
要卸载一个模块,首先用lsmod看看该模块是否确实已经加载上来,然后再做操作。 除此之外,在碰到有依赖关系的模块时,从内核中卸载模块的过程与载入的过程恰好相反,它遵循“first in last out“的准则,即在一系列有依赖关系的模块中, 必须先卸载最后加载进来的模块,最后卸载最先加载进来的模块。比如:如果要用 rmmod 移除正在使用中的模块(如上例,要卸载slhc, 但仍有PPP模块在使用它)会出现错误提示:Device or resource busy 。所以,在将PPP模块从内存中卸载后,才可能将slhc模块从内存中卸载。
总之,在卸载模块时,对于可能出现的模块间依赖性问题,linux会给你提示足够的信息,仔细查看这些信息,是能够为你采取相应的操作并最终解决问题提供帮助的。