亚嵌作为中国嵌入式教育行业的领头羊,对于目前众多学校对长时间的嵌入式职业培训一拥而上,质量参差不齐,教师水平达不到起码教学要求,使学生们在就业时处处碰壁,对嵌入式培训感到困惑的无序现象!亚嵌教研组根据亚嵌就业合作单位的多次研讨和交流,也为了满足目前学生要求参加高质量课程,学习高端嵌入式技术的强烈要求,亚嵌教研组特别组织目前亚嵌均有7年以上嵌入式项目经验和教学经验的强强师资阵容,经过几个月的研究和设计,重磅推出了亚嵌《嵌入式linux高级工程师培训班》课程,《嵌入式linux高级工程师培训班》课程体系涵盖嵌入式linux的基础教学,注重嵌入式linux内核和驱动开发的深度教学,课程由浅入深,理论+实践+项目的合理教学模式,循序渐进的从基础逐渐导入到嵌入式linux内核、驱动开发的技术精髓,摒弃照本宣科、灵活穿插讲师以往的开发实例,带领学生走进五彩缤纷的嵌入式世界,感受快乐而紧张的学生生活。特别值得一提的是,《嵌入式linux高级工程师培训班》以最优惠的方式,为学生们提供了目前国内最专业、最先进的教学管理体系,总共216个学时、嵌入式10个方面的系统学习使学生们不仅掌握嵌入式linux内核、驱动开发的基本技能,更深入了解到嵌入式linux技术的精髓,具备在实际开发中真正意义解决问题的能力。 如果你喜欢7年以上嵌入式项目开发经验的大龄老师,如果你喜欢在linux的真实环境下学习开发、如果你喜欢可以操作各种最新型号开发板、如果你喜欢可以不限次数免费重听,如果你喜欢不限时间的免费的培训后的专业技术支持,如果你喜欢与跟你一样喜欢以上情况的有志之士成为同学的话,并且敢于面对挑战、愿望成为拥有开源精神的真正意义上的嵌入式内核、驱动研发工程师,那么,请你加入到亚嵌来,在这里,你将不再孤单!
开课情况
近期开班:9月17日(已报满),11月19日(报名中)
招生名额: 15人
为保证教学质量,本班为小班授课,15人为满,报满15人即停止报名或顺延下一期,如您决定上课请及时填写报名表并办理报名手续。
(报名时需携带本人身份证复印件1张及本人一寸照片3张)
开班信息
上课地点:北京亚嵌科技有限责任公司-清华园教学区
课程特点:课后通过《嵌入式Linux系统工程师高级认证》的学生,签订就业协议,保证就业、保证底薪。
基础要求
基础要求:(拒绝零基础)
1.计算机相关专业本科及以上学历
2.或者计算机相关专业有2年以上软件开发或者硬件开发工作经验的技术人员
3.热爱软件开发工作、学习态度端正、C语言编程熟练、熟悉Linux基本操作、熟悉计算机组成原理、有志从事嵌入式研发工作。
课程特点
2. 课程设置科学、实用性强:涵盖嵌入式Linux下C语言强化、ARM开发、嵌入式Linux应用开发、嵌入式Linux系统高级编程、嵌入式Linux内核移植、嵌入式Linux驱动、嵌入式Linux驱动高级研修、linux内核设计高级技术研修、嵌入式Linux项目实战、 9个方面,全面、系统、专业地学习嵌入式开发技术;
3. 毕业可免费参加亚嵌《嵌入式Linux系统工程师高级》认证,通过认证的学生,保证就业;
4. 保证教学质量,承诺本期学习未消化,不限次数免费重听相同课程,不限次数免费参加亚嵌《嵌入式Linux系统工程师高级》认证,直至通过认证,保证就业;
5 . AKAE 6410开发板实操教学,人手一块,linux操作系统(非虚拟),实际开发环境。
嵌入式Linux下C语言编程(一)
金牌讲师:张老师
亚嵌 金牌讲师 北京大学博士,12年C语言编程经验,10年项目开发经验,6年项目管理经验,有良好的计算机理论知识结构,有丰富的软件工程及项目管理经验,国家863项目课题组副组长。在亚嵌讲授嵌入式linux应用开发、linux内核、嵌入式linux驱动开发等部分课程,深受广大学员的认可和欢迎。
| 课程内容 |
|---|
| 函数 |
|
函数为程序员提供了最基本的代码复用能力,函数在调用返回时究竟发生了什么?局部变量如何分配空间?可变参数列表的机制如何?我们将在这个环节深入底层,去揭开函数调用的面纱。 函数的类型和返回值 函数的参数传递 函数调用过程中的栈帧结构 可变参数列表 递归函数调用 |
| 指针 |
|
指针,它让C语言与众不同。如何判断指针的类型?指针的速度真的快么?指针运算和整数运算有何不同?指针和数组一样么,不一样么?我们将在这个环节用简单明了的技巧解决一系列含混的指针问题。 判断指针的类型 指针的运算 数组和指针的同异 指向函数的指针 指针与抽象 |
| 预编译 |
| 如果说指针是C语言的灵魂,那么预编译就是C语言的生命。预编译使得C语言可以变化出多样的外观。预编译如何提高编码的效率?宏定义中有哪些陷阱?文件包含的时候发生了什么?我们将在这个环节用精确的语言来阐述完整的预编译的技巧。 对象宏和函数宏 宏定义技巧和常见错误 #和##运算符 条件编译 文件包含 |
| 字符串 |
|
字符串处理,这大概是C语言最不擅长的事情。C语言的字符串处理有许多被遗忘的角落。在这一阶段,我们带领你重拾C语言的字符串处理函数,以充实你的C语言武器库。 C风格字符串 标准C字符串库函数一览 重点函数实现解析 C字符串处理范例 |
| 链接 |
|
链接使得程序员可以复用二进制的编译结果。不同种类的变量被放到了哪里?如何控制代码在内存中的位置?PC程序员也许不是很关心的这些问题,但这却是嵌入式程序员的必经之路。我们将在这个环节补上知识链条中缺失的一环。 链接和elf文件格式概述 程序的存储映像 链接脚本和嵌入式程序的存储 |
| 文件IO |
|
一切都是文件。在我们的整个课程体系中,我们将从不同的角度来审视这一句话。在这个阶段,我们用C语言来审视UNIX世界中的这个基本价值观。 流和IO重定向 文本文件与二进制文件 用标准C库进行文件操作 标准C和系统调用 |
ARM开发部分(二)
金牌讲师:李老师
亚嵌 金牌讲师,清华大学计算机系硕士,北京亚嵌科技有限责任公司专家讲师。10年软件开发经验,5年嵌入式行业教学经验。曾负责“国家863计划-虚拟漫游智能机器人平台项目”的控制软件总体设计和实施,并且基于 RTLinux 实时操作系统完成了“高技术研究发展计划项目-微小型直升机控制系统设计与姿态控制研究项目”。李明老师是《源码开放的嵌入式系统软件分析与实践——基于 SKYEYE 和 ARM 开发平台》一书作者,SkyEye 嵌入式开源项目核心开发成员,同时也是嵌入式开源项目lumit(嵌入式个人学习网(www.lumit.org)的创办者)。
| 课程内容 |
|---|
| 嵌入式系统概述与ARM简介 |
|
1 ARM处理器与其他体系结构处理器异同比较 2 ARM芯片选型 3 ARM外围硬件设计 4 ARM程序和算法 5 ARM操作系统(uC/OS-II/ARM Linux/uCLinux/WinCE) |
| ARM知识体系 |
|
1 ARM的特点(体系结构/流水线/异常处理/寄存器组织) 2 ARM内核概述(内核命名/应用内核/嵌入式内核/安全内核) 3 ARM内核系列 |
| ARM结构与编程 |
| 1 ARM的工作模式 2 ARM存储器格式 3 ARM运行模式 4 ARM寄存器组织 5 ARM的异常 6 流水线 7 AHBA总线 |
| ARM指令系统与汇编语言编程 |
|
1 ARM指令概述与特点 2 ARM寻址方式 3 ARM指令集 4 Thumb指令集 5 ARM汇编语言编程 |
| 使用ARM ADS 开发工具的方法、流程和技巧 |
|
1 编译器参数(armcc/armcpp/armasm) 2 链接器使用(armlink/scatter-file) 3 调试器及调试工具(axd/jtag) 4 辅助开发工具(fromelf/armprof/nmake/Makefile) 5 内存地址重映射(memory remap) 6 堆栈初始化(stack&heap) 7 RO/RW/ZI 段地址分配 8 系统呼叫机制(SoftWare Interrupt) |
| ARM启动代码工作原理 |
|
实验目的:掌握交叉编译环境的建立; 掌握内核的交叉编译; 掌握redboot的操作 实验要求:要求完成内核编译,上载,运行,直到hello world程序在目标板 上运行成功 实验内容:在S3C2410开发板上运行Linux。 |
| ARM异常和中断处理 |
|
1 异常向量表(exception vector table) 2 异常响应 3 产生异常后的处理过程 4 未定义指令异常的特殊用途 5 SWI 软中断指令与系统调用 6 异常返回处理流程 |
| ARM 开发工具实验 (实验1-8) |
|
实验1:安装开发工具实验 (ADS+AXD) 实验2:ADS 编程实验 (helloworld) 实验3:AXD 调试实验 (debug) 实验4:ARM 工具链实验 (armcc+armasm+armlink) 实验5:fromelf 实用工具实验 (fromelf) 实验6:uuencode 编码工具实验 (uuencode) 实验7:使用 Jtag 调试开发板实验 实验8:使用 Bootloader 下载执行实验 |
| ARM 体系结构与汇编语言实验(实验9-16) |
|
实验9: ARM 数据处理指令操作数寻址方式实验 实验10:ARM 内存访问指令寻址实验 实验11:ARM 堆栈指针寄存器实验 (r13) 实验12:ARM 返回连接寄存器实验 (r14) 实验13:ARM 程序计数器实验(r15) 实验14:ARM 程序状态寄存器实验(cpsr+spsr) 实验15:ARM 工作模式切换实验(svc+irq) 实验16:ARM 汇编与C语言混合编程实验 |
| ARM 开发板外设接口实验(实验17-24 ) |
|
实验17:ARM 开发板-启动代码烧写实验 实验18:ARM 开发板-LED显示灯实验 实验19:ARM 开发板-七段数码管实验 实验20:ARM 开发板-四位拨段开关实验 实验21:ARM 开发板-蜂鸣器实验 实验22:ARM 开发板-中断按钮实验 实验23:ARM 开发板-定时器实验 实验24:ARM 开发板-串口通讯实验 |
| ARM Bootloader 编写实验(实验25-32) |
|
实验25:ARM Bootloader-ledblink实验 实验26:ARM Bootloader-uart driver实验 实验27:ARM Bootloader-printf实验 实验28:ARM Bootloader-stdio实验 实验29:ARM Bootloader-shell实验 实验30:ARM Bootloader-command实验 实验31:ARM Bootloader-flashwrite实验 实验32:ARM Bootloader-autoboot实验 |
| ARM 异常和中断处理实验(实验33-40) |
|
实验33:ARM异常向量表实验 实验34:ARM软中断 SWI 异常发生和响应实验 实验35:ARM GPIO中断源使能触发实验 实验36:ARM GPIO中断处理和响应实验 实验37:ARM Timer定时器中断源使能触发实验 实验38:ARM Timer定时器中断处理和响应实验 实验39:ARM中断流程代码分层实验 实验40:ARM中断驱动框架实验 |
嵌入式linux应用开发(三)
金牌讲师:冯老师
亚嵌 金牌讲师 7年以上嵌入式软硬件开发经验,6年项目管理经验。历任南信工雷达实验室国家863项目"昆虫雷达"项目助理(在校期间)、硬件工程师(含驱动)、系统软件工程师、驱动组组长(驱动架构工程师)、高级嵌入式系统工程师(系统架构工程师)、项目经理、项目主管。擅长嵌入式Linux系统构建 (Bootloader-Redboot/U-boot、Kernel裁减、Fsystem-Busybox制作)、嵌入式 Linux接口和设备驱动开发、嵌入式 Linux中间件的移植 (QT3 Embedded、Boa/Lighttpd、Sqlite3等)、嵌入式 Linux应用产品开发 (软硬件)。
| 课程内容 |
|---|
| 交叉编译工具介绍与Bootloader启动代码分析 |
|
1 嵌入式Linux综述 2 嵌入式Linux开发基本概念 3 嵌入式Linux开发工具介绍 4 分析各种典型的bootloader(uboot、armboot、redboot) |
| 嵌入式Linux移植与根文件系统 |
|
1 Linux 与 uClinux 的目录结构 2 内核编译和配置 3 构建根文件系统 |
| 嵌入式图形系统的构建与开发 |
| 1. 嵌入式Linux图形用户界面 2. Qt的特点 3. Qt编程举例 4. Qt designer 5.为嵌入式应用定制Qtopia 6. 交叉编译 |
| 嵌入式数据库系统的构建与开发 |
|
1 关系数据库与Sql语言 2 使用Sqlite 3 嵌入式数据库的编程 |
| 嵌入式Linux开发与调试方法 |
|
1 gdb的调试命令介绍 2 应用程序开发的技巧 |
| 实验一:嵌入式linux开发环境建立 |
|
实验目的:掌握交叉编译环境的建立; 掌握内核的交叉编译; 掌握redboot的操作 实验要求:要求完成内核编译,上载,运行,直到hello world程序在目标板 上运行成功 实验内容:在S3C2410开发板上运行Linux。 |
| 实验二:根文件系统的建立 |
|
实验目的:掌握根文件系统的建立; 掌握静态编译,动态编译应用程序 实验要求:要求独立完成根文件系统的建立,编写一个hello world程序在 S3C2410上运行,并比较动态编译与静态编译的不同。 实验内容:在S3C2410上运行hello world程序。 |
| 实验三:基于S3C2410的QT实验 |
|
实验目的:掌握Qt应用程序的编译和运行,理解Qt在开发板上的移植 实验要求:要求独立编译QT库、资源和应用程序,并通过根文件系统的方 式在目标板上成功运行hello world程序或其他实例程序 实验内容:Qt命令行 Qt库函数 |
| 实验四:基于S3C2410的sqlite实验 |
|
实验目的:掌握Sqlite应用程序的编译和运行,在开发板上的运行 实验要求:要求交叉编译Sqlite,并通过测试程序静态连接Sqlite库,并通过 根文件系统的方式在目标板上成功运行hello world程序 实验内容:在ARM9 S3C2410开发板上运行Sqlite应用程序 |
| 实验五:Sqlite与Qt集成实验 |
嵌入式linux高级编程(四)
金牌讲师:朱老师
亚嵌 金牌讲师 清华大学计算机系博士,亚嵌 金牌讲师。具有多年计算机专业教学经验, 主讲“数据结构”、“操作系统”“Unix/Linux 基础”等课程。研究内容包括 Linux, FreeBSD, Solaris 等操作系统的应用与实现,同时还在开展并行算法应用及实现的研究项目,并一直在关注算法复杂性研究的新进展。
| 课程内容 |
|---|
| 第一部分IO接口高级编程 |
|
1 系统功能调用接口 2 标准I/O库接口 3 高级I/O |
| 第二部分 进程高级编程 |
|
1 进程控制 2 进程间的关系 3 信号(signal) |
| 第三部分 线程高级编程 |
| 1 进程与线程 2 Posix线程 3 线程的创建与结束 4 竞争和临界区概念 5 线程同步 |
| 第四部分 IPC高级编程 |
|
1 线程间通信与进程间通信 2 posix IPC 和 system V IPC 3 消息传递 4 同步 5 共享内存 |
| 第五部分 网络基础知识 |
|
1 网络基本概念 2 路由概念 3 TCP/IP各个层次的主要协议和功能 4 如何抓包并分析内容 |
| 第六部分 客户端/服务器编程 |
|
1 客户端与服务器概念 2 字节顺序 3 网络编程常用函数 4 socket概念及使用 |
| 第七部分socket网络高级编程 |
|
1 最简单的TCP C/S 2 添加错误处理 3 处理SIGPIPE信号 4 使用fork进行并发处理 5 使用select |
| 第八部分Web服务器编程 |
|
1 socket处理 2 http请求处理 3 文件请求处理 |
| 第一部分I/O实验 |
|
1 网络基本概念 2 路由概念 3 TCP/IP各个层次的主要协议和功能 4 如何抓包并分析内容 |
| 第五部分 网络基础知识 |
|
1 open/close/read/write综合实验 2 fcntl/ioctl综合实验 3 select练习 |
| 第二部分 进程实验 |
|
1 fork/wait/exec综合练习 2 mysh:简化实现的shell 3 mysh增强:支持重定向和管道 |
| 第三部分 线程实验 |
|
1 圆周率的近似计算 2 Producer_consumer问题 3 管程的C++实现 |
| 第四部分 IPC实验 |
|
1 最简单的TCP C/S 2 添加错误处理 3 处理SIGPIPE信号 4 使用fork进行并发处理 5 使用select |
| 第五部分 网络编程实验---C/S |
| 第六部分 网络编程实验---Web |
嵌入式linux移植(五)
金牌讲师:王老师
亚嵌 高级讲师,7年软件开发经验,3年Android研发经验,十余款上市手机开发经验,Linux开源俱乐部主要负责人精通linux内核调度器、内存管理、资源控制、时间系统、文件系统等,丰富的操作系统、驱动开发授课经验。组建管理国内一线Android开发团队,自07年专注于Android 系统开发,精通Marvell/Qualcomm平台架构,精通Android底层驱动,中间件开发,系统框架构建,有十余款上市手机开发经验。国内Linux开源俱乐部主要负责人,长期活跃在linux内核,Android等开发社区。
| 课程内容 |
|---|
| 嵌入式系统移植 |
|
1. 嵌入式系统移植基本概念 2. Bootloader移植 3. 操作系统移植 4. 应用程序移植 |
| Bootloader移植 |
|
1. U-boot简介和架构分析 2. U-boot代码要点分析 3. 实现自己的bootloader |
| Arm Linux核心移植架构分析 |
| 1. Linux的中断结构 2. Linux的定时器 3. Linux的设备地址映射 4. Linux基本I/O(serial或显示) 5. Linux的初试化 |
| Linux核心的初试化代码分析(ARM平台) |
|
1. 汇编中初始化,核心初始化pgd,虚拟空间的切换 2. 内存和硬件的初始化 3. 中断和定时器的初始化 4. 设备驱动的初始化 5. 根文件系统的挂载 6. init进程的启动 |
| Linux核心的编译和链接结构分析 |
|
1. Linux核心的makefile和Kconfig结构分析 2. Linux核心的链接脚本分析 |
| Linux核心的平台相关层代码分析 |
|
1. ARM平台相关层代码结构(arm) 2. S3C2410的平台相关层代码结构(plat-S3C24xx) 3. S3C2410板级相关层代码结构(mach-S3C2410) |
| Linux核心移植 |
|
1. 和板级移植相关的代码和数据结构 2. 和平台级移植相关的代码和数据结构 |
| 第一部分实验 |
|
实验一:构建、编译和装载自己的bootloader 实验二:x-modem功能的实现 实验三:启动Linux代码的实现 |
| 第二部分实验 |
|
实验一:编译和配置Linux核心(S3C2410平台) 实验二:修改Linux的启动logo 实验三:在Bootloader实验的基础上修改核心启动参数 实验四:实现ramdisk的挂载 实验五:实现一个简单的init进程 |
| 第三部分实验 |
|
实验一:S3C2410板级移植实验 实验二:S3C2410平台级移植实验 |
嵌入式linux驱动开发(六)
金牌讲师:王老师
亚嵌 高级讲师,7年软件开发经验,3年Android研发经验,十余款上市手机开发经验,Linux开源俱乐部主要负责人精通linux内核调度器、内存管理、资源控制、时间系统、文件系统等,丰富的操作系统、驱动开发授课经验。组建管理国内一线Android开发团队,自07年专注于Android 系统开发,精通Marvell/Qualcomm平台架构,精通Android底层驱动,中间件开发,系统框架构建,有十余款上市手机开发经验。国内Linux开源俱乐部主要负责人,长期活跃在linux内核,Android等开发社区。
| 课程内容 |
|---|
| Linux驱动程序开发基础 |
|
1. 驱动程序与模块概念 ◆ Linux设备驱动的概念 ◆ Platform device模型介绍 ◆ 模块的概念 ◆ 模块的构建、编译和加载 2.字符设备驱动程序 ◆ 字符设备驱动程序概念 ◆ 主设备号和次设备号 ◆ fs_operation结构分析 ◆ 驱动程序调试技术简单介绍 3. 中断处理 ◆ 中断机制 ◆ softirq机制 |
| Linux块设备驱动程序开发 |
|
1 Linux块设备驱动程序概要 ◆ 块设备驱动程序的特点和工作原理 ◆ 块设备驱动的设备文件接口概念 ◆ 块设备驱动的文件系统接口概念 2. Linux块设备驱动程序实现要素分析 ◆ 块设备驱动的注册接口(register_blkdev等) ◆ 块设备驱动操作接口(open,release,ioctl等) ◆ 块设备驱动的request队列和request操作 |
| 块设备代码分析 |
| 代码分析(vdisk.c) ◆ vdisk.c的注册接口 ◆ vdisk.c的open,release,ioctl ◆ vdisk.c的request队列和request操作 |
| LCD Framebuffer设备驱动程序开发 |
|
Framebuffer设备驱动 ◆ Framebuffer驱动程序原理,结构分析、及数据结构 ◆ Framebuffer驱动程序设计 |
| 网络设备驱动程序开发 |
|
1. Linux核心的makefile和Kconfig结构分析 2. Linux核心的链接脚本分析 |
| Linux核心的平台相关层代码分析 |
|
1. 网卡设备介绍 ◆ 常见网卡 ◆ 网卡芯片所实现的协议层功能 ◆ cs8900网卡芯片手册导读 ◆ cs8900网卡硬件电路分析 2. Linux网络驱动结构 ◆ Linux TCPIP网络结构概述 ◆ Linux网络设备结构 3. 网卡设备介绍 ◆ 常见网卡 ◆ 网卡芯片所实现的协议层功能 ◆ cs8900网卡芯片手册导读 ◆ cs8900网卡硬件电路分析 |
| USB设备原理 |
|
1. usb 概念介绍 2. usb host/client分类说明 3. usb 地址端点的使用 4. usb 四种传输类型及其作用 5. usb 协议实现及其详解 6. usb 设备即插即用过程 |
| 第一部分 驱动基础实验 |
|
实验一:模块的构建、编译和装载,hello world模块的实现 实验二:Platform device模型实验 实验三:GPIO按键实验——使用中断机制访问 |
| 第二部分 块设备驱动实验 |
|
实验一: 修改vdisk.c支持多个设备 实验二: 在实验一基础上为vdisk.c添加字符设备接口实现 (实现open,close,ioctl,read,write,lseek方法) |
| 第三部分 Framebuffer实验验 |
|
实验一:LCD Framebuffer——通过mmap操作fb设备 实验二:LCD Framebufferr——通过mmap显示图片 |
| 第四部分 字符设备驱动实验 |
|
实验一:ifconfig等命令实验 实验二:字符设备的网卡驱动实现(上) 实验三:字符设备的网卡驱动实现(下) 实验四:驱动的测试程序编写 |
嵌入式linux驱动高级研修(七)
金牌讲师:王老师
亚嵌 高级讲师,7年软件开发经验,3年Android研发经验,十余款上市手机开发经验,Linux开源俱乐部主要负责人精通linux内核调度器、内存管理、资源控制、时间系统、文件系统等,丰富的操作系统、驱动开发授课经验。组建管理国内一线Android开发团队,自07年专注于Android 系统开发,精通Marvell/Qualcomm平台架构,精通Android底层驱动,中间件开发,系统框架构建,有十余款上市手机开发经验。国内Linux开源俱乐部主要负责人,长期活跃在linux内核,Android等开发社区。
| 课程内容 |
|---|
| Linux操作系统核心基础 |
|
调度,互斥量和锁等的实现原理 中断的上下部,定时器,内核线程 等待队列和工作队列,tasklet等 Linux核心的内存管理(页面分配,slab,kmalloc,DMA内存 Linux设备管理模型和sysfs文件系统 |
| Linux的input驱动 |
|
嵌入式系统中的键盘和触摸笔硬件结构原理 Input子系统介绍 Input的事件和设备驱动框架结构 akae2440 button代码分析 【实验】 实验1:编写akae2440下的button驱动 实验2:利用akae2440的蜂鸣器实现按键音 |
| Linux的audio驱动 |
| 嵌入式系统中的音频硬件结构原理 Linux下的audio驱动结构 akae2440音频驱动代码分析 |
| 实验 |
|
实验1:配置alsa音频库代码 实验2:调试akae2440音频驱动,使之可以正常工作 实验3:利用alsa音频库在akae2440下实现一个简单的mp3播放器 |
| Linux下的MTD驱动 |
|
Nor和NAND Flash硬件结构 Linux的MTD子系统 Yaffs文件系统和MTD子系统的结合 Nandsim驱动代码分析 |
| 实验 |
|
实验1:配置和调试Nandsim驱动代码 实验2:mtdutils工具的学习和使用 实验3:Yaffs文件系统的烧写和配置 |
| Linux下的USB驱动 |
|
USB工作原理介绍 Linux的Host端驱动代码结构 Linux的device端驱动代码结构 驱动代码分析 |
| 实验 |
|
实验1:学习使用Linux下的usb分析工具 实验2:配置和实现Linux的cdc-acm驱动,实现PC和开发板间的USB通信 实验3:配置和实现Linux的mass_storage驱动,实现将s3c2440开发板配置为一个U盘 |
| Linux设备驱动调试主题 |
|
Kprobe和核心opps的定位 性能分析Oprofile和Linux Trace Toolkit Kgdb的工作原理介绍 |
| 实验 |
|
实验1:使用Kprobe接口编写驱动 实验2:学习分析opps的结果 实验3:学习Oprofile和Linux Trace Toolkit分析工具 实验4:学习配置kgdb,并实现通过串口对核心和驱动进行源代码级调试 |
linux内核设计高级技术研修(十)
金牌讲师:王老师
亚嵌 高级讲师,7年软件开发经验,3年Android研发经验,十余款上市手机开发经验,Linux开源俱乐部主要负责人精通linux内核调度器、内存管理、资源控制、时间系统、文件系统等,丰富的操作系统、驱动开发授课经验。组建管理国内一线Android开发团队,自07年专注于Android 系统开发,精通Marvell/Qualcomm平台架构,精通Android底层驱动,中间件开发,系统框架构建,有十余款上市手机开发经验。国内Linux开源俱乐部主要负责人,长期活跃在linux内核,Android等开发社区。
| 课程内容 | ||
|---|---|---|
| 第一部分 | ||
| 1.1 Linux内核的整体架构 | 1.2 Linux内核版本演进规则 | |
| 1.2.1开发版本 | 1.2.2稳定版本 | |
| 1.3 Linux内核源码管理工具(git) | 1.3.1Git环境配置 | |
| 1.3.2Clone Linux内核库 | 1.3.3Git 常用命令介绍 | |
| 1.3.4建立自己的补丁文件(patch) | 1.4 参与Linux内核开发 | |
| 1.4.1 Linux内核开发相关社区 | 1.4.2主要邮件列表 | |
| 1.4.3各模块的维护者(Maintainer) | 1.4.4提交我的patch | |
| 1.4.5代码Review过程中的沟通技巧 | ||
| 第二部分 | ||
| 2.1 Linux内核中的地址类型 | 2.1.1 物理地址 | |
| 2.1.2 总线地址 | 2.1.3 逻辑地址 | |
| 2.1.4 虚拟地址 | 2.2 内存管理单元(MMU)对虚拟地址的支持 | |
| 2.2.1 页表的结构(PGD/PMD/PTE) | 2.2.2 页面属性与访问权限的定义 | |
| 2.2.3 Arm启动过程中第一张页表的建立 | 2.2.4 Arm体系结构中如何保护内核地址空间不受用户程序访问 | |
| 2.3 Linux内核地址空间的划分 | 2.3.1 Low Memory与 High Memory | |
| 2.3.1.1 低端内存与高端内存的划分 | 2.3.1.2三层内存管理结构 node/zone/page | |
| 2.3.1.3 bootmem初始化及管理策略 | 2.3.2 模块加载地址空间 | |
| 2.3.2.1 模块的本质 | 2.3.2.2 模块加载时地址空间如何分配 | |
| 2.3.2.3 模块引用内核资源的过程 | 2.3.3 线性地址空间 | |
| 2.3.3.1 内核Text/Data/BSS段的映射 | 2.3.3.2 可分配页的管理-伙伴算法 | |
| 2.3.3.3 Kmalloc与Slab分配器 | 2.3.4 Vmalloc地址空间 | |
| 2.3.4.1 非线性映射的内存分配 | 2.3.4.2 ioremap的本质 | |
| 2.3.4.3 Vmalloc的结果能否在不同任务间共享 | 2.3.5 DMA映射地址空间 | |
| 2.3.5.1 Cache对DMA影响 | 2.3.5.2 什么情况下需要分配DMA空间 | |
| 2.3.5.3 与Kmlloc和Vmalloc的比较 | 2.3.6 I/O固定映射空间 | |
| 2.3.6.1 哪些体系结构需要I/O固定映射 | 2.3.6.2 I/O固定映射过程分析 | |
| 2.3.7 向量映射空间 | 2.3.7.1 中断异常的物理入口地址 | |
| 2.3.7.2 向量的映射过程 | 2.3.7.3 如何分布处理函数 | |
| 2.3.8 高端内存的映射(Kmap与Kmap atomic) | 2.4 Linux进程用户地址空间 | |
| 2.4.1 零至PAGE_OFFSET地址空间的划分 | 2.4.1.1用户Text段之前的保留空间 | |
| 2.4.1.2 用户堆与栈 | 2.4.1.3 malloc与mmap | |
| 2.4.1.4 堆的增长与brk的本质 | 2.4.1.5 动态运行库驻留空间 | |
| 2.4.2 进程用户空间的管理 | 2.4.2.1 进程控制块与mm_struct结构体 | |
| 2.4.2.2 进程合法地址空间与非法地址空间 | 2.4.2.3 合法地址空间链表(vm_area_struct list) | |
| 2.5 缓存 | 2.5.1 块设备的页面缓冲page cache | |
| 2.5.2 文件系统的缓冲swap机制 | ||
| 第三部分 | ||
| 3 进程与线程 | 3.1进程的概念 | |
| 3.1.1 内核与用户空间看进程 | 3.1.2 一个进程的资源 | |
| 3.1.3 struct task_struct | 3.1.4 进程的核态堆栈与用户态堆栈 | |
| 3.1.5 current是什么,如何获得 | 3.2进程的生命周期 | |
| 3.2.1 系统建立的零号进程和一号进程 | 3.2.2 进程的创建 | |
| 3.2.2.1 fork/clone的种类与实质 | 3.2.2.2 重要的函数copy_process | |
| 3.2.2.3 COW机制 | 3.2.3 进程创建后的返回 | |
| 3.2.4 进程的消亡 | 3.2.4.1 do_exit释放部分资源 | |
| 3.2.4.2 父进程对核态资源的释放 | 3.3进程的调度 | |
| 3.3.1 进程的状态 | 3.3.2 内核中的几种调度策略 | |
| 3.3.3 实时进程与普通进程 | 3.3.4 O(1)调度器 | |
| 3.3.4.1 runqueue与expired queue | 3.3.4.2 prio与static_prio | |
| 3.3.4.3 load balance机制 | 3.3.5 CFS调度器 | |
| 3.3.5.1 CFS的sched class | 3.3.5.2 runqueue | |
| 3.3.5.3 与O(1)相对应的几项改进 | 3.3.6 如何改变进程的优先级 | |
| 3.3.7 如何绑定进程的调度算法 | 3.4用户进程与线程 | |
| 3.4.1 用户进程的执行加载过程 | 3.4.2 用户线程库 | |
| 4时间与定时器 | 4.1 linux内核中时间基准 | |
| 4.1.1 实时时间基准 | 4.1.2 系统时间基准 | |
| 4.2 timekeeping | 4.2.1 时钟源clocksource | |
| 4.2.2 系统计时的核心xtime | 4.2.3 do_gettimeofday()/do_settimeofday() | |
| 4.2.4 如何进行时间校准 | 4.3 generic time框架 | |
| 4.3.1 clockevent设备 | 4.3.2 oneshot与periodic | |
| 4.3.3 clockevent下如何实现tick(LRT) | 4.3.4 非clockevent下如何实现tick | |
| 4.3.5 jiffies_64 update | 4.4 定时器 | |
| 4.4.1 低精度时钟定时器 | 4.4.2 高精度时钟定时器 | |
| 4.4.3 真的可以实现纳秒吗 | 4.5 dynamic tick | |
| 4.5.1 由tick向dyna tick的转变 | 4.5.2 idle task与dyna tick | |
| 5 中断 | 5.1中断管理的硬件支持 | |
| 5.1.1 体系结构级(CPU级) | 5.1.2 中断控制器级(VIC级) | |
| 5.1.3 设备级 | 5.2 Linux内核中体系结构相关的中断管理 | |
| 5.2.1 中断向量表 | 5.2.2 中断入口及现场保存 | |
| 5.2.3 现场恢复及中断返回 | 5.2.4 local_irq_enable/disable | |
| 5.3 Linux内核中平台相关的中断管理 | 5.3.1 中断控制器的初始化 | |
| 5.3.2 irq_chip与中断注册 | 5.3.3 级联中断的管理 | |
| 5.3.4 如何实现level与edge trigger的中断 | 5.3.5 如何实现唤醒中断 | |
| 5.4 Linux内核中设备级的中断管理 | 5.4.1 请求中断 | |
| 5.4.2 中断处理函数的实现 | 5.4.3 如何实现中断共享 | |
| 5.5 Linux内核中体系无关的中断管理 | 5.5.1 关键结构体irq_desc与irq_action | |
| 5.5.2 irq_enter | 5.5.3 generic_handle_irq | |
| 5.5.4 irq_exit与softirq | 5.5.5 中断处理过程中的开中断与关中断 | |
| 5.6 softirq | 5.6.1 系统预留的softirq | |
| 5.6.2 如何trigger一个softirq | 5.6.3 softirq的运行时机 | |
| 5.6.4 tasklet与rcu | 5.6.5 如何实现自己的softirq | |
| 6异常与系统调用 | 6.1 异常的基本概念 | |
| 6.1.1 系统中能够处理异常的种类 | 6.1.2 异常与中断的关系 | |
| 6.1.3 异常向量表 | 6.2 页面相关异常 | |
| 6.2.1 缺页异常的处理 | 6.2.2 访问权限异常的处理 | |
| 6.3 无效指令异常 | 6.3.1调试器stub的实现 | |
| 6.3.2 浮点指令的模拟 | 6.4 对齐异常的处理 | |
| 6.5 系统调用 | 6.5.1 系统调用与异常的区别 | |
| 6.5.2 系统调用号,参数与返回值 | 6.5.3 系统调用与用户library | |
| 第四部分 | ||
| 7 内核编程用到的若干互持同步机制 | 7.1原子操作 | |
| 7.1.1原子操作的意义 | 7.1.2体系结构相关的实现 | |
| 7.1.2.1 armv6以前的实现 | 7.1.2.2 armv6以后的实现 | |
| 7.1.2.3 mips32如何实现原子操作 | 7.1.3如何正确使用原子操作 | |
| 7.2 自旋锁(spinlock) | 7.2.1 spinlock的特点与意义 | |
| 7.2.2 SMP下的spinlock | 7.2.3 UP下的spinlock | |
| 7.2.4体系结构相关的实现 | 7.2.4.1 armv6以后的实现 | |
| 7.2.4.2 mips32下的实现 | 7.2.5各种spinlock的变体锁 | |
| 7.2.6如何正确使用spinlock | 7.3 信号量(semaphore) | |
| 7.3.1 semaphore的特点与意义 | 7.3.2 semaphore的实现本质 | |
| 7.3.3 semaphore的变体锁 | 7.3.4如何正确使用semaphore | |
| 7.4 RCU | 7.4.1 RCU的特点与意义 | |
| 7.4.2对reader的保护过程 | 7.4.3对writer的保护过程 | |
| 7.4.4 RCU softirq | 7.4.5如何正确使用RCU | |
| 8 信号(signal) | 8.1信号的本质 | |
| 8.1.1用户空间看信号 | 8.1.2从内核看信号 | |
| 8.2信号的类型 | 8.2.1 Linux兼容的几大标准 | |
| 8.2.2基本信号 | 8.2.3实时信号 | |
| 8.3信号的处理过程 | 8.3.1捕捉,屏蔽,忽略 | |
| 8.3.2信号的设置及其本质 | 8.3.3信号的调用时机 | |
| 8.3.4核心如何调用用户定义的信号处理函数 | 8.3.5被打断的系统调用如何处理信号 | |
| 8.3.6信号处理函数如何返回 | 8.4信号的使用 | |
| 8.4.1 init进程为何不能被杀死 | 8.4.2两个不能被屏蔽的信号 | |
| 8.4.3信号相关的系统调用 | 9 电源管理 | |
| 9.1 嵌入式应用中常用得几种节电方案 | 9.1.1 嵌入式应用的特点 | |
| 9.1.2 电池供电与节电需求 | 9.2 suspend/resume | |
| 9.2.1 suspend/resume的执行框架 | 9.2.2 体系结构层的挂起与唤醒 | |
| 9.2.3 设备驱动的挂起与唤醒 | 9.3 cpuidle | |
| 9.3.1 cpuidle的几个级别 | 9.3.2 体系结构层如何实现cpuidle | |
| 9.4 cpufreq | 9.4.1 频率和电压的调节 | |
| 9.4.2 体系结构层如何实现cpufreq | 9.4.3 如何选择governor | |
| 9.5 Android系统电源管理介绍 | 9.5.1 wakelock 机制 | |
| 9.5.2 earlysuspend机制 | 9.6 调度器对PM的支持 | |
| 9.6.1 进程迁移 | 9.6.2 多cpu负载均衡 | |
| 9.6.3 Numa体系Cache均衡 | ||
嵌入式linux项目一实战(八)
金牌讲师:熊老师
亚嵌 金牌讲师熊老师 :自动化专业硕士,曾在华为技术有限公司担任软件工程师,主要负责组播路由协议代码的开发、维护。精通ARM体系结构,深入研究外围串口、I2C设备、存储模块及网卡工作原理。对于Linux系统内核、TCP/IP协议均有深入研究。在数学建模、模式识别方面有相当的技术造诣。熟悉VxWorks、uCLinux、uC/OS-II等嵌入式操作系统,精通Qt图形用户接口编程。
| 课程内容 |
|---|
| 项目需求分析说明书 |
|
编写需求分析报告的要求 需求分析报告的编制者 需求报告评审 需求报告格式 |
| 项目概要设计说明书 |
|
编写概要设计的要求 概要设计报告的编写者 概要设计和需求分析、详细设计之间的关系和区别 概要设计的评审 概要设计格式 |
| 项目详细设计说明书 |
|
详细设计的要求 详细设计的评审 详细设计格式 |
| 测试分析报告 |
|
界面测试 可用性测试 功能测试 稳定性(强度)测试 性能测试 逻辑性测试 |
| 编码调试 |
|
软件编码的要求 编码的评审 编程规范及要求 |
| 项目开发总结报告 |
|
合法性检查 软件代码测试 软件文档检查 软件系统测试 测试结果交付方式 |
嵌入式linux项目二实战
金牌讲师:熊老师
亚嵌 金牌讲师熊老师 :自动化专业硕士,曾在华为技术有限公司担任软件工程师,主要负责组播路由协议代码的开发、维护。精通ARM体系结构,深入研究外围串口、I2C设备、存储模块及网卡工作原理。对于Linux系统内核、TCP/IP协议均有深入研究。在数学建模、模式识别方面有相当的技术造诣。熟悉VxWorks、uCLinux、uC/OS-II等嵌入式操作系统,精通Qt图形用户接口编程。
| 课程内容 |
|---|
| 嵌入式Linux项目实战 |
|
设计并实现一个真实和完整的嵌入式项目的开发流程,涉及到数据采集、网络通讯、图形用户界面显示以及嵌入式数据库存储系统等多种嵌入式Linux编程技术。要求学员建立起团队开发和协同工作的企业项目开发模式的概念和流程,强化学员对编写项目概要设计文档和详细设计文档的理解,为就业前的职业技能和素质训练做好充分准备。 * ARM Linux的内核编译与裁剪 * 根文件系统的搭建与裁剪 * A/D转换设备驱动程序 * socket网络通信程序 * sqlite和CGI应用程序 * 用户界面设计 * 概要设计文档、详细设计文档、用户使用说明书 |
嵌入式硬件设计班(九)
金牌讲师:赵老师
亚嵌高级讲师,硕士,9年嵌入式系统开发经验,5年嵌入式行业教学经验。多年来从事嵌入式系统开发,精通硬件设计,设计过大量ARM,DSP,FPGA开发板。精通ARM体系结构,成功将uClinux和MiniGUI移植到S3C44B0,精通嵌入式ARM处理器,精通FPGA设计。《See MIPS RUN》一书第一版中译版第一译者。
| 课程内容 | |
|---|---|
| 理论课 学时:18学时 | |
|
第一天上午(3学时) PCI局部总线介绍 1) PCI局部总线发展 2) CPCI介绍 3) PMC介绍 |
第一天下午(3学时) PCI局部总线信号 1)PCI局部总线信号定义 2)讨论用户的需求 |
|
第二天上午(3学时) PCI板卡设计 1) 介绍常用PCI桥接口芯片 2) 讲解PLX9054芯片 3) 讲解PLX9054设计实例 |
第二天下午(3学时) PCI接口设计实例 1) 讲解PLX9054设计实例 2) 讨论PLX9054RDK板图 3) PLX9054RDK板实验 |
|
第三天上午(3学时) PCI的PCB 设计 1) PCI 33MHz板设计 2) PCI 66MHz板设计 3) 高速PCB设计 |
第三天下午(3学时) PCI到PCI桥介绍 1) INTEL21152 、INTEL21154 2) PMC板卡介绍和载板介绍 3) 师生交流 |





