120 likes | 238 Views
Linux 的模块化机制. Linux 操作系统的内核是单一体系结构 (monolithic kernel) 的 , 也就是说,整个内核是一个单独的非常大的程序。这样,系统的速度和性能都很好,但是可扩展性和可维护性就比较差。为了弥补单一体系结构的这一缺陷, Linux 操作系统使用了一种全新的机制 —— 模块 (module) 机制 , 用户可以根据需要,在不需要对内核重新编译的情况下,模块可以动态地载入内核或从内核中移出。. 内核模块:实验一. 实验一: 编写一个内核模块 hello ,当用 insmod 命令插入模块时,会显示 hello world ! hello.c:
E N D
Linux的模块化机制 Linux操作系统的内核是单一体系结构(monolithic kernel)的,也就是说,整个内核是一个单独的非常大的程序。这样,系统的速度和性能都很好,但是可扩展性和可维护性就比较差。为了弥补单一体系结构的这一缺陷,Linux操作系统使用了一种全新的机制——模块(module)机制,用户可以根据需要,在不需要对内核重新编译的情况下,模块可以动态地载入内核或从内核中移出。
内核模块:实验一 实验一:编写一个内核模块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"); • }
内核模块:实验一 • 对该文件进行编译: • 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中的形式:
内核模块:实验二 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; • }
内核模块:实验二 如果键盘不是usb接口的话,那么加载上面的模块后,键盘的Caps Lock, NumLock, ScrollLock三个指示灯(即键盘右上角的灯)都会被点亮。这是我们在核心态绕过操作系统,直接对硬件进行操作的结果。在用户态程序中,想编写程序控制三个键盘指示灯是非常困难的,因为操作系统为了安全起见,会拦截一切对硬件的直接访问。因此,这可以证明内核模块确实是在核心态下执行的。
Linux的网络服务 • ssh服务 • ftp服务 • http服务 < >
ssh服务 • ssh (Secure Shell)在rsh (Remote Shell)的基础上对传输的数据进行加密,使其更加安全。 • 使用ssh服务,需要服务器端启动ssh服务,可通过ps –ef 查看是否启动。 • ssh客户端的连接 < >
ftp服务 • Redhat 9的ftp服务器采用vsftpd, 可通过命令rpm –q vsftpd查看是否安装。 • 启动服务 /sbin/service vsftpd start 现在可通过Leapftp访问该服务。 • 配置文件/etc/vsftpd/vsftpd.conf • ftp服务的根目录为/var/ftp/ < >
源代码安装 rpm包安装 二进制文件安装 Linux下软件的安装 < >
实例: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下 源代码安装
rpm(redhat package management):红帽子公司提供的一种包管理器 实例:gcc的安装,当前目录下有 gcc-3.2.2-5.i386.rpm文件 # rpm –ivh gcc-3.2.2-5.i386.rpm rpm包安装 < >
扩展名为.bin文件是二进制的,它也是源程序经 编译后得到的机器语言。有一些软件可以发布为以.bin 为后缀的安装包,例如,流媒体播放器 RealONE。 # chmod +x r1p1_linux22_libc6_i386_a1.bin # ./ r1p1_linux22_libc6_i386_a1.bin 二进制文件的安装 < >