Γ
В
ToC
• 推荐讨论主题• 推荐小题目• 题目: fork 和 signal• 题目: shell 编程关键函数• 题目:关于线程• 题目: Hello 内核模块• 题目:使用汇编或特权指令• 题目:试验一个 timer• 题目: gcc 和 glibc• 题目:键盘支持• 题目:扩充一个系统调用• 题目:截获一个系统调用• 题目:审计或识别某种动作• 题目: Linux 主要发行版介绍• 题目: Linux in VMWare• 题目: Gentoo 安装• 题目:试用报告 knoppix 等
Γ
В • 了解 RTOS• 试用 wine 等• 题目:诸许可比较• 题目: Computing 和 Linux• 题目 : VPN in Linux• 题目: Samba 试验• 题目:使用 /proc• 题目:配置 LXR• 题目: xinetd• 题目: wrapper• EMACS• TeX• 读书报告• 综合设计• User-mode linux• uClinux• FaQ
Γ
В 推荐讨论主题
• Linux 编程概论– make
• make , cvs , autoconf/automake ,– C/C++
• gcc 特性,调试 gdb
– Assembly• as gcc nasm
– Java
Γ
В -
• 硬件– IA32 :体系、内存管理、特权级、中断机制、
指令手册– IA64 :新的体系和区别– Linux on IA64
• http://www.linuxia64.org/
Γ
В -
• Linux 网络程序设计– socket– 后台守护进程 daemon
• “Linux 守护进程的编程方法”• fork 、 inittab
• 被 xinetd 调用的进程的编程方法– packet capture ( promiscuous mode )
• libpcap/winpcap , tcpdump/windump/ethereal
• Linux 模块– 内核增强– 设备驱动
Γ
В -
• 内核变量调控• /proc
• /proc/sys/kernel
• sysctl -a
• 系统调用– 窜改 / 监视– 增强
• 调度– 一般原理– 多 CPU 支持
• 文件系统– 分区加密
• 网络实现– IPv4/IPv6– ipchain, iptable– http://www.netfilter.org/
• 内核新方向新进展– 汉化问题见解– 内核之争
Γ
В -
• 其他有意义主题– Linux 公司的经营模式– Free/Open 软件的再应用
• 积极参与题目,可以作业报告形式提交,也可在课堂大家讨论。
Γ
В 推荐小题目
从小处着手,由浅入深出• 访问内核变量和函数
– 比如访问 jiffies
Γ
В 题目: fork 和 signal
• 体会 fork 和 signal 函数使用– 设计一个程序, fork 出一个子进程
• 子进程可以睡眠或死循环– 子进程接收到 USR1 信号则退出
• 打印提示信息先– 父进程用 wait 等待子进程退出
• 或者 waitpid
• fork 和 singal 在服务器程序设计方面的应用– 结合 socket 的 ClientServer 体制
Γ
В 题目: shell 编程关键函数
• 写一个简单的 shell– fork()– exec*()– wait/waitpid()– signal()– pipe()– 够了吗?还需要耐心
•若要看 bash的源代码,在– http://www.gnu.org/software/bash/bash.html
Γ
В 题目:关于线程
• 写示例程序演示在 windows/linux/unix 中关于线程的编程接口– beginthread()/CreateThread()– pthread_create()/…– 请看 #man pthread_create
• 分析和讨论 linux 中是如何支持线程的– 和 fork 的实现比较
• Links– 见备注行
Γ
В 题目: Hello 内核模块
• 做一个 HelloWorld 内核模块– 类似 printf(“hello,world!”);
• 用两个函数即可– init_module()
• printk(…)
– cleanup_module()
• 这个例子是后续很多小题目的基础,作业上也有实现
Γ
В 题目:使用汇编或特权指令
• 使用 rdtsc 指令获取 CPU 主频计数器unsigned long low, high;asm ("rdtsc" : "=a" (low), "=d" (high));printf("rdtsc=%lu,%lu\n", high, low);
• 使用 IO 指令– 在用户空间不能执行 in/out 指令,在内核里可以
• “segmentation fault”
– 尝试在模块里用 in/out 指令读取开机 CMOS 信息
• ( 如果有的说 )• 也可以破坏 CMOS 校验和,从而绕过开机口令
asm(“inb $0x70”)cmos.txt
Γ
В 题目:试验一个 timer
• ./include/linux/timer.h
23 extern void add_timer(struct timer_list * timer);
24 extern int del_timer(struct timer_list * timer);
• 添加计时器,在动作函数中打印 hello 信息• 如果不删除计时器,或者还没到时间就卸载模块
会怎样?– 注意可能会死机,要注意文件存盘先
Γ
В 题目: gcc 和 glibc
• glibc
• gcc
Γ
В -
• C Run-Time Libraries in Windows• printf(), memcpy(), fopen(), …
– .h• stdio.h, stdlib.h, string.h,
– .lib– .dll
• Standard C++ Library
Γ
В 题目:键盘支持
• 键盘是最基本的输入支持设备• 分析内核中是如何管理键盘设备的• 键盘是字符设备
• ./drivers/char/keyboard.c– handle_scancode()
• ctrl_alt_del是怎样实现的?
Γ
В 题目:扩充一个系统调用
• 找一个空闲的调用号 k– 查看你的内核源代码的源程序– 得针对你正所用的内核版本
• 把 syscall表中的 k位置指向你的调用函数– 不必编译完整的内核– 在模块初始化中做即可
• 在用户程序发起一个对 k 的调用– 使用 int80h ,调用号放在 ? 中
• 如果模块卸载了,用户还调用会怎样?
Γ
В 题目:截获一个系统调用
• 截获谁有意思呢?– open– read– …
• 写一个自己的 sys_myopen() 函数把 syscall表中的 OPEN项指向自己– 可以在该函数中隐藏某种后门– 在该函数中,做了额外的相关处理之后,不要忘了还得调用旧的 sys_open 函数
– 记得卸载模块时恢复旧的调用
Γ
В 题目:审计或识别某种动作
• 用户正在访问哪些文件• 是否存在某个进程是个病毒进程 ( 类似等等 )• 用户正在访问哪些站点• 网络接口正在接收或处理哪些异常的包?
– 有网络入侵的尝试在发生吗?
• 尝试做一个方面就行– 或仅仅是设想或论述一下也可
Γ
В 题目: Linux 主要发行版介绍
• Redhat
• Debian
• SuSE
• Mandrake
• …
Γ
В 题目: Linux in VMWare
• 两个题目:– Linux in VMWare– Solaris in VMWare
• 另:推荐 Virtual PC
Γ
В 题目: Gentoo 安装
• Gentoo 的安装真原始,倒是挺锻炼基本功的。
Γ
В 题目:试用报告 knoppix 等
( 1 ) Knoppix( 2 ) Lindows( 3 ) BeOS• 下载• 安装• 试用
• 报告– 比较、评价
Γ
В 了解 RTOS
• Realtime Linux
• QNX
• VxWorks
• DOS
• Windows CE .NET
• Windows XP embed
• 试用报告
Γ
В 试用 wine 等
• WINE
• CrossOver
• WineX
• ?
• 试用报告
Γ
В 题目:诸许可比较
• GPL
• BSD
• …
• 商业模式
Γ
В 题目: Computing 和 Linux
• Computing – Super Computing– Parallel Computing– Cluster Computing– Distributed Computing– Grid Computing– NUMA vs. SMP vs. others
• Linux 在 Computing 中的地位和关系• PVM / MPI
Γ
В -
• Linux集群技术– Beowulf – Legion – Giganet cLAN – Cplant – MOSIX
Γ
В 题目 : VPN in Linux
• OpenVPN
• Free S/WAN
• OpenVPN 较好操作,建议以 OpenVPN为主,并和 swan 简单比较
• 以 OpenVPN为工具组件虚拟私有网
Γ
В 题目: Samba 试验
• 配置 samba in Linux
• 从 linux 中访问 windows 的共享目录• 从 windows 中访问 linux 的共享目录
• 报告
Γ
В 题目:使用 /proc
• 使用 /proc 调整内核运行参数
Γ
В 题目:配置 LXR
• 用 LXR建立一个 Linux 内核源代码阅读站点
Γ
В 题目: xinetd
• xindet 的原理和机制
• xindet 中服务程序设计规范
• 举例
Γ
В 题目: wrapper
• TCP Wrapper
• hosts.deny hosts.allow
Γ
В EMACS
Γ
В TeX
Γ
В 读书报告
• 选择某本相关书籍• 系统阅读• 读书笔记
– 关键内容、实例运行、问题解决• 章节选讲
– 就某个较典型的问题及其相关内容报告
Γ
В 综合设计
• 例子
设计(硬件+接口+驱动)
Γ
В User-mode linux
• 主站– http://user-mode-linux.sourceforge.net/
• 介绍短文– 在 http://www-900.ibm.com/cn/
• 查” user mode linux”
Γ
В uClinux
• ARM+uClinux
Γ
В 开发工具
• GCC
• Sun ONE Studio
• NetBeans
• Kylix
• Eclipse
• Google(“年度最受用户喜欢开发的工具” )
Γ
В FaQ