迅为嵌入式Linux学习笔记1——框架学习法

迅为嵌入式Linux学习笔记1——框架学习法

知识体系

  • C语言
  • 数字电路基础(单片机)
  • ARM体系结构
  • 硬件设计(ARM接口技术)
  • Linux系统与管理
  • Linux系统开发
  • Linux驱动开发
  • BootLoader(UBOOT)
  • QT和C++
  • Android系统和JAVA

UBOOT学习框架

入门级

  1. 了解UBOOT是首先执行的片外程序
  2. UBOOT的主要任务是引导Linux内核启动
  3. UBOOT生命周期,调用关系
  4. UBOOT编译、烧写及UBOOT命令

工程师级

  1. 启动过程简单分析
  2. 修改读秒时间
  3. 启动模式配置
  4. CMDLINE
  5. 启动时的电灯方法

专家级

  1. 源码分析
  2. 系统移植
  3. 增加功能及创新开发

Linux系统框架

  • Linux大部分用C语言编写,少量汇编
  • Linux是个大程序,函数库
  • Linux提供了大量的资源(如:网络协议、多任务、内存管理、设备管理)
  • Linux让产品开发更简单
  • Linux架构越来越复杂,但使用越来越方便
  • 使用的方便性是以复杂的架构为代价

应用和驱动

  • 有了Linux,使软件开发人员分化成两类:应用于驱动
  • 应用开发人员可以不懂底层驱动,应用开发只关注业务逻辑,而驱动开发关注硬件特性
  • 应用程序通过‘系统调用’来使用内核资源
  • 驱动是Linux内核的一部分,驱动的架构越来越复杂,目的是为了我们做的事情越来越少

迅为嵌入式Linux学习笔记1——框架学习法_第1张图片

内核态和用户态

  • 用户态的程序不能直接访问硬件资源
  • 内核态和用户态不仅是软件上的抽象,ARM处理器本身就在硬件上支持这两种状态
  • ARM处理器的工作模式: 用户模式、系统模式、中断模式
  • 应用直接访问硬件会触发异常终端
  • 内核态和用户态的划分使系统更加安全,内核级有更高的特权
  • 进一步理解“系统调用”,他是用户态调用内核态函数的方法,一般通过“软中断”的方式
  • 软中断是软件指令触发,ARM有对应的指令,不同于按键等外部中断

迅为嵌入式Linux学习笔记1——框架学习法_第2张图片

Linux的文件系统

  • 文件系统可以直观理解为Windows上的文件资源管理器,应用程序放在文件系统当中
  • Linux启动后一定要挂接一个文件系统,但VxWorks,ucos等并不需要挂接
  • 文件系统可大可小,通过构造文件系统可衍生QT, Ubuntu, Android等系统
  • Linux的重要思想:一切皆文件
  • 硬件的操作(串口、led、按键)都可归结为:read, write, open, close

迅为嵌入式Linux学习笔记1——框架学习法_第3张图片### Linux初学者要搞清楚三个文件

  1. 引导程序(bootloader): uboot.bin / uboot.imx
  2. Linux内核镜像:zImage
  3. 文件系统镜像:system.img / rootfs.tar.bz2
  • 初期很多工作都是围绕这三个知识点展开的(开发环境搭建、编译系统、烧写系统)
  • 不同的系统文件名有差异
  • 设备树文件(可看成Linux内核的一部分)

在这里插入图片描述

Linux应用程序编程

  • 应用编程即Linux系统编程
  • 基于Linux内核之上,基于“系统调用”或者库函数的编程
  • Linux内核中设置了一组用于实现各种系统功能的子程序,称为系统调用
  • 系统调用由操作系统核心提供,运行于和心态;而普通函数调用由函数库或用户自己提供,运行于用户态
  • “系统调用”在ARM系统中一般用“软中断”的方式来实现
  • ARM处理器工作模式:用户模式、系统模式、终端模式

迅为嵌入式Linux学习笔记1——框架学习法_第4张图片

