Linux技术研究-基础篇(内核,模块)
2011-05-21 11:46
501 查看
Linux技术研究-基础篇(内核,模块)
编译内核的目的 对现有内核添加新的功能 就是向内核添加新模块 对现有系统添加新的内核 对现有内核进行升级 选择内核版本 以次版本号为偶数的为准,奇数版属于测试版或开发版 不稳定 新内核可以去 http://www.kernel.org/ 下载 介绍 技术上说Linux是一个内核。“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux。 微内核和单内核 微内核是将所有功能独立出来,内核只负责通信(消息传递),优点是灵活,缺点是消息传递过多影响性能,可自由加载卸载模块 单内核是将所有功能换成一体,内核可直接调用函数,无需消息传递.优点简单高效,缺点不好维护 ,不能独立卸载与加载新的模块,WINDOWS NT与MAC OS则是典型的单内核 linux则是他们的混合物,汲取双方的优点于一身.既可直接调用函数 又可随时按需加载卸载模块 1.升级内核 安装检查 需要安装开发库和开发工具里的包 [root@stu32 ~]# rpm -qa | grep "ncurses" ncurses-devel-5.5-24.20060715 ncurses-5.5-24.20060715 下载 linux-2.6.29.tar.gz [root@stu32 src]# tar xvjf linux-2.6.29.tar.gz 内核帮助文档 Documentation/ 介绍 devices.txt # ll /dev/sda brw-r----- 1 root disk 8, 0 06-04 07:45 /dev/sda # rm -rf /dev/sda # mknod -m 640 /dev/sda b 8 0 # man mknod # chown :disk /dev/sda # ll /dev/sda brw-r----- 1 root disk 8, 0 06-04 10:10 /dev/sda # cd /usr/src/linux-2.6.29 make mrproper # 清理代码数(会将.o和.ko删除) make menuconfig # 配置内核模块 会自动从/boot/config-version加载现机器的内核配置 make # 开始编译 make modules_install # 安装模块 模块的位置 /lib/modules/KERNEL-VERSION/kernel maks install # 安装内核及相关文件到 /boot/ 下 并修改启动菜单 2.模块 lsmod 查看系统中已加载的模块 管理模块 rmmod 卸载模块 insmod 加载模块 加载模块要写模块的绝对路径 modinfo 查看模块的详细信息 -l 查看所有模块 modprobe --show-depends lp 查依赖关系 模块有依赖性 卸载一个模块必须先将依赖着它的模块先卸载掉 加载模块也必须先加载依赖关系 # modinfo lp | grep depends depends: parport # modinfo parport_pc | grep depends depends: parport # # rmmod parport ERROR: Module parport is in use by lp,parport_pc # rmmod lp # rmmod parport_pc # rmmod parport # 让系统自动来完善依赖关系(只能在加载时,卸载无效,还需手动) # lsmod | grep -e lp -e parport # modprobe lp # lsmod | grep -e lp -e parport parport_pc 29157 1 lp 15849 0 parport 37513 2 parport_pc,lp # # modprobe -r parport FATAL: Module parport is in use. modprobe 是通过 /lib/modules/2.6.18-53.el5/modules.* 来维护依赖关系的 当这些文件丢失或新添了模块时 可以手动重新产生依赖关系 depmod 3.为原内核添加新模块的方法: 安装前的检查 [root@stu32 ~]# rpm -qa | grep "ncurses\|rpm-build" ncurses-devel-5.5-24.20060715 ncurses-5.5-24.20060715 rpm-build-4.4.2-47.el5 [root@stu32 ~]# # rpm -ivh kernel-2.6.18-53.el5.src.rpm # cd /usr/src/redhat/SPECS # rpmbuild -bp --target=$(uname -m) kernel-2.6.spec # cd /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.i686 # uname -r 2.6.18-53.el5 # head -n 5 Makefile VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 18 #EXTRAVERSION = -prep EXTRAVERSION = -53.el5 # make menuconfig # make M=fs/ntfs/ 错误1 ERROR: Kernel configuration is invalid. include/linux/autoconf.h or include/config/auto.conf are missing. Run 'make oldconfig && make prepare' on kernel src to fix it. 解决方法 # make oldconfig && make prepare 再次编译模块 # make M=fs/ntfs/ 错误2 /bin/sh: scripts/mod/modpost: 没有那个文件或目录 make[1]: *** [__modpost] 错误 127 make: *** [modules] 错误 2 解决方法 # make scripts # make M=fs/ntfs/ Building modules, stage 2. MODPOST CC fs/ntfs/ntfs.mod.o LD [M] fs/ntfs/ntfs.ko # cp fs/ntfs/ntfs.ko /lib/modules/2.6.18-53.el5/kernel/fs/ntfs/ # depmod -a # modprobe ntfs # lsmod | grep ntfs ntfs 187284 0 |
相关文章推荐
- Linux技术研究-基础篇(内核,模块)
- 通过ramdisk内核模块研究Linux文件系统
- Linux技术研究-基础篇(日志和计划任务,网络)
- Linux技术研究-基础篇(raid与LVM,配额)
- Linux技术研究-基础篇(启动和自动挂载)
- Linux技术研究-基础篇(特殊权限和高级命令)
- Linux技术研究-基础篇(特殊权限和高级命令)
- Linux技术研究-基础篇(linux常用指令和权限管理)
- linux 内核模块 参数
- Linux之内核模块
- Linux内核五个安全模块简述
- 开发 linux内核的技术路线
- linux驱动开发笔记--2.3内核模块相比于应用程序
- 嵌入式实时Linux的技术研究
- 设置Linux 自写内核模块启动时加载
- Linux 内核模块makefile
- Linux 内核模块编程
- Linux 内核模块主要组成部分
- Linux 内核模块 helloworld
- Linux可加载内核模块(LKM)