笔记资料总结自# 再谈Linux学习方法-框架学习法
1. 嵌入式技术
- C语言
- 数字电路基础(单片机)
ARM体系结构
- 硬件设计(ARM接口技术)
- Linux 系统与管理
- Linux 系统开发
- Linux 驱动开发
BootLoader
(UBOOT)QT 和 C++
- Android 系统和 Java
2. 系统引导程序 UBOOT 学习框架
- 入门级
- 1.BootLoader 是首先执行的片外程序
- 2.引导 Linux 内核
- 3.生命周期和调用关系
- 4.编译、烧写的命令
- 工程师级
- 5.启动过程简单分析
- 6.修改读秒时间
- 7.启动模式配置
- 8.CMDLINE
- 9.启动时的点灯方法
- 专家级
- 10.UBOOT源码分析
- 11.系统移植
- 12.增加功能和创新开发
3. Linux 系统框架
- 应用程序(用户态)
- Linux 内核(内核态)
- 系统调用
- 操作系统通用代码
- 设备驱动
- 硬件设备
ARM 处理器的工作模式:
- 用户模式
- 系统模式
- 中断模式
Linux 的文件系统:
- Linux启动后一定要挂载一个文件系统
- 文件系统可大可小,通过构造文件系统可衍生为 QT、Ubuntu、Android、等系统
- Linux 重要思想:
一切皆是文件
- 硬件的操作都可以归结为 :read,write,open,close 操作
Linux 的三个重要文件:
- 引导程序(BootLoader):uboot.bin / uboot.imx
- Linux 内核镜像 : zImage
- 文件系统镜像:system.img / rootfs.tar.ba2
执行顺序:
- BootLoader引导程序 => Linux内核(zImage) => 挂载文件系统(system.img)
4. Linux应用程序编程
- 基于Linux内核之上,基于
系统调用
或者库函数的编程 - 系统调用:Linux内核中预置的一组用于实现各种系统功能的子程序
- 系统调用有操作系统核心提供,运行与
核心态
- 系统调用在 ARM 系统中一般使用
软中断
的方式来实现
包含内容:
- 文件IO
- 对文件的读写操作
- open()
- read()
- write()
- ioctl()
- close()
- 文件描述符(句柄) fd=open("/a.txt")
- 标准IO
- 调用标准 C 语言库,可移植
- fopen()
- fread()
- fwrite()
- IO模型
- 阻塞式
- 非阻塞式
- 异步
- IO多路复用
- 信号驱动
- 对文件的读写操作
- 多进程
- 进程状态
- fork()
- 进程间通信
- 管道(匿名管道,命名管道)
- 信号
- 信号量
- 消息队列
- 共享内存
- 套接字
- 多线程
- pthread_create()
- 线程同步
- 互斥锁
- 条件变量
- 读写锁
- 信号量
- 网络Socket编程
- TCP/IP协议栈
- socket是一种标准
- 时间函数,文件系统操作
- 用户管理,内存管理等
学习框架:
- 入门
- 文件IO基础
- 多进程多线程基础
- 网络socket编程
- 时间函数
- 进阶
- IO模型
- 进程通信
- 线程同步
- 标准IO/文件共享dup/文件锁fcntl
Linux 驱动
驱动架构时间线:
- 原始架构(2001-2004)
- v2.4
- 设备节点:mknod
- 平台总线(2004-2011)
- v2.6
- 自动生成节点
- 引入了设备驱动模型(sysfs),使得热插拔/电源管理得以加强
- 实现了
BSP(板级支持包)
和驱动
的分离
- 设备树(2011-2023)
- v3.x
- 设备资源独立出来(arch/arm/match-x/board.c),从C文件发展为 DTS 设备树脚本文件(arch/arm/boot/dts/xxx.dts)
- Bootloard 参与传递设备资源(启动时把设备树文件传给内核)