Upload
grady-tyler
View
69
Download
5
Embed Size (px)
DESCRIPTION
Linux 的模块化机制. Linux 操作系统的内核是单一体系结构 (monolithic kernel) 的 , 也就是说,整个内核是一个单独的非常大的程序。这样,系统的速度和性能都很好,但是可扩展性和可维护性就比较差。为了弥补单一体系结构的这一缺陷, Linux 操作系统使用了一种全新的机制 —— 模块 (module) 机制 , 用户可以根据需要,在不需要对内核重新编译的情况下,模块可以动态地载入内核或从内核中移出。. 内核模块:实验一. 实验一: 编写一个内核模块 hello ,当用 insmod 命令插入模块时,会显示 hello world ! hello.c: - PowerPoint PPT Presentation
Citation preview
LinuxLinux 的模块化机制 的模块化机制
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 三个指示灯 ( 即键盘右上角的灯 ) 都会被点亮。这是我们在核心态绕过操作系统,直接对硬件进行操作的结果。在用户态程序中,想编写程序控制三个键盘指示灯是非常困难的,因为操作系统为了安全起见,会拦截一切对硬件的直接访问。因此,这可以证明内核模块确实是在核心态下执行的。
ssh服务ftp服务http服务
< >
Linux的网络服务
ssh (Secure Shell) 在 rsh (Remote
Shell)的基础上对传输的数据进行加密,使其更加安全。
使用 ssh服务,需要服务器端启动ssh服务,可通过 ps –ef 查看是否启动。
ssh客户端的连接
< >
ssh服务
Redhat 9 的 ftp服务器采用 vsftpd, 可通过命令 rpm –q vsftpd查看是否安装。
启动服务 /sbin/service vsftpd start
现在可通过 Leapftp访问该服务。配置文件 /etc/vsftpd/vsftpd.conf
ftp服务的根目录为 /var/ftp/
< >
ftp服务
源代码安装rpm包安装二进制文件安装
< >
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下
源代码安装
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
< >
二进制文件的安装