12
Linux Linux 的的的的的的 的的的的的的 Linux 操操操 操操操操操操 操 操操操 统一体 (monolithic kernel) 操 , 操操操操 操操操操操操 操操操操操操操操操操操 操操操 操 ,一。, 操操操操操操操操操 操操操操操操操操操操操操操操操操 操操操操操 操操 一体 ,。 操操操 操操操 一, Linux 操操操 操操操操 操操操操操操 统一 ——操操 (module) 操操 , 操操操操操操操操 操操操操操操操操操操操操操操操操 操操操操操操操操操 ,, 操操操操操操操操操

Linux 的模块化机制

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Linux 的模块化机制

LinuxLinux 的模块化机制 的模块化机制

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

Page 2: Linux 的模块化机制

内核模块:实验一 内核模块:实验一 实验一:编写一个内核模块 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"); }

Page 3: Linux 的模块化机制

内核模块:实验一内核模块:实验一对该文件进行编译: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 中的形式:

Page 4: Linux 的模块化机制

内核模块:实验二内核模块:实验二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; }

Page 5: Linux 的模块化机制

内核模块:实验二内核模块:实验二 如果键盘不是 usb 接口的话,那么加载上面的模块

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

Page 6: Linux 的模块化机制

ssh服务ftp服务http服务

< >

Linux的网络服务

Page 7: Linux 的模块化机制

ssh (Secure Shell) 在 rsh (Remote

Shell)的基础上对传输的数据进行加密,使其更加安全。

使用 ssh服务,需要服务器端启动ssh服务,可通过 ps –ef 查看是否启动。

ssh客户端的连接

< >

ssh服务

Page 8: Linux 的模块化机制

Redhat 9 的 ftp服务器采用 vsftpd, 可通过命令 rpm –q vsftpd查看是否安装。

启动服务 /sbin/service vsftpd start

现在可通过 Leapftp访问该服务。配置文件 /etc/vsftpd/vsftpd.conf

ftp服务的根目录为 /var/ftp/

< >

ftp服务

Page 9: Linux 的模块化机制

源代码安装rpm包安装二进制文件安装

< >

Linux下软件的安装

Page 10: Linux 的模块化机制

实例: bison的安装在当前目录下有 bison-2.3.tar.gz

1. tar -zxvf bison-2.3.tar.gz 解压2. cd bison-2.3

3. ./configure --prefix=/usr 配置,根据配置信息生成 makefile文件

4. make 根据makefile进行编译5. make install 安装在第三步配置时, prefix选项指明安装路径,若不指明路径,默认安装在 /usr/local下

源代码安装

Page 11: Linux 的模块化机制

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

# rpm –ivh gcc-3.2.2-5.i386.rpm

< >

rpm包安装

Page 12: Linux 的模块化机制

扩展名为 .bin文件是二进制的,它也是源程序经编译后得到的机器语言。有一些软件可以发布为以 .bin

 为后缀的安装包,例如,流媒体播放器 RealONE。 # chmod +x r1p1_linux22_libc6_i386_a1.bin 

# ./ r1p1_linux22_libc6_i386_a1.bin

< >

二进制文件的安装