嵌入式操作系统

陈香兰
Fall 2009


主讲老师信息


  • 陈香兰(xlanchen@ustc.edu.cn)
    • 课程接待日:周一晚上,亲民楼316,来之前请先电话联系
    • 联系信息(合肥,周三~周五):科大西区电三421,0551-3606864-83
    • 联系信息(苏州,周一~周二):亲民楼316,0512-87161316

    助教信息


  • 人数(2人,目前到位2人)
    1. 冯晓静
    2. Email: bangyan@mail.ustc.edu.cn
      Phone(L): 0512-87161316
      实验室: 亲民楼316
    3. 刘军卫
    4. Email: limm@mail.ustc.edu.cn
      Phone(L): 0512-87161316
      实验室: 亲民楼316

    参考书


  • Buliding Embedded Linux Systems, by Karim Yaghmour (O'reilly), April 2003
  • 源码开放的嵌入式系统软件分析与实践——基于SkyEye和ARM开发平台,陈渝等编著,北航出版社,2004.9
  • Understanding the Linux Kernel (O'reilly)
  • 各种网站

  • 课时和上课时间


    课时:3课时/次*2次/周*8周+考试=50课时
    教学周
    星期一
    (14:00~16:25)
    9.7 9.14 9.21
    交作业
    9.28 10.5(放假) 10.12
    交作业
    10.19 10.26 11.2
    星期二
    (14:00~16:25)
    9.8 9.15 9.22 9.29 10.6(放假) 10.13 10.20 10.27 11.3
    交作业

    幻灯片


  • 0,课程介绍
  • 1.1,嵌入式系统及嵌入式软件开发概述
  • 1.2,嵌入式操作系统和选型
  • 2,GNU Tools
  • 3,armlinux的启动
  • 4,skyeye简介(update:2009-10-12)
  • 5,bootloader简介
  • 6,bootloader举例(u-boot和RedBoot)
  • 7,Building Embedded Linux System1
  • 8,Building Embedded Linux System2
  • 9,Ubuntu init简介
  • 10,Linux-2.6.26进程管理
  • 11,Linux-2.6.26进程调度
  • 12,Linux-2.6.26 interrupt
  • 13,Linux-2.6.26 clock and timer
  • 14,Linux-2.6.26 syscall arm
  • 15,Linux-2.6.26 内存管理
  • 16,Linux-2.6.26 地址空间管理
  • 17,Linux-2.6.26 虚拟文件系统
  • 18,Linux-2.6.26 I/O管理


  • 考试部分参考资料


    报告和上机


  • 第一次:嵌入式操作系统调研
    • 通过各种网络资源,了解目前在嵌入式各个领域中占据主要市场的嵌入式操作系统有哪些(要给出出处,参考文献等)
    • 选择你感兴趣的某个领域,举例说明这个领域(或某项产品)对嵌入式操作系统的需求有哪些?举例说明某个嵌入式操作系统是如何满足这些需求的。
    • 了解目前,嵌入式专业相关的工作有哪些?需要哪些技术积累?
    • 给出调研报告

  • 第二次:基于Arm的linux的启动分析
    • 首先进行Makefile的分析,在分析过程中
      • 获知不同的启动方案
      • 获知典型启动方案的代码结构
    • 选择一种启动方案,进行基于arm的Linux的启动分析,分析直到调用start_kernel为止

    • 难度:bootpImage>zImage>Image

    • 提供详细分析报告(要求:比课上的要详细)

  • 第三次:skyeye和Linux
    • 在skyeye上成功跑出armlinux和uCLinux
      • 可以使用现成的映像,可以自己编译[可选,加分]
      • 分别将hello加入到armlinux和uCLinux的根文件系统中,在skyeye上启动armlinux和uCLinux并运行hello
      • 提交报告,要求要说明
        1. 被使用的armlinux和uCLinux的版本和Linux内核的版本
        2. [可选,加分]若自己编译了内核,给出编译armlinux和uCLinux的交叉编译器的版本和编译过程
        3. 编译hello的交叉编译器的版本和编译过程
        4. 给出关键输出的图示
    • 难度:armlinux>uCLinux>使用现成的内核

  • 第四次:uC/OS-II的编译、运行和移植
    • 安装dosbox,在dosbox中成功编译并运行C/OS-II
      • 通过阅读C/OS-II的源代码,掌握C/OS-II的编译过程和代码组成
      • 了解各个目录下的代码在C/OS-II中的作用
      • 分析C/OS-II是如何在dosbox中运行成功的
    • 安装bochs,在bochs中成功引导运行C/OS-II的EX1_x86L
      • 提示:
        • 参考linux-2.4.18中的启动代码,编写16位代码作为bootsect,加载C/OS-II内核,进入保护模式,跳转到C/OS-II内核入口运行
        • 改写C/OS-II中的汇编代码
        • 设置好中断向量表
        • 通过直接写VGA(0xB80000开始),25行80列,来输出信息(格式:双字符=ASCII码+颜色)
      • 要求:
        • 添加的文件或者修改的文件使用独立的目录/子目录
        • 尽可能不要修改COS-II目录下的文件,但可以拷贝出来修改
        • 提供使用手册
        • 以成功运行EX1_x86L为标准
    • 给出详细的实验报告

  • 第5次:Linux2.6下的虚拟字符驱动
    • 模拟一个字符设备,提供字符设备驱动
    • 在Linux 2.6环境中,动态加载虚拟字符驱动模块
    • 编写一个应用程序,对虚拟字符设备驱动进行读写
    • 课堂举例的参考


    Edited by xlanchen@ustc.edu.cn
    SuZhou, JiangSu, China.
    Fall, 2009.