嵌入式Linux系统总结
本系列整理一系列嵌入式Linux学习和开发中应用的技术,按照功能划分为SDK平台构建、嵌入式Linux运行平台构建,驱动开发技术和应用开发技术,涉及嵌入式Linux开发中的主要技术。
- SDK平台构建,包含Linux平台安装(Ubuntu、Arch、centos),软件和支持库安装,交叉编译,shell语法,快速部署SDK脚本工具集实现
- 嵌入式Linux运行平台构建,包含u-boot移植和框架,kernel移植和框架,rootfs文件系统构建方法,qemu实用虚拟机启动Linux平台
- 驱动开发技术,包含Linux内核驱动接口,设备树语法和设备树接口,字符设备,块设备和网络设备,子系统功能实现(i2c, spi, input, iio)
- 应用开发技术,Linu应用层接口,cpp语法小结,Linux平台调试方法,Linux框架设计和web应用开发,Linux平台GUI开发技术
因为本系列涉及知识点较多,来自于个人实践和理解,难免有纰漏和不足之处,欢迎各位批评指正;如果有疑问,请提issue或加新建qq群(877393195)进行讨论。
目录如下所示。
ch00.前言
说明
本系列主要按照如何构建一个完整嵌入Linux产品应用的开发流程来说明,而不是以难易度进行先后顺序的整理。如果在学习和理解中遇到难题,可以跳过直接进行后续的学习,从简单的入手,熟悉基础知识后可能更高效。另外嵌入式Linux系统是用于设计产品的技术,只依靠文档学习是远远不够的,需要在实际硬件平台调试验证,理解源码,自己设计开发应用,才能够深入理解掌握。可以看到本系列文章涉及内容广泛,限于篇幅部分技术只能浅尝辄止,在讲解相应章节时也会列出我在整理以及开发时涉及的书籍,可以同步去学习。
#github地址
git clone https://github.com/zc110747/build_embed_linux_system.git
另外本项目也配合产品应用项目用于验证相关技术知识,具体如下。
#用于远程管理的嵌入式Linux应用项目
git clone http://github.com/zc110747/remote_manage.git
学习路线
step1: 安装和熟悉Linux平台
主要目标:
- 能够安装Linux系统,并熟悉命令基本操作
- 掌握Linux下软件安装方法(apt-get或yum),效率类工具应用
- 理解环境变量的基本概念,交叉编译的基础
主要内容:
- 虚拟机使用以及安装Linux系统
- 常用指令熟悉(cd, mv, cp, echo, rm, chmod…)
- 常用软件查询,安装和应用(ssh, tftp, nfs, samba…)
- 能够使用gcc和Makefile构建应用
step2: 基于已移植源码构建嵌入式Linux平台
主要目标:
- 能够完成嵌入式Linux系统构建,并更新到硬件中实际运行
- 熟悉在U-Boot和Linux下的环境变量参数和命令操作
- 理解驱动的框架,参考例程实现字符型设备驱动
- 处理理解设备树的概念,并应用到驱动开发中
主要内容:
- 熟悉U-Boot,Kernel和rootfs基本概念
- 掌握menuconfig配置修改方法及Makefile编译
- 熟悉至少一款芯片的下载更新方法(包含不限于sdcard, tftp,nfs等)
- 尝试至少一种文件系统的编译构建过程(busybox, buildroot, yocto, debian, ubuntu或android)
- 掌握U-Boot和Linux平台中的主要环境变量和系统命令
- 参考源码实现字符型设备驱动,完成驱动加载,移除, 设备的创建过程
step3:嵌入式Linux应用初步开发
主要目标:
- 掌握Linux平台下应用的常见接口
- 能够构建嵌入式Linux应用,模块化和Makefile构建
- 常见软件和库的交叉编译方法,添加应用支持
- 掌握Linux平台下的代码调试能力
- 基于C++实现Linux平台应用开发
主要内容:
- Linux应用层API接口掌握
- Makefile语法和项目构建方法
- 基于gcc实现Linux平台应用
- Linux平台下库的交叉编译和应用(json, mqtt, asio, fmt…)
step4:深入学习嵌入式驱动开发
主要目标:
- 掌握Linux主要驱动的开发方法, 内核提供驱动的接口
- 理解SOC结构,包含core,clock,peripheral等.
- 理解中断机制,掌握内核常用中断相关接口使用
- 能够实现大部分字符型驱动,掌握主要硬件框架的驱动开发方法
- 能够基于常用子系统开发驱动
- 掌握并发控制相关接口应用
主要内容:
- Linux内核接口功能和使用说明
- Linux内核并发控制接口说明
- 中断机制和相关接口实现
- Cortex-A芯片设计和内核资源说明
- spi, i2c框架下的驱动开发
- iio, rtc子系统下的驱动开发
step5: 嵌入式Linux平台应用方案构建
主要目标:
- APP功能框架构建和代码实现
- 实现基于Qt C++的应用实现
- 基于node和vue的web应用构建
- 系统快速部署和编译命令实现
主要内容:
- 应用需求分析,实现APP功能框架,分解模块
- 基于Qt C++的方法实现
- 基于node和vue的前后端框架实现
- 熟练掌握shell语法,基础上构建快速部署方案
- 基于打印或gdb的调试方法学习
扩展: 芯片bringup和Linux系统平台掌握
主要目标:
- 掌握块设备,网络设备的驱动开发
- 实现基于DRM框架的驱动开发
- U-Boot移植,理解U-Boot执行流程
- Kernel移植过程,理解Kernel执行流程
- 完成至少一款芯片的bringup完整流程
- 支持文件系统构建,busybox, debian, ubuntu和android.
- 基于qemu的仿真环境构建系统
主要内容:
- 块设备和网络设备驱动
- drm框架驱动设备开发
- U-Boot移植方法
- U-Boot执行流程分析
- Kernel移植方法
- Kernel执行流程分析
- 文件系统移植和构建方法
- qemu虚拟机模拟嵌入式Linux系统运行