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

本文详细介绍了嵌入式Linux的学习框架,包括C语言、ARM体系结构、Linux内核、驱动开发等多个层面。讲解了UBOOT的入门、工程师和专家级别知识,以及Linux系统的用户态和内核态、文件系统、多进程和多线程编程。同时,概述了Linux驱动的演进历程,从原始架构到平台总线再到设备树,展示了驱动开发的简化和进步。此外,还涵盖了网络通信和Linux应用程序编程的基础与进阶知识。
摘要由CSDN通过智能技术生成

迅为嵌入式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内核的一部分,驱动的架构越来越复杂,目的是为了我们做的事情越来越少

在这里插入图片描述

内核态和用户态

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

在这里插入图片描述

Linux的文件系统

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

在这里插入图片描述### 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. 文件I/O基础
  2. 多线程多进程基础
  3. 网络socket编程
  4. 时间函数
进阶:
  1. 五种I/O模型
  2. 进程通信
  3. 线程同步
  4. 标准IO/文件共享dup/文件锁fcntl

系统调用

包括:

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

在这里插入图片描述

Linux文件I/O五种模型

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

在这里插入图片描述

Linux多进程

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

在这里插入图片描述
多进程使用fork(),分岔;进程间通信方式:

  • 管道(匿名管道和命名管道)
  • 信号
  • 信号量
  • 消息队列
  • 共享内存
  • 套接字
    在这里插入图片描述

Linux多线程

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

在这里插入图片描述

网络通信(socket编程)

网络通信是重点,很多操作系统的网络编程方式是一样的,都采用了socket方式。
在这里插入图片描述

Linux驱动开发

驱动演进历史:

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

在这里插入图片描述

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

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

在这里插入图片描述

平台总线架构(platform)

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

在这里插入图片描述

Linux设备树

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

在这里插入图片描述

Linux驱动演进的趋势

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值