1 / 12

Linux 的模块化机制

Linux 的模块化机制. Linux 操作系统的内核是单一体系结构 (monolithic kernel) 的 , 也就是说,整个内核是一个单独的非常大的程序。这样,系统的速度和性能都很好,但是可扩展性和可维护性就比较差。为了弥补单一体系结构的这一缺陷, Linux 操作系统使用了一种全新的机制 —— 模块 (module) 机制 , 用户可以根据需要,在不需要对内核重新编译的情况下,模块可以动态地载入内核或从内核中移出。. 内核模块:实验一. 实验一: 编写一个内核模块 hello ,当用 insmod 命令插入模块时,会显示 hello world ! hello.c:

grady-tyler
Download Presentation

Linux 的模块化机制

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Linux的模块化机制 Linux操作系统的内核是单一体系结构(monolithic kernel)的,也就是说,整个内核是一个单独的非常大的程序。这样,系统的速度和性能都很好,但是可扩展性和可维护性就比较差。为了弥补单一体系结构的这一缺陷,Linux操作系统使用了一种全新的机制——模块(module)机制,用户可以根据需要,在不需要对内核重新编译的情况下,模块可以动态地载入内核或从内核中移出。

  2. 内核模块:实验一 实验一:编写一个内核模块hello,当用insmod命令插入模块时,会显示hello world! hello.c: • #define __NO_VERSION__ • #define __KERNEL__ • #define MODULE • #include<linux/kernel.h> • #include<linux/module.h> • int init_module(void) • { • printk("hello world!\n"); • return 0; • } • int cleanup_module(void) • { • printk("goodbye.\n"); • }

  3. 内核模块:实验一 • 对该文件进行编译: • gcc –c –I/usr/src/linux-2.4/include –Wall hello.c • (注:-I选项后面跟着头文件的路径) • 生成hello.o模块文件,用下列命令将模块插入内核(需要root权限): • insmod hello.o 加载模块,会看到输出:hello world! • dmesg 查看系统内核日志,请注意最后一行 • lsmod 查看系统内核中的模块,看看有无hello模块 • rmmod hello 卸载模块,会输出:goodbye • Dmesg • 上述程序的功能仅仅是在内核系统日志中写了两句话,但这样简单的工作却是在核心态中完成的。如果你还认识不到其重要性,可以试试把init_module()函数修改成expr2.c中的形式:

  4. 内核模块:实验二 expr2.c: • #define __NO_VERSION__ • #define __KERNEL__ • #define MODULE • #include<linux/kernel.h> • #include<linux/module.h> • int init_module() • { • __asm__("movb $0xed,%al; out %al,$0x60"); • __asm__("movb $7,%al; out %al,$0x60"); • return 0; • }

  5. 内核模块:实验二 如果键盘不是usb接口的话,那么加载上面的模块后,键盘的Caps Lock, NumLock, ScrollLock三个指示灯(即键盘右上角的灯)都会被点亮。这是我们在核心态绕过操作系统,直接对硬件进行操作的结果。在用户态程序中,想编写程序控制三个键盘指示灯是非常困难的,因为操作系统为了安全起见,会拦截一切对硬件的直接访问。因此,这可以证明内核模块确实是在核心态下执行的。

  6. Linux的网络服务 • ssh服务 • ftp服务 • http服务 < >

  7. ssh服务 • ssh (Secure Shell)在rsh (Remote Shell)的基础上对传输的数据进行加密,使其更加安全。 • 使用ssh服务,需要服务器端启动ssh服务,可通过ps –ef 查看是否启动。 • ssh客户端的连接 < >

  8. ftp服务 • Redhat 9的ftp服务器采用vsftpd, 可通过命令rpm –q vsftpd查看是否安装。 • 启动服务 /sbin/service vsftpd start 现在可通过Leapftp访问该服务。 • 配置文件/etc/vsftpd/vsftpd.conf • ftp服务的根目录为/var/ftp/ < >

  9. 源代码安装 rpm包安装 二进制文件安装 Linux下软件的安装 < >

  10. 实例:bison的安装 在当前目录下有bison-2.3.tar.gz tar -zxvf bison-2.3.tar.gz 解压 cd bison-2.3 ./configure --prefix=/usr 配置,根据配置信息生成makefile文件 make 根据makefile进行编译 make install 安装 在第三步配置时,prefix选项指明安装路径, 若不指明路径,默认安装在/usr/local下 源代码安装

  11. rpm(redhat package management):红帽子公司提供的一种包管理器 实例:gcc的安装,当前目录下有 gcc-3.2.2-5.i386.rpm文件 # rpm –ivh gcc-3.2.2-5.i386.rpm rpm包安装 < >

  12. 扩展名为.bin文件是二进制的,它也是源程序经 编译后得到的机器语言。有一些软件可以发布为以.bin 为后缀的安装包,例如,流媒体播放器 RealONE。 # chmod +x r1p1_linux22_libc6_i386_a1.bin  # ./ r1p1_linux22_libc6_i386_a1.bin 二进制文件的安装 < >

More Related