Linux应用编程框架

入门:

  1. 文件I/O基础
  2. 多线程多进程基础
  3. 网络socket编程
  4. 时间函数

进阶:

  1. 五种I/O模型
  2. 进程通信
  3. 线程同步
  4. 标准IO/文件共享dup/文件锁fcntl

系统调用

包括:

  • 文件io
  • 多进程
  • 多线程
  • 网络socket编程
  • 时间函数、文件系统操作
  • 用户管理、内存管理等

迅为嵌入式Linux学习笔记1——框架学习法_第5张图片

Linux文件I/O五种模型

  • 阻塞
  • 非阻塞
  • 信号
  • 多路复用
  • 异步

迅为嵌入式Linux学习笔记1——框架学习法_第6张图片

Linux多进程

  • 多进程是多任务在Linux上的具体实现,多任务是操作系统的基本功能
  • 进程的三种状态:就绪、阻塞、运行

迅为嵌入式Linux学习笔记1——框架学习法_第7张图片
多进程使用fork(),分岔;进程间通信方式:

  • 管道(匿名管道和命名管道)
  • 信号
  • 信号量
  • 消息队列
  • 共享内存
  • 套接字
    迅为嵌入式Linux学习笔记1——框架学习法_第8张图片

Linux多线程

  • 单个进程内可以运行多个线程,线程是操作系统时间片调度的最小单位
  • 每个线程可使用进程的全局变量
  • 线程生成函数:pthread_create()
  • 线程同步(共用资源,合理分配资源的方式):互斥锁、条件变量、读写锁、信号量

迅为嵌入式Linux学习笔记1——框架学习法_第9张图片

网络通信(socket编程)

网络通信是重点,很多操作系统的网络编程方式是一样的,都采用了socket方式。
迅为嵌入式Linux学习笔记1——框架学习法_第10张图片

Linux驱动开发

驱动演进历史:

时间 架构 系统版本
2001 – 2004 原始架构 V2.4
2004 – 2011 平台总线 V2.6
2012 – 至今 设备树 V3.1以后 V3.x
  • 总体上讲,产品开发越来越方便
  • 架构越来越复杂,但使用越来越简单,开发工作量减少

迅为嵌入式Linux学习笔记1——框架学习法_第11张图片

Linux驱动的原始架构(Linux V2.4)

  • “设备节点”,即设备文件(/dev/xxx),它是上层应用和底层驱动的桥梁
  • Linux:设备即文件(read, write)
  • 主设备号,次设备号,mknod()
  • 结构体 file_operations(函数指针)
  • register_chdev() – 系统注册
  • 用户态 read()->sys_read()->vfs_read()->驱动read
  • 原始架构依然很重要,里面的知识并没有被淘汰,而是被封装和继承了。

迅为嵌入式Linux学习笔记1——框架学习法_第12张图片

平台总线架构(platform)

  • Linux2.6版本,封装了原始架构,更加抽象
  • 引入了设备模型(sysfs),使得热插拔、电源管理得以加强
  • 好处:做产品更省事省力
  • 实现了BSP(板级支持包)和驱动的分离

迅为嵌入式Linux学习笔记1——框架学习法_第13张图片

Linux设备树

  • 设备资源独立了出来(arch/arm/mach-xxx/board-xxx.c),从C文件发展为DTS设备树脚本文件(arch/arm/boot/dts/xxx.dts)
  • 换个板子,不需要编译Linux系统,只要换个设备树文件就好
  • BootLoader参与传递设备资源(启动时需要把设备树文件传给内核)

迅为嵌入式Linux学习笔记1——框架学习法_第14张图片

Linux驱动演进的趋势

  • 越来越先进易用,但内部架构越来越复杂
  • “分离”,实际是一种模块化设计思路
  • “分层”,Linux中应用很普遍,屏蔽了底层的细节,增加了易用性

你可能感兴趣的:(嵌入式Linux,linux,学习,嵌入式)